GithubHelp home page GithubHelp logo

bimmel1231 / fritzbox_exporter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sberk42/fritzbox_exporter

0.0 0.0 0.0 299 KB

Fritz!Box Upnp statistics exporter for prometheus

License: Apache License 2.0

Go 98.07% Dockerfile 1.93%

fritzbox_exporter's Introduction

Fritz!Box Upnp statistics exporter for prometheus

This exporter exports some variables from an AVM Fritzbox to prometheus.

This exporter is tested with a Fritzbox 7590 software version 07.12, 07.20, 07.21, 07.25, 07.29 and 07.50.

The goal of the fork is:

  • allow passing of username / password using evironment variable
  • use https instead of http for communitcation with fritz.box
  • move config of metrics to be exported to config file rather then code
  • add config for additional metrics to collect (especially from TR-064 API)
  • create a grafana dashboard consuming the additional metrics
  • collect metrics from lua APIs not available in UPNP APIs

Other changes:

  • replaced digest authentication code with own implementation
  • improved error messages
  • test mode prints details about all SOAP Actions and their parameters
  • collect option to directly test collection of results
  • additional metrics to collect details about connected hosts and DECT devices
  • support to use results like hostname or MAC address as labels to metrics
  • support for metrics from lua APIs (e.g. CPU temperature, utilization, ...)

Building

go install github.com/sberk42/fritzbox_exporter@latest

Running

In the configuration of the Fritzbox the option "Statusinformationen über UPnP übertragen" in the dialog "Heimnetz > Heimnetzübersicht > Netzwerkeinstellungen" has to be enabled.

Using docker

The image is available as package using: docker pull ghcr.io/sberk42/fritzbox_exporter/fritzbox_exporter:latest or you can build the container yourself: docker build --tag fritzbox-prometheus-exporter:latest .

Then start the container:

$ docker run -e 'USERNAME=your_fritzbox_username' \
    -e 'PASSWORD=your_fritzbox_password' \
    -e 'GATEWAY_URL="http://192.168.0.1:49000"' \
    -e 'LISTEN_ADDRESS="0.0.0.0:9042"' \
    fritzbox-prometheus-exporter:latest

I've you're getting no such host issues, define your FritzBox as DNS server for your docker container like this:

$ docker run --dns YOUR_FRITZBOX_IP \
    -e 'USERNAME=your_fritzbox_username' \
    -e 'PASSWORD=your_fritzbox_password' \
    -e 'GATEWAY_URL="http://192.168.0.1:49000"' \
    -e 'LISTEN_ADDRESS="0.0.0.0:9042"' \
    fritzbox-prometheus-exporter:latest

Using docker-compose

Set your environment variables within the docker-compose.yml file.

Then start up the container using docker-compose up -d.

Using the binary

Usage:

$GOPATH/bin/fritzbox_exporter -h
Usage of ./fritzbox_exporter:
  -gateway-url string
    The URL of the FRITZ!Box (default "http://fritz.box:49000")
  -gateway-luaurl string
    The URL of the FRITZ!Box UI (default "http://fritz.box")
  -metrics-file string
    The JSON file with the metric definitions. (default "metrics.json")
  -lua-metrics-file string
    The JSON file with the lua metric definitions. (default "metrics-lua.json")
  -test
    print all available SOAP calls and their results (if call possible) to stdout
  -json-out string
    store metrics also to JSON file when running test   
  -testLua
    read luaTest.json file make all contained calls and dump results
  -collect
    collect metrics once print to stdout and exit
  -nolua
    disable collecting lua metrics
  -username string
    The user for the FRITZ!Box UPnP service
  -password string
    The password for the FRITZ!Box UPnP service
  -listen-address string
    The address to listen on for HTTP requests. (default "127.0.0.1:9042")

The password (needed for metrics from TR-064 API) can be passed over environment variables to test in shell:
read -rs PASSWORD && export PASSWORD && ./fritzbox_exporter -username <user> -test; unset PASSWORD

Exported metrics

start exporter and run curl -s http://127.0.0.1:9042/metrics

Output of -test

The exporter prints all available Variables to stdout when called with the -test option. These values are determined by parsing all services from http://fritz.box:49000/igddesc.xml and http://fritzbox:49000/tr64desc.xml (for TR64 username and password is needed!!!)

Customizing metrics

The metrics to collect are no longer hard coded, but have been moved to the metrics.json and metrics-lua.json files, so just adjust to your needs (for cable version also see metrics-lua_cable.json). For a list of all the available metrics just execute the exporter with -test (username and password are needed for the TR-064 API!) For lua metrics open UI in browser and check the json files used for the various screens.

For a list of all available metrics, see the dumps below (the format is the same as in the metrics.json file, so it can be used to easily add further metrics to retrieve):

Grafana Dashboard

The dashboard is now also published on Grafana.

fritzbox_exporter's People

Contributors

sberk42 avatar ndecker avatar paulbruedgam avatar dotwee avatar chr-fritz avatar bachp avatar aaschmid avatar transacid avatar 123haynes avatar asottile-vdf avatar juergenhoetzel avatar lapo-luchini avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.