Grafana-Visualisierung eines Syslog-Servers…

Einleitung

Zur Überwachung meiner diversen Server, Raspberrys und Netzwerkspeicher möchte ich gerne auch mal hin und wieder ins Log gucken. Ich verwende dafür meinen Raspberry PI4B mit Raspian OS Lite.

Die Datenreihenfolge sieht folgendermaßen aus:

Client (z.B. NAS) -> Raspberry
ProtokollCenter   -> rsyslog     -> telegraf -> influxdb -> grafana
192.168.2.10      -> 192.168.2.5

Ich nutze hier UDP-Verbindungen.

Vorbereitungen

Wir benötigen auf der „Zielmaschine“, also dem System welches die Logs empfangen soll eine Influx-DB und Telegraf:

# erstmal alles auf aktuellen Stand bringen
sudo apt update
sudo apt upgrade

# InfluxDB installieren (wenn noch nicht vorhanden)
sudo apt install influxdb

# Telegraf installieren (Aktuelle Version als armhf hier: https://github.com/influxdata/telegraf/releases)
wget https://dl.influxdata.com/telegraf/releases/telegraf_1.21.2-1_armhf.deb
sudo dpkg -i telegraf_1.21.2-1_armhf.deb

# Dienste starten
sudo systemctl enable telegraf
sudo systemctl start telegraf

Fürs empfangen der Daten (auch von diesem Host natürlich) benötigen wir rsyslog:

# Installieren
sudo apt install rsyslog rsyslog-relp
# Dienst starten
sudo systemctl enable rsyslog
sudo systemctl start rsyslog

Syslog-Empfänger konfigurieren: Ich lasse Verbindungen vom Localhost sowie aus meinem Netzwerkbereich x.x.2.0/24 (also 192.168.2.0 – 192.168.2.255) zu.

sudo nano /etc/rsyslog.conf

## START ab hier folgendes hinzufügen:
# Folgende Verbindungen akzeptieren:
$AllowSender UDP, 127.0.0.1, xxx.xxx.2.0/24

# Log-Files anlegen nach folgendem Muster
$template Incoming-logs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"

# Alles > notice loggen, alles drunter braucht man selten, sonst hier einfach auf "*.*" ändern
*.notice ?Incoming-logs
## ENDE hinzufügen

Lokale Logs ebenfalls an Telegraf senden (wir sind immer noch auf der Host-Maschine):

sudo nano /etc/rsyslog.d/50-telegraf.conf

## START ab hier folgendes hinzufügen:
$ActionQueueType LinkedList    # Art des Puffers
$ActionQueueFileName srvrfwd   # Dateiname setzen (startet gleichzeitig den Puffermodus)
$ActionResumeRetryCount 4      # Anzahl Wiederholungen 
$ActionQueueSaveOnShutdown on  # Intern puffern wenn Syslog nicht verfügbar

# UDP über Port 6514
# Alles > notice loggen, alles drunter braucht man selten, sonst hier einfach auf "*.*" ändern
*.notice @127.0.0.1:6514;RSYSLOG_SyslogProtocol23Format
## ENDE hinzufügen

sudo systemctl restart rsyslog

Telegraf (als Empfänger der Daten) konfigurieren: [Update 23.08.2023: Danke für den Kommentar von Dom hier in diesem Beitrag, daher noch die drei Zeilen (sind markiert) hinzugefügt. Solltet ihr machen um eure DB zu entlasten!]

sudo nano /etc/telegraf/telegraf.conf

## START Unten anfügen oder intern anpassen:
[[inputs.syslog]]
  server = "udp://:6514"
# Siehe Kommentar von "Dom" hier in diesem Beitrag:
  syslog_standard = „RFC3164“
  framing = „non-transparent“
  best_effort = false  

[[outputs.influxdb]]
  urls = ["http://127.0.0.1:8086"]
#  database = Datenbank     Sofern gewünscht
#  username = Benutzername  Sofern gewünscht
#  password = Passwort      Sofern gewünscht
## ENDE anpassen

sudo systemctl enable telegraf
sudo systemctl start telegraf

Jetzt sollten schon die ersten Meldungen ankommen.

weitere Clients anbinden

Synology-NAS

In meinen Synology-NAS muss man einfach das Paket „Protokoll-Center“ installieren und kann dort unter „Protokoll senden“ die entsprechenden Daten eintragen: IP, UDP, Port (6514 in unserem Fall). Den Protokollfilter hab ich auf Warning, Error gesetzt da ganz schön viele Info-Meldungen reinkommen, aber das muss man selber wissen.

Linux-Clients

sudo nano /etc/rsyslog.conf
# START ab hier folgendes hinzufügen:
# Logs per UDP (Port 6514) an den Host senden 
# Alles > notice loggen, alles drunter braucht man selten, sonst hier einfach auf "*.*" ändern
*.notice @192.168.2.5:6514
# Intern puffern wenn Host down ist
$ActionQueueFileName queue      # warteschlange
$ActionQueueMaxDiskSpace 1g     # 1GB
$ActionQueueSaveOnShutdown on   # speichern
$ActionQueueType LinkedList     # als LinkedList
$ActionResumeRetryCount -1      # unendlich lange versuchen
# ENDE hinzufügen

sudo systemctl restart rsyslog

Grafana

Mein Dashboard findet ihr hier:

https://grafana.com/grafana/dashboards/15644

Security Level

Die Level sind in RFC 5424 definiert. Wählt man bei der Config ein Level aus sind die darüber (kleinere Code-Nummer) automatisch mit drin, man definiert also das mindeste was gesendet werden soll.

CodeRsyslogSeverity
0emerg, panicEmergency: system is unusable
1alertAlert: action must be taken immediately
2critCritical: critical conditions
3err, errorError: error conditions
4warning, warnWarning: warning conditions
5noticeNotice: normal but significant condition
6infoInformational: informational messages
7debugDebug: debug-level messages

2 Kommentare

  • Hi,

    danke für die Mühe – kleine Ergänzung. In der /etc/telegraf/telegraf.conf unter der Sektion [[inputs.syslog]] sollten noch folgende Einträge ergänzt werden damit das Syslog nicht mit Format-Messages zugemüllt wird.

    syslog_standard = „RFC3164“
    framing = „non-transparent“
    best_effort = false

    Ohne diese Einträge hatte ich das Problem, dass ich mehrere tausend Einträge pro Minute erhalten habe. Ich lasse zusätzlich zur InfluxDB das Syslog noch in einer MariaDB speichern und konnte dies damit feststellen.

    Als Resultat hatte ich eine DB-Größe von 25GB innerhalb eines Tages und Syslog-Files von 12GB….
    Könntest du ja noch ergänzen.

    Gruß,
    Dom

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert