Сбор логов linux и proxmox для Grafana

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

Настройка сбора логов через 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

Настройка хоста

Для передачи логов с серверов linux или Proxmox в Loki можно использовать программу rsyslog:

apt install rsyslog

Необходимо изменить конфигурацию rsyslog:

nano /etc/rsyslog.conf

В конец файла добавить следующий блок:

*.* 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

Таким образом все логи с хоста будут преобразовываться в формат rfc5424 который может принимать alloy.