{"id":42564321,"url":"https://github.com/eric-b/livebox-exporter","last_synced_at":"2026-01-28T20:42:08.771Z","repository":{"id":240660973,"uuid":"803242872","full_name":"eric-b/livebox-exporter","owner":"eric-b","description":"Livebox 5 Exporter for Prometheus and dashboard for Grafana","archived":false,"fork":false,"pushed_at":"2024-12-04T13:10:31.000Z","size":1428,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-12-04T14:21:56.035Z","etag":null,"topics":["livebox","monitoring","observability"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eric-b.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-05-20T10:56:57.000Z","updated_at":"2024-12-04T13:09:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"3a69f3b0-9d7e-4511-ac38-04df5df9b6fc","html_url":"https://github.com/eric-b/livebox-exporter","commit_stats":null,"previous_names":["eric-b/livebox-exporter"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/eric-b/livebox-exporter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-b%2Flivebox-exporter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-b%2Flivebox-exporter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-b%2Flivebox-exporter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-b%2Flivebox-exporter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eric-b","download_url":"https://codeload.github.com/eric-b/livebox-exporter/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eric-b%2Flivebox-exporter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28851140,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["livebox","monitoring","observability"],"created_at":"2026-01-28T20:42:07.970Z","updated_at":"2026-01-28T20:42:08.758Z","avatar_url":"https://github.com/eric-b.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# This repository has been moved\n\nNew location of this repository is on Codeberg: https://codeberg.org/eric-b/livebox-exporter\n\nFollowing content is the original README and may not be up to date.\n\n# Livebox Exporter for Prometheus\n\nThis project exposes a subset of basic metrics from Orange **Livebox 5** router.\nIt is meant to be integrated with [Prometheus](https://prometheus.io/docs/instrumenting/exporters/).\n\nOnce deployed, endpoint `/metrics` returns a page of [text-based metrics](https://prometheus.io/docs/instrumenting/exposition_formats/#text-based-format/). Default URL will be: `http://localhost:9105/metrics`\n\nYou can get an idea of available metrics from [this file LB5-metrics.csv located in embedded resources](src/LiveboxExporter/Resources/LB5-metrics.csv).\n\nDashboard for Grafana is available here: https://grafana.com/grafana/dashboards/21101-livebox/\n\n![Grafana dashboard example](graphics/grafana-dashboard-sample.png)\n\n## Similar alternatives\n\nThis project is designed to run in the background continuously (headless and non interactive), to monitor the WAN connection status. My primarily goal was to measure stability of my Internet access at home.\n\nIf you are looking for an interactive desktop application, also with more features, see [Livebox Monitor](https://github.com/p-dor/LiveboxMonitor) which works very well.\n\nI also discovered even more alternatives after I made this project, you can look for them through the [livebox topic on Github](https://github.com/topics/livebox).\n\n## Application settings\n\nIf you try to run program with default settings, it may work if you are lucky: Livebox address should be automatically detected if it is on same network (same subnet). \n\nWithout your admin password to authenticate to your Livebox, only a subset of metrics will be available.\n\nAs usual, application settings are in file `appsettings.json`, and these settings can be overriden by environment variables.\n\nIt's best to configure program with your own settings, especially these keys:\n\n- **Host**: IP address of your Livebox (eg: \"192.168.1.1\")\n- **Password**: password of admin user on your Livebox. Alternatively, you can also set a setting **PasswordFile** with path of a file containing this password.\n\nPort and network interface to listen can be set with setting **urls**. Default is `http://localhost:9105`.\n\n## How to run\n\nProgram can be run from either:\n\n- From provided binary (windows-x64 and linux-x64). See [Releases section](https://github.com/eric-b/livebox-exporter/releases/latest).\n- From [docker image](https://hub.docker.com/r/eric1901/livebox-exporter).\n- By compiling different kind of binary from source code.\n\nThere is little point in running this program alone. You typically need also to setup:\n\n- [Prometheus](https://prometheus.io/) (completely free and open-source)\n- [Grafana](https://grafana.com/docs/grafana/latest/setup-grafana/installation/) (completely free **if you choose the OSS edition**)\n\n## Run in Kubernetes\n\nDocker image is published on [Docker Hub](https://hub.docker.com/r/eric1901/livebox-exporter).\n\nExamples of resource manifests:\n\n```yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: livebox-exporter-secret\ntype: Opaque\nstringData:\n  admin-password: \"YOUR PASSWORD\"\n---\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: livebox-exporter-deployment\n  labels:\n    app: livebox-exporter\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: livebox-exporter\n  template:\n    metadata:\n      labels:\n        app: livebox-exporter\n    spec:\n      volumes:\n      - name: secret-volume\n        secret:\n          secretName: livebox-exporter-secret\n      containers:\n      - name: livebox-exporter\n        image: eric1901/livebox-exporter\n        volumeMounts:\n        - name: secret-volume\n          readOnly: true\n          mountPath: \"/var/secret/\"\n        env:\n        - name: urls\n          value: \"http://*:9105\"\n        - name: Livebox__Host\n          value: \"192.168.1.1\"\n        - name: Livebox__PasswordFile\n          value: \"/var/secret/admin-password\"\n```\n\n### Restricted network policy\n\nYou legitimately may want to restrict egress network policy of this pod.\n\nAssuming you already have setup a restrictive [network policy](https://kubernetes.io/docs/concepts/services-networking/network-policies/), here is an example of a policy to allow egress from livebox-exporter pod to your livebox (you may need to adapt CIDR value):\n\n```yaml\napiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  name: livebox-exporter-networkpolicy\nspec:\n  podSelector:\n    matchLabels:\n      app: \"livebox-exporter\"\n  egress:\n  - to:\n    - ipBlock:\n        cidr: 192.168.0.0/16\n    ports:\n    - protocol: TCP\n      port: 80\n  policyTypes:\n  - Egress\n```\n\nIf you do not already have a restrictive egress policy, here is an example. You may adapt it to your needs. **Be aware applying this policy may break connectivity of other pods**.\n\n```yaml\napiVersion: networking.k8s.io/v1\nkind: NetworkPolicy\nmetadata:\n  name: default-deny-all-egress\nspec:\n  podSelector: {}\n  egress:\n  - to:\n    - ipBlock:\n        cidr: 10.0.0.0/10\n    ports:\n    - protocol: TCP\n      port: 53\n    - protocol: UDP\n      port: 53\n  policyTypes:\n  - Egress\n```\n\nOnce applied, you can play with the `livebox-exporter-networkpolicy` (delete / apply) to see that livebox-exporter cannot or can reach your livebox.\n\n### Create a service\n\n#### Expose API outside Kubernetes cluster\n\nFor example, if you simply want to expose this API outside of the Kubernetes cluster, use a `NodePort` service type:\n\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: livebox-exporter-service\n  labels:\n    app: livebox-exporter\nspec:\n  type: NodePort\n  selector:\n    app: livebox-exporter\n  ports:\n  - name: http\n    port: 9105\n    protocol: TCP\n    targetPort: 9105\n    nodePort: 30080\n```\n\nThe API will be accessible via `http://Your-Kubernetes-Cluster-Ip:30080/metrics`.\n\n#### Expose API inside Kubernetes cluster and use a reverse proxy\n\nAlternatively, if you have a reverse proxy inside another pod on same cluster, use a `ClusterIP` service type:\n\n```yaml\napiVersion: v1\nkind: Service\nmetadata:\n  name: livebox-exporter-service\n  labels:\n    app: livebox-exporter\nspec:\n  type: ClusterIP\n  selector:\n    app: livebox-exporter\n  ports:\n  - name: http\n    port: 9105\n    protocol: TCP\n    targetPort: 9105\n```\n\nAt home, I use an [nginx as a reverse proxy](https://docs.nginx.com/nginx/admin-guide/basic-functionality/managing-configuration-files/#virtual-servers), with this virtual server configuration inside conventional directory `conf.d` (mounted through a persistent volume claim):\n\n```\nserver {\n    listen 80;\n    server_name YOUR-SERVER-NAME;\n\n    location /livebox {\n        proxy_pass http://livebox-exporter-service:9105;\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n        proxy_set_header X-Forwarded-Prefix /livebox;\n    }\n}\n```\n\nMy nginx runs inside another pod on same Kubernetes single-node cluster and its port 80 is exposed on a node port 30080 (whithin default exposed port range of my K3S).\nSo `http://localhost:30080` points to my nginx pod, and any URL starting with prefix `/livebox` is directed to `http://livebox-exporter-service:9105`.\n\nMy Prometheus instance runs on same server, but not inside Kubernetes. Then, scrape URL from Prometheus running on same server is: `http://localhost:30080/livebox/metrics`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-b%2Flivebox-exporter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feric-b%2Flivebox-exporter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feric-b%2Flivebox-exporter/lists"}