GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So erstellen Sie eine Rsyslog-Konfiguration für die zentrale Protokollierung

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?


Linux
  1. So richten Sie rsyslog für die zentralisierte Protokollverwaltung ein

  2. So aktivieren Sie die MySQL/MariaDB-Abfrageprotokollierung

  3. So erstellen Sie Git-Tags

  4. So erstellen Sie eine Subdomain

  5. So richten Sie Rsyslog Remote Logging unter Linux ein (zentraler Protokollserver)

So erstellen Sie eine Tar-Gz-Datei

So erstellen Sie ein Terraform-Modul

So melden Sie sich bei cPanel an

Zentralisierte Protokollverwaltung durch Installation von rsyslog auf Debian 11!

So erstellen Sie eine Datenbank in Plesk

So erstellen Sie ein PHP-Fehlerprotokoll in cPanel