Protokolle sind ein kritischer Bestandteil von Anwendungen und Serverinfrastrukturen, aber ihre Analyse kann mühsam sein, wenn sie überall unübersichtlich sind. Warum nicht ein zentralisiertes Protokollierungssystem erstellen? Rsyslog ist vielleicht genau das, wonach Sie suchen!
Ein zentralisiertes Protokollierungssystem ermöglicht es Ihnen, Protokolle von mehreren Servern/Anwendungen auf dem zentralen Protokollserver zu sammeln. Und in diesem Tutorial erfahren Sie, wie Sie die zentralisierte Protokollierung mithilfe der Rsyslog-Konfiguration auf Linux-Servern einrichten.
Machen Sie sich bereit und steigen Sie direkt ein!
Voraussetzungen
Dieses Tutorial wird eine praktische Demonstration sein. Wenn Sie mitmachen möchten, stellen Sie sicher, dass Sie Folgendes haben:
- Zwei oder mehr Linux-Server – Dieses Tutorial verwendet drei Debian 11-Server namens central-rsyslog , client01 und client02 .
- Ein Benutzer mit sudo/root-Berechtigungen auf allen Servern.
Rsyslog-Dienst auf allen Servern prüfen
Rsyslog ist eine leistungsstarke Protokollverarbeitung für die Linux-Distribution, die standardmäßig auf Debian-basierten und RHEL-basierten Distributionen installiert wird.
Rsyslog ist eine zuverlässige und erweiterte Version des Syslog-Protokolls mit zusätzlichen modernen Funktionen. Diese zusätzlichen Funktionen sind mehrere Ein- und Ausgänge, modulare und umfangreiche Filterfunktionen.
Zum Zeitpunkt der Erstellung dieses Artikels ist die neueste Version von Rsyslog v8.2112.0. Sie überprüfen also die installierte Version von Rsyslog auf Ihrem System und den Status des Rsyslog-Dienstes. Dadurch wird sichergestellt, dass Sie die neuesten Funktionen von Rsyslog erhalten und dass Rsyslog problemlos ausgeführt wird.
1. Öffnen Sie Ihr Terminal, melden Sie sich bei allen Servern an und führen Sie sudo su
aus Befehl unten, um die Root-Rechte zu erhalten. Geben Sie das Kennwort für Ihren Benutzer ein, wenn Sie dazu aufgefordert werden.
sudo su
2. Führen Sie als Nächstes rsyslogd
aus Befehl, um die auf Ihrem System installierte Rsyslog-Version zu überprüfen.
Stellen Sie sicher, dass Sie Rsyslog v8.xxx auf Ihrem System haben, da einige Konfigurationen nur auf Rsyslog v8.xxx verfügbar sind.
# checking rsyslog version
rsyslogd -v
Wie Sie unten sehen, enthält das Debian 11-System standardmäßig Rsyslog v8.2102.0.
3. Führen Sie zuletzt den systemctl
aus Befehl unten, um den Rsyslog-Dienst zu überprüfen. Stellen Sie sicher, dass der Rsyslog-Dienst active (running)
ist .
# verify rsyslog service status
sudo systemctl status rsyslog
Wie Sie unten sehen können, ist der Rsyslog-Dienst aktiv (wird ausgeführt).
Konfigurieren von Rsyslog für die zentralisierte Protokollierung
Nachdem Sie nun die neueste Version von Rsyslog ausgeführt haben, ist es an der Zeit, die zentralisierte Protokollierung mithilfe der Rsyslog-Konfiguration auf dem central-rsyslog einzurichten Server.
Um die zentralisierte Protokollierung einzurichten, aktivieren Sie das Rsyslog UDP-Eingabemodul imudp
und erstellen Sie die Rsyslog-Vorlage zum Empfangen von Protokollnachrichten von anderen Servern. Die imudp
input-Modul bietet die Möglichkeit für das central-rsyslog Server, um Syslog-Meldungen über das UDP-Protokoll zu empfangen.
1. Bearbeiten Sie die Rsyslog-Konfigurationsdatei (/etc/rsyslog.conf ) mit Ihrem bevorzugten Editor und aktivieren Sie die unten gezeigte Konfiguration, speichern Sie dann die Änderungen und beenden Sie den Editor.
Kommentieren Sie in dieser Anleitung jede Konfiguration aus, um sie zu aktivieren, indem Sie das #-Zeichen am Anfang jeder Zeile entfernen.
Diese Konfiguration ermöglicht die Ausführung des imudp-Eingabemoduls auf dem standardmäßigen UDP-Port 514.
2. Erstellen Sie als Nächstes eine neue Rsyslog-Vorlage (/etc/rsyslog.d/50-remote-logs.conf ) mit Ihrem bevorzugten Editor und füllen Sie die Vorlage mit der folgenden Konfiguration aus. Speichern Sie die Änderungen und verlassen Sie den Editor.
Diese Rsyslog-Vorlage unten aktiviert das zentrale Rsyslog Server zum Speichern von Protokollen von Remote-Servern im Verzeichnis /var/log/remotelogs/ .
# define template for remote loggin
# remote logs will be stored at /var/log/remotelogs directory
# each host will have specific directory based on the system %HOSTNAME%
# name of the log file is %PROGRAMNAME%.log such as sshd.log, su.log
# both %HOSTNAME% and %PROGRAMNAME% is the Rsyslog message properties
template (
name="RemoteLogs"
type="string"
string="/var/log/remotelogs/%HOSTNAME%/%PROGRAMNAME%.log"
)
# gather all log messages from all facilities
# at all severity levels to the RemoteLogs template
*.* -?RemoteLogs
# stop the process once the file is written
stop
3. Führen Sie die folgenden Befehle aus, um ein neues Protokollverzeichnis zu erstellen (/var/log/remotelogs/
) im Besitz von root
Benutzer mit adm
Gruppe. Dadurch kann der Ryslog-Dienst Protokolle in /var/log/remotelogs
schreiben Verzeichnis.
# create /var/log/remotelogs/ directory
mkdir -p /var/log/remotelogs/
# change the ownership to root:adm
sudo chown -R root:adm /var/log/remotelogs/
4. Führen Sie nun den rsyslogd
aus Befehlen unten, um die Rsyslog-Konfigurationen zu überprüfen (/etc/rsyslog.conf
und /etc/rsyslog.d/50-remote-logs.conf
).
Achten Sie darauf, die Rsyslog-Konfiguration immer zu überprüfen und zu verifizieren, nachdem Sie die Rsyslog-Konfiguration bearbeitet haben, um sicherzustellen, dass die Konfiguration fehlerfrei ist.
# verify /etc/rsyslog.conf
rsyslogd -N1 -f /etc/rsyslog.conf
# verify /etc/rsyslog.d/50-remote-logs.conf
rsyslogd -N1 -f /etc/rsyslog.d/50-remote-logs.conf
Wenn kein Fehler vorliegt, erhalten Sie eine Ausgabe wie die untenstehende.
5. Nachdem Sie die Konfigurationen überprüft haben, führen Sie den folgenden Befehl zu restart
aus die rsyslog
Service und wenden Sie neue Konfigurationen an.
Der Rsyslog-Dienst wird bereits mit aktiviertem imudp-Eingabemodul ausgeführt und hat den Standard-UDP-Port 514 für das Syslog-Protokoll geöffnet. Das zentrale rsyslog Der Server ist jetzt bereit, Protokollnachrichten von anderen Hosts zu empfangen.
# restart rsyslog
sudo systemctl restart rsyslog
6. Führen Sie zuletzt den ss
aus Befehl unten, um die geöffneten Ports auf Ihrem System zu überprüfen.
# check open ports
ss -plntu
Unten sehen Sie, dass der Rsyslog-Dienst mit aktiviertem imudp-Eingabemodul auf dem standardmäßigen UDP-Port 514 ausgeführt wird.
Senden von Protokollen an den zentralisierten Rsyslog-Server
Inzwischen haben Sie die zentrale Protokollverwaltung mit der Rsyslog-Konfiguration im central-rsyslog konfiguriert Server. Aber woher kennen Sie das central-rsyslog Server empfängt Protokolle? Sie senden Protokolle remote an den zentralisierten Rsyslog-Server (central-rsyslog ) durch Aktivieren und Konfigurieren des Rsyslog-Ausgabemoduls auf dem Clientcomputer.
In dieser Demo der Client-Computer (mit dem Hostnamen client01) verwendet das Rsyslog-Ausgabemodul omfwd
um Protokolle an das central-rsyslog zu senden Server.
Die omfwd
Modul ist ein integriertes Modul, das Nachrichten/Protokolle über Rsyslog-Vorlagen verarbeitet. Das Modul überträgt die Nachrichten dann über UDP und TCP mit Hilfe des Rsyslog-Aktionsobjekts an verschiedene Ziele.
1. Wechseln Sie zu client01 Maschine zum Einrichten und Senden von Protokollen an das central-rsyslog Server.
2. Erstellen Sie eine neue Rsyslog-Konfiguration (/etc/rsyslog.d/20-forward-logs.conf ) mit Ihrem bevorzugten Editor und füllen Sie die folgende Konfiguration aus.
Diese Konfiguration formatiert Protokollnachrichten mithilfe der SendRemote-Vorlage und leitet Protokollnachrichten über das UDP-Protokoll an das Ziel central-rsyslog weiter Server (172.16.1.10). Achten Sie darauf, die IP-Adresse mit der IP-Adresse Ihres zentralen Rsyslog-Servers zu ändern.
Eine Rsyslog-Vorlage besteht aus Konstrukten von Rsyslog-Nachrichteneigenschaften, die Formate von Protokollnachrichten angeben. Überprüfen Sie die Dokumentation der Rsyslog-Vorlage, um verschiedene Arten von Vorlagen zu sehen.
# process all log messages before sending
# with the SendRemote template
template(
name="SendRemote"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)
# forward log messages using omfwd module
# to the target server 172.16.1.10
# via UDP porotocol on port 514
# log messages is formatted using the SendRemote template
# setup queue for remote log
action(
type="omfwd"
Target="172.16.1.10"
Port="514"
Protocol="udp"
template="SendRemote"
queue.SpoolDirectory="/var/spool/rsyslog"
queue.FileName="remote"
queue.MaxDiskSpace="1g"
queue.SaveOnShutdown="on"
queue.Type="LinkedList"
ResendLastMSGOnReconnect="on"
)
# stop process after the file is written
stop
3. Als nächstes führen Sie den folgenden rsyslogd
aus Befehl, um die Rsyslog-Konfiguration zu überprüfen und sicherzustellen, dass kein Fehler vorliegt.
# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/20-remote-logs.conf
4. Führen Sie systemctl
aus Befehl unten, um den Rsyslog-Dienst neu zu starten und eine neue Konfiguration anzuwenden.
# restart rsyslog on client01 machine
sudo systemctl restart rsyslog
5. Wechseln Sie jetzt zurück zum central-rsyslog Server, um Protokolle von client01 zu überprüfen Maschine.
Führen Sie die folgenden Befehle aus, um zum Verzeichnis /var/log/remotelogs zu navigieren, und listen Sie die Dateien und Verzeichnisse in diesem Verzeichnis auf, um den client01 zu überprüfen Verzeichnis existiert.
# navigate to /var/log/remotelogs directory
cd /var/log/remotelogs/
# checking available directories
ls -lah
Unten sehen Sie, dass das Verzeichnis client01 in /var/log/remotelogs vorhanden ist Verzeichnis.
6. Führen Sie jeden der folgenden Befehle aus, um zu client01
zu wechseln Verzeichnis und Liste (ls -lah
) die Protokolldateien im Verzeichnis.
# navigate to client01 directory
cd client01/
# checking files inside client01 directory
ls -lah
Ein zentralisiertes Protokollierungssystem hilft Administratoren, Protokolldaten von Hunderten von Servern auf einem einzigen Computer zu analysieren.
Wählen Sie eines der Protokolle aus, das Sie anzeigen und analysieren möchten.
7. Führen Sie zuletzt den cat
aus Befehl unten, um den Inhalt Ihres Zielprotokolls anzuzeigen. Ersetzen Sie logfile
mit dem Namen der Protokolldatei, aber diese Demo gibt den Inhalt von sshd.log zurück Datei.
cat logfile
Unten sehen Sie Protokolle von client01 Maschine in sshd.log gespeichert Datei auf dem Rsyslog-Server (central-rsyslog ).
Bisher haben Sie gesehen, dass ein zentralisiertes Protokollierungssystem Protokolldateien sicherer macht, da Sie immer noch die Protokolldateien auf dem zentralen Server haben, wenn Anwendungen/Server beendet werden.
Senden von Protokollen eines bestimmten Programms an den Rsyslog-Server
Sie haben gerade alle Anwendungsprotokolle von client01 gesendet Maschine an den zentralen Rsyslog-Server (central-rsyslog ). Was aber, wenn Sie nur bestimmte Anwendungsprotokolle wie ssh
benötigen oder su
? Implementieren Sie die Rsyslog rainerscript Kontrollstruktur für das Rsyslog-Aktionsobjekt.
Diese Demo verwendet den client02 Maschine, um sshd-Protokolle nur an den Rsyslog-Server zu senden (central-rsyslog ).
1. Wechseln Sie zu client02 Maschine zum Einrichten und Senden von Protokollen an das central-rsyslog Server.
2. Erstellen Sie eine neue Rsyslog-Konfiguration (/etc/rsyslog.d/50-sshd.conf
) mit Ihrem bevorzugten Editor und füllen Sie die folgende Konfiguration aus.
Diese Konfiguration unten leitet nur Protokolle für die Anwendung (Programmname) mit dem Namen sshd an den Rsyslog-Server (172.16.1.10) weiter. Die Protokollnachrichten werden auch durch das SendRemote-Template formatiert.
# create new Rsyslog tempate for formatted logs
template(
name="SendRemote"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)
# implementation of if conditional on rsyslog
# to send specific logs for programname sshd
# stop the process after sending logs
if $programname == "sshd" then {
action(type="omfwd" target="172.16.1.10" port="514" protocol="udp" template="SendRemote")
stop
}
3. Führen Sie als Nächstes rsyslogd
aus Befehl unten, um die Rsyslog-Konfiguration zu überprüfen und sicherzustellen, dass kein Fehler vorliegt.
# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-sshd.conf
4. Führen Sie den folgenden Befehl aus, um den Rsyslog-Dienst neu zu starten, eine neue Konfiguration anzuwenden und sich von client02
abzumelden Server, um einen neuen sshd
zu generieren Protokoll.
Zu diesem Zeitpunkt hat der Central-rsyslog-Server nur das sshd-Protokoll anstelle aller Systemprotokolle erhalten.
# restart rsyslog service
sudo systemctl restart rsyslog
5. Wechseln Sie jetzt zurück zum central-rsyslog Server, um Protokolle von client02 zu überprüfen Maschine.
Führen Sie die folgenden Befehle aus, um verfügbare Protokolldateien im Verzeichnis /var/log/remotelogs/ aufzulisten (ls -lah).
# navigate to /var/log/remotelogs/
cd /var/log/remotelogs/
# verify log directory for client02
ls -lah
Wie Sie unten sehen, gibt es ein neues Verzeichnis mit dem Namen „client02“, in dem Protokollnachrichten von „client02“ gespeichert werden Maschine.
6. Führen Sie die folgenden Befehle aus, um zu client02
zu navigieren Verzeichnis und überprüfen Sie die verfügbaren Protokolldateien in diesem Verzeichnis.
cd client02/
ls -lah
Sie sehen die Protokolldatei sshd.log für den Programmnamen sshd. Führen Sie außerdem den cat-Befehl aus, um den Inhalt der Protokolldatei sshd.log anzuzeigen.
Unten sehen Sie nur eine verfügbare Protokolldatei, die Datei sshd.log, da Sie die Konfiguration /etc/rsyslog.d/50-sshd.conf verwendet haben.
7. Führen Sie abschließend cat
aus Befehl unten, um den sshd.log
anzuzeigen und zu analysieren Datei.
cat sshd.log
Senden von in Syslog-Nachrichten konvertierten Protokollen an den Rsyslog-Server
Bisher haben Sie gesehen, wie Sie Protokolle an Ihren Rsyslog-Server senden, und das ist gut genug. Aber vielleicht ziehen Sie es vor, Ihre Protokolle im Syslog-Nachrichtenformat zu haben, um sie leichter lesen und analysieren zu können. Wenn ja, verwenden Sie den Rsys imfile
Input-Modul wird den Zweck erfüllen.
Der imfile
Mit dem Input-Modul können Sie beliebige Textnachrichten/Protokolle in ein Syslog-Nachrichtenformat konvertieren. Und in dieser Demo senden Sie Protokolle des Apache2-Webservers vom client01 Maschine an den Rsyslog-Server (central-rsyslog ).
Kombinieren des Rsyslog-Eingabemoduls (imfile
) mit dem Ausgabemodul (omfwd
) können Sie alle in Syslog-Nachrichten konvertierten Protokolle an den Rsyslog-Server (central-rsyslog ).
1. Gehen Sie zurück zu client01 erstellen Sie eine neue Rsyslog-Konfiguration /etc/rsyslog.d/50-apache2.conf
, und füllen Sie die folgende Konfiguration aus. Achten Sie darauf, den Vorlagennamen, den Regelsatznamen und die Eingabedatei für Ihre Protokolle zu ändern.
Die folgende Vorlage konvertiert Apache-Protokolle mit dem imfile-Modul in das Syslog-Nachrichtenformat und sendet diese Protokolle an den Rsyslog-Server (172.16.1.10).
# deifne global workDirectory for saving the state file of log messages.
global(workDirectory="/var/spool/rsyslog")
# enable the Rsyslog imfile module processing text files or logs.
module(load="imfile" PollingInterval="10")
# define template for apache2 for processing log messages.
# that will be forwarded to rsyslog server
template(
name="TestLog"
type="string"
string="<%PRI%>%TIMESTAMP:::date-rfc3339% %HOSTNAME% %syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%"
)
# define ruleset "ApacheLogs" with action object to send logs to rsyslog server
# define the queue
ruleset(name="ApacheLogs") {
action(
type="omfwd"
target="172.16.1.10"
port="514"
protocol="udp"
template="TestLog"
queue.SpoolDirectory="/var/spool/rsyslog"
queue.FileName="remote"
queue.MaxDiskSpace="1g"
queue.SaveOnShutdown="on"
queue.Type="LinkedList"
ResendLastMSGOnReconnect="on"
)
stop
}
# define input files Apache2 logs to send to the Rsyslog server
# and apply ruleset "ApacheLogs"
input(type="imfile" ruleset="ApacheLogs" Tag="apache2" File="/var/log/apache2/*.log")
2. Führen Sie als Nächstes den rsyslogd
aus Befehl unten, um den /etc/rsyslog.d/50-apache2.conf
zu überprüfen Aufbau.
# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-apache2.conf
3. Führen Sie systemctl
aus Befehl unten an restart
der rsyslog
Service und wenden Sie neue Konfigurationen an. An diesem Punkt melden sich alle Apache2 bei client01 an Maschine wird an den Rsyslog-Server weitergeleitet (central-rsyslog ).
# restart rsyslog service
sudo systemctl restart rsyslog
4. Führen Sie nun den curl
aus Befehl unten, um die Apache2-Protokolle zu generieren. Dieser Befehl generiert neue Apache2-Protokollmeldungen in der Datei /var/log/apache2/access.log
.
# generate a new log for Apache
# by accessing via curl command
curl localhost
curl localhost/testnotfound
5. Wechseln Sie zurück zum Rsyslog-Server (central-rsyslog ) und führen Sie die folgenden Befehle aus, um zu /var/log/remotelogs/client01
zu navigieren Verzeichnisliste verfügbare Protokolldateien.
# navigate to the directory /var/log/remotelogs/client01/
cd /var/log/remotelogs/client01/
# check available log files
ls -a
Unten sehen Sie, dass der Rsyslog-Server (central-rsyslog ) hat die Datei „apache.log“ vom client01 erhalten Maschine.
6. Führen Sie zuletzt den cat
aus Befehl zum Anzeigen des Inhalts der Protokolldatei apache2.log
.
# showing the content of apache2.log file
cat apache2.log
Wenn die /etc/rsyslog.d/50-apache2.conf funktioniert, sehen Sie den Inhalt der Protokolldatei im Syslog-Nachrichtenformat wie unten.
Schlussfolgerung
In diesem Lernprogramm haben Sie gelernt, wie Sie die zentralisierte Protokollierung mit der Rsyslog-Konfiguration einrichten. Sie haben auch Serverprotokolle remote an den zentralisierten Rsyslog-Server gesendet, indem Sie verschiedene Arten von Rsyslog-Eingabe- und Ausgabe-Plugins verwendet haben. Jetzt müssen Sie nicht mehr verschiedene Orte nach Protokollen durchsuchen, außer auf Ihrem Rsyslog-Server.
Wie wollen Sie Rsyslog sonst noch verwenden? Vielleicht fangen Sie an, andere Rsyslog-Eingabe- und Ausgabemodule zu erkunden? Oder integrieren Sie Rsyslog in ein anderes Protokollierungssystem wie Fluentd und Logstash?