Skip to content

vitaliy-sk/keenetic-grafana-monitoring

Repository files navigation

  _  __                    _   _         _____      _ _           _             
 | |/ /                   | | (_)       / ____|    | | |         | |            
 | ' / ___  ___ _ __   ___| |_ _  ___  | |     ___ | | | ___  ___| |_ ___  _ __ 🇺🇦🇺🇦🇺🇦 
 |  < / _ \/ _ \ '_ \ / _ \ __| |/ __| | |    / _ \| | |/ _ \/ __| __/ _ \| '__|
 | . \  __/  __/ | | |  __/ |_| | (__  | |___| (_) | | |  __/ (__| || (_) | |   
 |_|\_\___|\___|_| |_|\___|\__|_|\___|  \_____\___/|_|_|\___|\___|\__\___/|_|   
                                                                                

Example

Supported routers

Tested with KeeneticOS 3.5+

Supported InfluxDB version

InfluxDB 2.x (recommended) and InfluxDB 1.8+

Preparation

  • Create configuration file config.ini
[influx2]
# If you are using docker-compose it should be http://influxdb:8086
url=http://influxdb:8086
# For influx v1.x please use "-" as a value
org=keenetic
# For influx v1.x please use "username:password" as a token
# See DOCKER_INFLUXDB_INIT_ADMIN_TOKEN in docker-compose.yml
token=admin_token
timeout=6000
# For influx v1.x DB name
bucket=keenetic
[keenetic]
admin_endpoint=http://<keenetic_ip>:80
skip_auth=false
login=<user>
password=<pass>
[collector]
interval_sec=30
  • Copy metrics.json and edit (Optional)

  • Create admin user (Users and access -> Create user, allow 'Web interface' and 'Prohibit saving system settings')

  • (Alternative to create user) Expose Keenetic API on your router

For doing this add port forwarding (Network rules -> Forwarding):

Input: Other destination
IP address: Your network ip (like 192.168.1.0)
Subnet mask: 255.255.255.0
Output: This Keenetic
Open the port: 79
Destination port: 79 

Update conifg.ini

[keenetic]
skip_auth=true

Run

There are three options: run the collector locally with uv, run it in Docker on a separate host, or copy it to the router directly.

Run locally with uv

  • Install uv
  • Create and update the project environment uv sync
  • Start the collector uv run python keentic_influxdb_exporter.py

Run in Docker on a separate host (recommended)

---
version: '3.7'

services:

  keenetic-grafana-monitoring:
    image: techh/keenetic-grafana-monitoring:2.0.3
    container_name: keenetic-grafana-monitoring
    # environment:
    #  - TZ=Europe/Kiev
    volumes:
      - ./config/config.ini:/home/config/config.ini:ro
      # Optionally you can override metrics
      - ./config/metrics.json:/home/config/metrics.json:ro
    restart: always
  
  # Influx 2.x

  influxdb:
    image: 'influxdb:2.1'
    volumes:
      - ./_data/influxdb:/var/lib/influxdb
    ports: 
      - 8086:8086
    environment:
      - DOCKER_INFLUXDB_INIT_MODE=setup
      - DOCKER_INFLUXDB_INIT_ORG=keenetic
      - DOCKER_INFLUXDB_INIT_BUCKET=keenetic
      - DOCKER_INFLUXDB_INIT_RETENTION=52w
      - DOCKER_INFLUXDB_INIT_ADMIN_TOKEN=admin_token
      - DOCKER_INFLUXDB_INIT_USERNAME=admin
      - DOCKER_INFLUXDB_INIT_PASSWORD=password

Connect Grafana

Note You need to have own Grafana installation or you could use free-tier Grafana Cloud

Update your Grafana connection config

  • Configuration -> Data sources
  • Click add custom header
  • Add header:
Authorization		Token <TOKEN_VALUE>

Warning

"Token" word should be before the token value itself

Do not specify username/password

Example

Run on router

  • Copy repository content to your router /opt/home/keenetic-grafana-monitoring
  • Install Python opkg install python3
  • Preferred: install dependencies with uv sync --frozen
  • Fallback if uv is unavailable on the router: install python3-pip and run pip install -r requirements.txt
  • Create script for autorun /opt/etc/init.d/S99keeneticgrafana
#!/bin/sh

[ "$1" != "start" ] && exit 0

PYTHON_BIN=/opt/home/keenetic-grafana-monitoring/.venv/bin/python
[ -x "$PYTHON_BIN" ] || PYTHON_BIN=python

nohup "$PYTHON_BIN" /opt/home/keenetic-grafana-monitoring/keentic_influxdb_exporter.py >/dev/null 2>&1 &
  • Run /opt/etc/init.d/S99keeneticgrafana start

Build Docker image

docker build -t keenetic-grafana-monitoring .

The Docker build now installs dependencies from pyproject.toml and uv.lock.

InfluxDB 2.x / keenetic-grafana-monitoring 2.x migration manual

See on wiki

About

Monitor Keenetic router with Grafana and InfluxDB

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors