Мониторинг роутеров keenetic
Для мониторинга роутера будем использовать проект:
API на роутере
Для начала нам нужно открыть доступ к API на роутере, для подключения из локальной сети не требуется авторизация. Открываем админку роутера и переходим в раздел переадресация портов, и создаем новое правило:

Настройка доступа к API закончена, можем проверить доступ по адресу: API
InfluxDB
Саму установку InfluxDB здесь не рассматриваем.
Заходим в панель управления InfluxDB и создаем новую корзину данных для хранения (например: net
), а также токен API на чтение и запись данных.
Docker
Сначала создадим файлы конфигурации:
mkdir /root/docker/keenetic-mon
nano /root/docker/keenetic-mon/config.ini
Вставляем и заполняем:
[influx2]
# If you are using docker-compose it should be http://influxdb:8086
url=http://192.168.1.15: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=token
timeout=6000
# For influx v1.x DB name
bucket=net
[keenetic]
admin_endpoint=http://192.168.1.1:81
skip_auth=true
login=admin
password=
[collector]
interval_sec=30
Меняем адрес InfluxDB и роутера на свои, а также org
, bucket
и token
.
nano /root/docker/keenetic-mon/metrics.json
{
"metrics": [
{
"command": "processes",
"root": "$.process.[*]",
"tags": {
"name": "$.comm",
"pid": "$.pid"
},
"values": {
"cpu": "$.statistics.cpu.cur",
"memory": "$.vm-size"
}
},
{
"command": "interface",
"root": "$",
"param": {
"name": "WifiMaster0"
},
"tags": {},
"values": {
"temperature": "$.temperature"
}
},
{
"command": "ip hotspot",
"root": "$.host[*]",
"tags": {
"hostname": "$.hostname",
"name": "$.name",
"ssid": "$.ssid",
"mode": "$.mode",
"ip": "$.ip",
"mac": "$.mac"
},
"values": {
"rxbytes": "$.rxbytes",
"txbytes": "$.txbytes",
"txrate": "$.txrate",
"uptime": "$.uptime",
"signal": "$.rssi",
"speed": "$.speed",
"active": "$.active"
}
},
{
"command": "interface",
"root": "$.*",
"tags": {
"id": "$.id",
"type": "$.type",
"description": "$.description",
"interface-name": "$.interface-name",
"address": "$.address"
},
"values": {
"mtu": "$.mtu",
"uptime": "$.uptime",
"tx-queue": "$.tx-queue",
"state": "$.state"
}
},
{
"command": "system",
"root": "$",
"tags": {
"hostname": "$.hostname"
},
"values": {
"cpuload": "$.cpuload",
"memtotal": "$.memtotal",
"memfree": "$.memfree",
"memcache": "$.memcache",
"swaptotal": "$.swaptotal",
"swapfree": "$.swapfree",
"uptime": "$.uptime",
"membuffers": "$.membuffers"
}
},
{
"command": "internet status",
"root": "$",
"tags": {},
"values": {
"internet": "$.internet",
"gateway-accessible": "$.gateway-accessible",
"dns-accessible": "$.dns-accessible",
"host-accessible": "$.host-accessible",
"captive-accessible": "$.captive-accessible"
}
},
{
"command": "media",
"root": "$.*.partition.[*]",
"tags": {
"label": "$.label",
"uuid": "$.uuid"
},
"values": {
"total": "$.total",
"free": "$.free",
"state": "$.state"
}
},
{
"command": "interface stat",
"root": "$",
"param": {
"name": "ISP"
},
"tags": {},
"values": {
"rxbytes": "$.rxbytes",
"txbytes": "$.txbytes",
"rxspeed": "$.rxspeed",
"txspeed": "$.txspeed"
}
},
{
"command": "interface stat",
"root": "$",
"param": {
"name": "AccessPoint"
},
"tags": {},
"values": {
"rxbytes": "$.rxbytes",
"txbytes": "$.txbytes",
"rxspeed": "$.rxspeed",
"txspeed": "$.txspeed"
}
},
{
"command": "interface stat",
"root": "$",
"param": {
"name": "AccessPoint_5G"
},
"tags": {},
"values": {
"rxbytes": "$.rxbytes",
"txbytes": "$.txbytes",
"rxspeed": "$.rxspeed",
"txspeed": "$.txspeed"
}
},
{
"command": "interface stat",
"root": "$",
"param": {
"name": "GigabitEthernet0"
},
"tags": {},
"values": {
"rxbytes": "$.rxbytes",
"txbytes": "$.txbytes",
"rxspeed": "$.rxspeed",
"txspeed": "$.txspeed"
}
},
{
"command": "interface stat",
"root": "$",
"param": {
"name": "PPTP0"
},
"tags": {},
"values": {
"rxbytes": "$.rxbytes",
"txbytes": "$.txbytes",
"rxspeed": "$.rxspeed",
"txspeed": "$.txspeed"
}
}
]
}
Запускаем докер контейнер со следующими параметрами:
services:
keenetic-monitoring:
image: techh/keenetic-grafana-monitoring:latest
container_name: keenetic-monitoring
environment:
- TZ=Europe/Saratov
volumes:
- /root/docker/keenetic-mon/config.ini:/home/config/config.ini:ro
# Optionally you can override metrics
- /root/docker/keenetic-mon/metrics.json:/home/config/metrics.json:ro
restart: always
Grafana
Добавляем источник данных InfluxDB
Name любое
Query language InfluxQL
URL адрес InfluxDB
Custom HTTP Headers жмем Add header
Authorization Token <TOKEN_VALUE>
Слово Token должно быть перед самим значением токена
Database имя нашей корзины с данными
Не указывать имя пользователя/пароль
HTTP Method POST
Min time interval 35s
Сохраняем.