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.
Code | Rsyslog | Severity |
---|---|---|
0 | emerg, panic | Emergency: system is unusable |
1 | alert | Alert: action must be taken immediately |
2 | crit | Critical: critical conditions |
3 | err, error | Error: error conditions |
4 | warning, warn | Warning: warning conditions |
5 | notice | Notice: normal but significant condition |
6 | info | Informational: informational messages |
7 | debug | Debug: 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
Vielen Dank für den Hinweis, habe ich (endlich) oben im Beitrag hinzugefügt.