{"id":17626677,"url":"https://github.com/chitoku-k/edgerouter-exporter","last_synced_at":"2025-04-15T21:36:03.828Z","repository":{"id":37084100,"uuid":"315995323","full_name":"chitoku-k/edgerouter-exporter","owner":"chitoku-k","description":"A Prometheus exporter for EdgeRouter","archived":false,"fork":false,"pushed_at":"2025-04-11T19:49:42.000Z","size":1002,"stargazers_count":23,"open_issues_count":0,"forks_count":3,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-11T20:40:31.659Z","etag":null,"topics":["edgerouter","prometheus-exporter"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chitoku-k.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-11-25T16:29:37.000Z","updated_at":"2025-04-11T19:49:44.000Z","dependencies_parsed_at":"2023-02-18T22:35:14.319Z","dependency_job_id":"1f44d751-43d2-4020-9fa1-375e119af2eb","html_url":"https://github.com/chitoku-k/edgerouter-exporter","commit_stats":{"total_commits":527,"total_committers":5,"mean_commits":105.4,"dds":"0.21631878557874762","last_synced_commit":"97e87cb1fae1bb06a5eaf2fba285b1b28ae46c16"},"previous_names":[],"tags_count":39,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chitoku-k%2Fedgerouter-exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chitoku-k%2Fedgerouter-exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chitoku-k%2Fedgerouter-exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chitoku-k%2Fedgerouter-exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chitoku-k","download_url":"https://codeload.github.com/chitoku-k/edgerouter-exporter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249158592,"owners_count":21222139,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["edgerouter","prometheus-exporter"],"created_at":"2024-10-22T23:24:26.818Z","updated_at":"2025-04-15T21:36:03.811Z","avatar_url":"https://github.com/chitoku-k.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"edgerouter-exporter\n===================\n\n[![][workflow-badge]][workflow-link]\n\nA Prometheus exporter for EdgeRouter BGP, DDNS, Load Balancers, and PPPoE sessions\n\n## Requirements\n\nFor development, the following dependencies are required:\n\n- [rustup](https://rustup.rs/) (nightly toolchain is required for [build-std](https://doc.rust-lang.org/cargo/reference/unstable.html#build-std))\n- [cross](https://github.com/cross-rs/cross)\n- openssl (e.g. libssl-dev, openssl, or openssl-devel)\n\nIn order to build the artifact, use `cross build`. To find on which architecture\nyour model is running, refer to [EdgeRouter - Hardware Offloading].\n\n### MediaTek-based devices\n\n```sh\n$ cross build --release --target=mipsel-unknown-linux-gnu\n```\n\n### Cavium-based devices\n\n```sh\n$ cross build --release --target=mips-unknown-linux-gnu\n```\n\n## Installation\n\nDownload the latest version of edgerouter-exporter and move it to the directory\nwhere it persists after the EdgeOS upgrades. Note that the root permission is\nrequired because it internally calls `ubnt_vtysh`.\n\nTo find on which architecture your model is running, refer to [EdgeRouter - Hardware Offloading].\n\n### MediaTek-based devices\n\n```console\n$ curl -fLO https://github.com/chitoku-k/edgerouter-exporter/releases/latest/download/prometheus-edgerouter-exporter_mipsel.deb\n$ sudo mkdir -p /config/data/firstboot/install-packages\n$ sudo mv prometheus-edgerouter-exporter_mipsel.deb /config/data/firstboot/install-packages\n$ sudo dpkg -i /config/data/firstboot/install-packages/prometheus-edgerouter-exporter_mipsel.deb\n```\n\n### Cavium-based devices\n\n```console\n$ curl -fLO https://github.com/chitoku-k/edgerouter-exporter/releases/latest/download/prometheus-edgerouter-exporter_mips.deb\n$ sudo mkdir -p /config/data/firstboot/install-packages\n$ sudo mv prometheus-edgerouter-exporter_mips.deb /config/data/firstboot/install-packages\n$ sudo dpkg -i /config/data/firstboot/install-packages/prometheus-edgerouter-exporter_mips.deb\n```\n\n### Configuration\n\n#### Environment variables\n\nConfigure by creating `/config/user-data/edgerouter-exporter.env`.\n\n```sh\n# Log level (optional; one of trace, debug, info, warn, and error)\n#LOG_LEVEL=info\n\n# Port number (required)\nPORT=8080\n\n# TLS certificate and private key (optional; if not specified, exporter is served over HTTP)\n#TLS_CERT=/path/to/tls/cert\n#TLS_KEY=/path/to/tls/key\n\n# Path to Unix socket for VICI (optional)\n#VICI_PATH=/run/charon.vici\n\n# Op command (optional)\n#IP_COMMAND=/bin/ip\n#OP_COMMAND=/opt/vyatta/bin/vyatta-op-cmd-wrapper\n#OP_DDNS_COMMAND=/opt/vyatta/bin/sudo-users/vyatta-op-dynamic-dns.pl\n#VTYSH_COMMAND=/opt/vyatta/sbin/ubnt_vtysh\n```\n\n#### Command-line options\n\nThe command-line options that are equivalent to the environment variables above\ncan be specified by lowercasing option and replacing underscores (`_`) with\nhyphens (`-`). For instance, `LOG_LEVEL` is equivalent to `--log-level`.\n\n## Usage\n\n```sh\n$ sudo systemctl enable --now prometheus-edgerouter-exporter.service\n```\n\n## Prometheus Metrics\n\n### Version\n\n```\n# HELP edgerouter_info Version info\n# TYPE edgerouter_info gauge\nedgerouter_info{version=\"v2.0.6\",build_id=\"5208541\",model=\"EdgeRouter X 5-Port\"} 1\n```\n\n### BGP\n\n```\n# HELP edgerouter_bgp_message_in_queue Number of BGP messages in incoming queue\n# TYPE edgerouter_bgp_message_in_queue gauge\nedgerouter_bgp_message_in_queue{as=\"64497\",neighbor=\"192.0.2.2\",table_version=\"128\"} 0\nedgerouter_bgp_message_in_queue{as=\"64497\",neighbor=\"192.0.2.3\",table_version=\"128\"} 0\nedgerouter_bgp_message_in_queue{as=\"64497\",neighbor=\"2001:db8::2\",table_version=\"128\"} 0\nedgerouter_bgp_message_in_queue{as=\"64497\",neighbor=\"2001:db8::3\",table_version=\"128\"} 0\n# HELP edgerouter_bgp_message_out_queue Number of BGP messages in outgoing queue\n# TYPE edgerouter_bgp_message_out_queue gauge\nedgerouter_bgp_message_out_queue{as=\"64497\",neighbor=\"192.0.2.2\",table_version=\"128\"} 0\nedgerouter_bgp_message_out_queue{as=\"64497\",neighbor=\"192.0.2.3\",table_version=\"128\"} 0\nedgerouter_bgp_message_out_queue{as=\"64497\",neighbor=\"2001:db8::2\",table_version=\"128\"} 0\nedgerouter_bgp_message_out_queue{as=\"64497\",neighbor=\"2001:db8::3\",table_version=\"128\"} 0\n# HELP edgerouter_bgp_message_received_total Total number of BGP messages received\n# TYPE edgerouter_bgp_message_received_total gauge\nedgerouter_bgp_message_received_total{as=\"64497\",neighbor=\"192.0.2.2\",table_version=\"128\"} 1000\nedgerouter_bgp_message_received_total{as=\"64497\",neighbor=\"192.0.2.3\",table_version=\"128\"} 2000\nedgerouter_bgp_message_received_total{as=\"64497\",neighbor=\"2001:db8::2\",table_version=\"128\"} 3000\nedgerouter_bgp_message_received_total{as=\"64497\",neighbor=\"2001:db8::3\",table_version=\"128\"} 4000\n# HELP edgerouter_bgp_message_sent_total Total number of BGP messages sent\n# TYPE edgerouter_bgp_message_sent_total gauge\nedgerouter_bgp_message_sent_total{as=\"64497\",neighbor=\"192.0.2.2\",table_version=\"128\"} 5000\nedgerouter_bgp_message_sent_total{as=\"64497\",neighbor=\"192.0.2.3\",table_version=\"128\"} 6000\nedgerouter_bgp_message_sent_total{as=\"64497\",neighbor=\"2001:db8::2\",table_version=\"128\"} 7000\nedgerouter_bgp_message_sent_total{as=\"64497\",neighbor=\"2001:db8::3\",table_version=\"128\"} 8000\n# HELP edgerouter_bgp_prefix_received_total Total number of BGP prefixes received\n# TYPE edgerouter_bgp_prefix_received_total gauge\nedgerouter_bgp_prefix_received_total{as=\"64497\",neighbor=\"192.0.2.2\",table_version=\"128\"} 9\nedgerouter_bgp_prefix_received_total{as=\"64497\",neighbor=\"192.0.2.3\",table_version=\"128\"} 10\nedgerouter_bgp_prefix_received_total{as=\"64497\",neighbor=\"2001:db8::2\",table_version=\"128\"} 11\nedgerouter_bgp_prefix_received_total{as=\"64497\",neighbor=\"2001:db8::3\",table_version=\"128\"} 12\n# HELP edgerouter_bgp_session_seconds_total Total seconds for established BGP session\n# TYPE edgerouter_bgp_session_seconds_total gauge\nedgerouter_bgp_session_seconds_total{as=\"64497\",neighbor=\"192.0.2.2\",table_version=\"128\"} 100\nedgerouter_bgp_session_seconds_total{as=\"64497\",neighbor=\"192.0.2.3\",table_version=\"128\"} 200\nedgerouter_bgp_session_seconds_total{as=\"64497\",neighbor=\"2001:db8::2\",table_version=\"128\"} 300\nedgerouter_bgp_session_seconds_total{as=\"64497\",neighbor=\"2001:db8::3\",table_version=\"128\"} 400\n```\n\n### Dynamic DNS\n\n```\n# HELP edgerouter_dynamic_dns_status Result of DDNS update\n# TYPE edgerouter_dynamic_dns_status gauge\nedgerouter_dynamic_dns_status{hostname=\"1.example.com\",interface_name=\"eth0\",ip_address=\"192.0.2.1\"} 1\nedgerouter_dynamic_dns_status{hostname=\"2.example.com\",interface_name=\"eth1\",ip_address=\"192.0.2.2\"} 0\n```\n\n### IPsec VPN\n\nMetrics and labels are designed to be compliant with [IPsec Exporter][] but note\nthat the results might not fundamentally equal as both implementations vary.\n\n```\n# HELP ipsec_up Result of IPsec metrics scrape.\n# TYPE ipsec_up gauge\nipsec_up{tunnel=\"peer-1.example.com-tunnel-1\"} 1\nipsec_up{tunnel=\"peer-2.example.com-tunnel-1\"} 1\n# HELP ipsec_status Status of IPsec tunnel.\n# TYPE ipsec_status gauge\nipsec_status{tunnel=\"peer-1.example.com-tunnel-1\"} 0\nipsec_status{tunnel=\"peer-2.example.com-tunnel-1\"} 0\n# HELP ipsec_in_bytes Total receive bytes for IPsec tunnel.\n# TYPE ipsec_in_bytes gauge\nipsec_in_bytes{tunnel=\"peer-1.example.com-tunnel-1\"} 1000\nipsec_in_bytes{tunnel=\"peer-2.example.com-tunnel-1\"} 2000\n# HELP ipsec_out_bytes Total transmit bytes for IPsec tunnel.\n# TYPE ipsec_out_bytes gauge\nipsec_out_bytes{tunnel=\"peer-1.example.com-tunnel-1\"} 3000\nipsec_out_bytes{tunnel=\"peer-2.example.com-tunnel-1\"} 4000\n# HELP ipsec_in_packets Total receive packets for IPsec tunnel.\n# TYPE ipsec_in_packets gauge\nipsec_in_packets{tunnel=\"peer-1.example.com-tunnel-1\"} 5000\nipsec_in_packets{tunnel=\"peer-2.example.com-tunnel-1\"} 6000\n# HELP ipsec_out_packets Total transmit packets for IPsec tunnel.\n# TYPE ipsec_out_packets gauge\nipsec_out_packets{tunnel=\"peer-1.example.com-tunnel-1\"} 7000\nipsec_out_packets{tunnel=\"peer-2.example.com-tunnel-1\"} 8000\n```\n\n### Load Balancers\n\n```\n# HELP edgerouter_load_balancer_status Status (0: inactive, 1: active, 2: failover)\n# TYPE edgerouter_load_balancer_status gauge\nedgerouter_load_balancer_status{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 1\nedgerouter_load_balancer_status{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 0\n# HELP edgerouter_load_balancer_weight_ratio Weight ratio\n# TYPE edgerouter_load_balancer_weight_ratio gauge\nedgerouter_load_balancer_weight_ratio{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 1.0\nedgerouter_load_balancer_weight_ratio{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 0.0\n# HELP edgerouter_load_balancer_flows_total Total number of flows\n# TYPE edgerouter_load_balancer_flows_total gauge\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\",flow=\"WAN Out\"} 3000\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\",flow=\"WAN In\"} 3100\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\",flow=\"Local ICMP\"} 1000\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\",flow=\"Local DNS\"} 0\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\",flow=\"Local Data\"} 0\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\",flow=\"WAN Out\"} 2000\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\",flow=\"WAN In\"} 2100\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\",flow=\"Local ICMP\"} 500\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\",flow=\"Local DNS\"} 0\nedgerouter_load_balancer_flows_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\",flow=\"Local Data\"} 0\n# HELP edgerouter_load_balancer_health Result of watchdog\n# TYPE edgerouter_load_balancer_health gauge\nedgerouter_load_balancer_health{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 1\nedgerouter_load_balancer_health{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 0\n# HELP edgerouter_load_balancer_ping_fail_total Total number of ping failures\n# TYPE edgerouter_load_balancer_ping_fail_total gauge\nedgerouter_load_balancer_ping_fail_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 125\nedgerouter_load_balancer_ping_fail_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 2\n# HELP edgerouter_load_balancer_ping_health Result of ping\n# TYPE edgerouter_load_balancer_ping_health gauge\nedgerouter_load_balancer_ping_health{gateway=\"8.8.8.8\",group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 1\nedgerouter_load_balancer_ping_health{gateway=\"8.8.8.8\",group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 0\n# HELP edgerouter_load_balancer_ping_total Total number of pings\n# TYPE edgerouter_load_balancer_ping_total gauge\nedgerouter_load_balancer_ping_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 1000\nedgerouter_load_balancer_ping_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 1000\n# HELP edgerouter_load_balancer_route_drop_total Total number of route drops\n# TYPE edgerouter_load_balancer_route_drop_total gauge\nedgerouter_load_balancer_route_drop_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 5\nedgerouter_load_balancer_route_drop_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 0\n# HELP edgerouter_load_balancer_run_fail_total Total number of run failures\n# TYPE edgerouter_load_balancer_run_fail_total gauge\nedgerouter_load_balancer_run_fail_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth0\"} 0\nedgerouter_load_balancer_run_fail_total{group_name=\"WAN_FAILOVER\",interface_name=\"eth1\"} 0\n```\n\n### PPPoE Client Sessions\n\n```\n# HELP edgerouter_pppoe_client_session_receive_bytes_total Total receive bytes for PPPoE client session\n# TYPE edgerouter_pppoe_client_session_receive_bytes_total gauge\nedgerouter_pppoe_client_session_receive_bytes_total{interface_name=\"pppoe0\",ip_address=\"192.0.2.255\",local_ip_address=\"203.0.113.1\",protocol=\"PPPoE\",user=\"user01\"} 79360\n# HELP edgerouter_pppoe_client_session_receive_packets_total Total receive packets for PPPoE client session\n# TYPE edgerouter_pppoe_client_session_receive_packets_total gauge\nedgerouter_pppoe_client_session_receive_packets_total{interface_name=\"pppoe0\",ip_address=\"192.0.2.255\",local_ip_address=\"203.0.113.1\",protocol=\"PPPoE\",user=\"user01\"} 1638\n# HELP edgerouter_pppoe_client_session_seconds_total Total seconds for PPPoE client session\n# TYPE edgerouter_pppoe_client_session_seconds_total gauge\nedgerouter_pppoe_client_session_seconds_total{interface_name=\"pppoe0\",ip_address=\"192.0.2.255\",local_ip_address=\"203.0.113.1\",protocol=\"PPPoE\",user=\"user01\"} 18975\n# HELP edgerouter_pppoe_client_session_transmit_bytes_total Total transmit bytes for PPPoE client session\n# TYPE edgerouter_pppoe_client_session_transmit_bytes_total gauge\nedgerouter_pppoe_client_session_transmit_bytes_total{interface_name=\"pppoe0\",ip_address=\"192.0.2.255\",local_ip_address=\"203.0.113.1\",protocol=\"PPPoE\",user=\"user01\"} 39116\n# HELP edgerouter_pppoe_client_session_transmit_packets_total Total transmit packets for PPPoE client session\n# TYPE edgerouter_pppoe_client_session_transmit_packets_total gauge\nedgerouter_pppoe_client_session_transmit_packets_total{interface_name=\"pppoe0\",ip_address=\"192.0.2.255\",local_ip_address=\"203.0.113.1\",protocol=\"PPPoE\",user=\"user01\"} 412\n```\n\n### Spec\n\n| Status | Condition                           |\n|--------|-------------------------------------|\n| 200    | Success.                            |\n| 500    | Unexpected error calling a command. |\n\n[workflow-link]:                    https://github.com/chitoku-k/edgerouter-exporter/actions?query=branch:master\n[workflow-badge]:                   https://img.shields.io/github/actions/workflow/status/chitoku-k/edgerouter-exporter/ci.yml?branch=master\u0026style=flat-square\n[IPsec Exporter]:                   https://github.com/dennisstritzke/ipsec_exporter\n[EdgeRouter - Hardware Offloading]: https://help.ui.com/hc/en-us/articles/115006567467-EdgeRouter-Hardware-Offloading\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchitoku-k%2Fedgerouter-exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchitoku-k%2Fedgerouter-exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchitoku-k%2Fedgerouter-exporter/lists"}