Сбор логов с роутеров Keenetic и OpenWrt для Grafana

В роутерах Keenetic и OpenWrt есть встроенная возможность пересылать журнал логов на удаленный сервер с использованием Sysylog. Данный функционал можно удобно использовать для организации мониторинга роутера по логам с использованием Grafana.

Для организации сбора и обработки логов используется связка Grafana Loki + Alloy . Для сбора используется компонента syslog.

Настройка сбора логов через Alloy

Общий файл конфигурации:

loki.relabel "syslog" {
  forward_to = []

  rule {
    source_labels = ["__syslog_message_hostname"]
    target_label  = "host"
  }
}
loki.source.syslog "syslog" {
  listener {
    address  = "0.0.0.0:1514"
    protocol = "tcp"
    labels   = { component = "loki.source.syslog", protocol = "tcp"}
  }

  listener {
    address  = "0.0.0.0:1514"
    protocol = "udp"
    labels   = { component = "loki.source.syslog", protocol = "udp"}  
  }

  relabel_rules = loki.relabel.syslog.rules
  forward_to = [loki.write.local.receiver]
}

loki.write "local" {
    endpoint {
        url = "http://loki:3100/loki/api/v1/push"
    }
    external_labels = {}
}

Bug

В текущей версии Alloy прием компонентой syslog поддерживает только формат rfc5424. Данный формат можно переопределить параметром syslog_format но он не работает в текущей версии.

Описание компоненты: alloy/docs/sources/reference/components/loki/loki.source.syslog.md at main · grafana/alloy · GitHub

Документация: loki.source.syslog | Grafana Alloy documentation

Настройка rsyslog

Для обхода проблемы форматов можно использовать rsyslog как преобразователь логов с дальнейшей пересылкой в Alloy.

Для этого необходимо создать файл /etc/rsyslog.d/keenetik.conf со следующим содержимым:

# Load the necessary modules
module(load="imuxsock")  # local system logging
module(load="imudp")      # UDP logging
input(type="imudp" port="514")
module(load="imtcp")      # TCP logging
input(type="imudp" port="514")

# Forward everything to the remote server
*.* action(type="omfwd"
        protocol="tcp"
        target="192.168.0.135"
        port="1514"
        Template="RSYSLOG_SyslogProtocol23Format"
        TCP_Framing="octet-counted"
        KeepAlive="on"
        action.resumeRetryCount="-1"
        queue.type="linkedlist"
        queue.size="50000")

Перезапустить сервис:

sudo systemctl restart rsyslog
sudo systemctl status rsyslog

Таким образом все собранные логи от роутера на порту 514/UDP будут переправлять на порт 1514 по протоколу tcp на сервер 192.168.0.135. Можно запустить на том же сервере где работает и Alloy.

Note

Дополнительная настройка Loki не требуется, он должен быть доступен для Grafana и Alloy.

Настройка роутера Keenetic

На роутере необходимо включить передачу логов на удаленный сервер в настройках Управление -> Диагностика -> Системный журнал -> Использовать Syslog

Сбор логов с роутера Keenetik для Grafana.png

Указанный сервер должен принимать логи на 514 порту по UDP протоколу.

Особенность

Keenetik передает логи в формате rfc3164, не все программы сбора данных по умолчанию работают с устаревшим форматом.

Подробная настройка роутера для других программ: Saving system event logs to a Syslog server – Keenetic

Доработанный дашборд для grafana:
![[GrafanaKeenetic and Logs.json]]

Настройка роутера OpenWrt

На роутере необходимо указать сервер удаленного журналирования. Для этого надо зайти Система -> Журналирование

Сбор логов с роутеров Keenetic и OpenWrt для Grafana.png

Доработанный дашборд для grafana:
![[OpenWRT and Logs.json]]