GNU/Linux >> Tutoriels Linux >  >> Linux

Comment créer une configuration Rsyslog de journalisation centralisée

Les journaux sont une partie essentielle des applications et de l'infrastructure des serveurs, mais leur analyse peut être pénible s'ils sont encombrés partout. Pourquoi ne pas créer un système de journalisation centralisé ? Rsyslog est peut-être ce que vous cherchez !

Un système de journalisation centralisé vous permet de collecter les journaux de plusieurs serveurs/applications vers le serveur de journalisation central. Et dans ce didacticiel, vous apprendrez à configurer la journalisation centralisée à l'aide de la configuration Rsyslog sur les serveurs Linux.

Préparez-vous et lancez-vous !

Prérequis

Ce tutoriel sera une démonstration pratique. Si vous souhaitez suivre, assurez-vous d'avoir les éléments suivants :

  • Deux serveurs Linux ou plus :ce didacticiel utilise trois serveurs Debian 11 nommés central-rsyslog , client01 , et client02 .
  • Un utilisateur avec des privilèges sudo/root sur tous les serveurs.

Vérification du service Rsyslog sur tous les serveurs

Rsyslog est un traitement de journaux hautes performances pour la distribution Linux, installé par défaut sur les distributions basées sur Debian et RHEL.

Rsyslog est une version fiable et étendue du protocole Syslog avec des fonctionnalités modernes supplémentaires. Ces fonctionnalités supplémentaires sont de multiples entrées et sorties, des capacités de filtrage modulaires et riches.

Au moment d'écrire ces lignes, la dernière version de Rsyslog est la v8.2112.0. Vous vérifierez donc la version installée de Rsyslog sur votre système et l'état du service Rsyslog. Cela garantit que vous obtenez les dernières fonctionnalités de Rsyslog et que Rsyslog fonctionne sans problème.

1. Ouvrez votre terminal, connectez-vous à tous les serveurs et exécutez le sudo su commande ci-dessous pour obtenir les privilèges root. Entrez le mot de passe de votre utilisateur lorsque vous y êtes invité.

sudo su

2. Ensuite, exécutez le rsyslogd pour vérifier la version de Rsyslog installée sur votre système.

Assurez-vous que vous disposez de Rsyslog v8.xxx sur votre système car certaines configurations ne sont disponibles que sur Rsyslog v8.xxx.

# checking rsyslog version
rsyslogd -v

Comme vous le voyez ci-dessous, le système Debian 11 est livré avec Rsyslog v8.2102.0 par défaut.

3. Enfin, exécutez le systemctl commande ci-dessous pour vérifier le service Rsyslog. Assurez-vous que le service Rsyslog est active (running) .

# verify rsyslog service status
sudo systemctl status rsyslog

Comme vous pouvez le voir ci-dessous, le service Rsyslog est actif (en cours d'exécution).

Configuration de Rsyslog pour la journalisation centralisée

Maintenant que vous avez la dernière version de Rsyslog en cours d'exécution, il est temps de configurer la journalisation centralisée à l'aide de la configuration Rsyslog sur le central-rsyslog serveur.

Pour configurer la journalisation centralisée, vous devez activer le module d'entrée Rsyslog UDP imudp et créez le modèle Rsyslog pour recevoir les messages de journal d'autres serveurs. Le imudp le module d'entrée fournit la capacité pour le central-rsyslog serveur pour recevoir les messages Syslog via le protocole UDP.

1. Modifiez le fichier de configuration Rsyslog (/etc/rsyslog.conf ) à l'aide de votre éditeur préféré et activez la configuration illustrée ci-dessous, puis enregistrez les modifications et quittez l'éditeur.

Tout au long de ce didacticiel, décommentez chaque configuration pour les activer en supprimant le signe # au début de chaque ligne.

Cette configuration permet au module d'entrée imudp de s'exécuter sur le port UDP 514 par défaut.

2. Ensuite, créez un nouveau modèle Rsyslog (/etc/rsyslog.d/50-remote-logs.conf ) à l'aide de votre éditeur préféré et remplissez le modèle avec la configuration ci-dessous. Enregistrez les modifications et quittez l'éditeur.

Ce modèle Rsyslog ci-dessous active le central-rsyslog serveur pour stocker les journaux des serveurs distants dans le répertoire /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. Exécutez les commandes ci-dessous pour créer un nouveau répertoire de journaux (/var/log/remotelogs/ ) propriété du root utilisateur avec adm groupe. Cela permet au service Ryslog d'écrire des journaux dans le /var/log/remotelogs répertoire.

# 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. Maintenant, exécutez le rsyslogd commandes ci-dessous pour vérifier les configurations Rsyslog (/etc/rsyslog.conf et /etc/rsyslog.d/50-remote-logs.conf ).

Assurez-vous de toujours vérifier et vérifier la configuration Rsyslog après avoir modifié la configuration Rsyslog pour vous assurer que la configuration ne contient aucune erreur.

# 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

S'il n'y a pas d'erreur, vous obtiendrez le résultat comme celui ci-dessous.

5. Après avoir vérifié les configurations, exécutez la commande ci-dessous pour restart le rsyslog service et appliquer de nouvelles configurations.

Le service Rsyslog est déjà en cours d'exécution avec le module d'entrée imudp activé et a ouvert le port UDP 514 par défaut pour le protocole Syslog. Le rsyslog central le serveur est maintenant prêt à recevoir des messages de journal d'autres hôtes.

# restart rsyslog
sudo systemctl restart rsyslog

6. Enfin, exécutez le ss commande ci-dessous pour vérifier les ports ouverts sur votre système.

# check open ports
ss -plntu

Ci-dessous, vous pouvez voir que le service Rsyslog avec le module d'entrée imudp activé s'exécute sur le port UDP 514 par défaut.

Envoi des journaux au serveur Rsyslog centralisé

À présent, vous avez configuré la gestion centralisée des journaux avec la configuration Rsyslog dans central-rsyslog serveur. Mais comment connaissez-vous le central-rsyslog serveur reçoit les journaux ? Vous enverrez les journaux à distance au serveur Rsyslog centralisé (central-rsyslog ) en activant et en configurant le module de sortie Rsyslog sur la machine cliente.

Dans cette démo, la machine cliente (avec le nom d'hôte client01) utilise le module de sortie Rsyslog omfwd pour envoyer les journaux au central-rsyslog serveur.

Le omfwd module est un module intégré qui traite les messages/journaux via des modèles Rsyslog. Le module transfère ensuite les messages à différentes cibles via UDP et TCP à l'aide de l'objet d'action Rsyslog.

1. Accédez au client01 machine pour configurer et envoyer les journaux au central-rsyslog serveur.

2. Créez une nouvelle configuration Rsyslog (/etc/rsyslog.d/20-forward-logs.conf ) à l'aide de votre éditeur préféré et remplissez la configuration suivante.

Cette configuration formate les messages de journal à l'aide du modèle SendRemote et transfère les messages de journal via le protocole UDP à la cible central-rsyslog serveur (172.16.1.10). Assurez-vous de changer l'adresse IP avec l'adresse IP de votre serveur Rsyslog central.

Un modèle Rsyslog est une construction de propriétés de message Rsyslog qui spécifient les formats des messages de journal. Consultez la documentation du modèle Rsyslog pour voir différents types de modèles.

# 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. Ensuite, exécutez le rsyslogd ci-dessous pour vérifier la configuration de Rsyslog et s'assurer qu'il n'y a pas d'erreur.

# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/20-remote-logs.conf

4. Exécutez le systemctl commande ci-dessous pour redémarrer le service Rsyslog et appliquer une nouvelle configuration.

# restart rsyslog on client01 machine
sudo systemctl restart rsyslog

5. Maintenant, revenez au central-rsyslog serveur pour vérifier les journaux du client01 machine.

Exécutez les commandes ci-dessous pour accéder au répertoire /var/log/remotelogs et répertorier les fichiers et répertoires à l'intérieur de ce répertoire pour vérifier le client01 répertoire existe.

# navigate to /var/log/remotelogs directory
cd /var/log/remotelogs/
# checking available directories
ls -lah

Ci-dessous, vous pouvez voir que le répertoire client01 existe dans le répertoire /var/log/remotelogs répertoire.

6. Exécutez chaque commande ci-dessous pour passer au client01 répertoire et liste (ls -lah ) les fichiers journaux à l'intérieur du répertoire.

# navigate to client01 directory
cd client01/
# checking files inside client01 directory
ls -lah

Un système de journalisation centralisé aide les administrateurs à analyser les données des journaux de centaines de serveurs sur une seule machine.

Choisissez l'un des journaux que vous souhaitez afficher et analyser.

7. Enfin, exécutez le cat commande ci-dessous pour voir le contenu de votre journal cible. Remplacer logfile avec le nom du fichier journal, mais cette démo renvoie le contenu de sshd.log dossier.

cat logfile

Ci-dessous, vous pouvez voir les journaux du client01 machine stockée dans sshd.log fichier dans le serveur Rsyslog (central-rsyslog ).

Jusqu'à présent, vous avez vu qu'un système de journalisation centralisé rend les fichiers journaux plus sûrs, car chaque fois que les applications/serveurs sont arrêtés, vous avez toujours les fichiers journaux sur le serveur central.

Envoi des journaux d'un programme spécifique au serveur Rsyslog

Vous venez d'envoyer tous les journaux d'application du client01 machine au serveur Rsyslog central (central-rsyslog ). Mais que se passe-t-il si vous n'avez besoin que de journaux d'application spécifiques, tels que ssh ? ou su ? Implémentez la structure de contrôle Rsyslog rainerscript sur l'objet d'action Rsyslog.

Cette démo utilise le client02 machine pour envoyer les journaux sshd uniquement au serveur Rsyslog (central-rsyslog ).

1. Passez au client02 machine pour configurer et envoyer les journaux au central-rsyslog serveur.

2. Créez une nouvelle configuration Rsyslog (/etc/rsyslog.d/50-sshd.conf ) à l'aide de votre éditeur préféré et remplissez la configuration suivante.

Cette configuration ci-dessous transfère uniquement les journaux de l'application (nom du programme) nommée sshd au serveur Rsyslog (172.16.1.10). Les messages du journal sont également formatés par le modèle SendRemote.

# 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. Ensuite, exécutez le rsyslogd commande ci-dessous pour vérifier la configuration de Rsyslog et s'assurer qu'il n'y a pas d'erreur.

# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-sshd.conf

4. Exécutez la commande ci-dessous pour redémarrer le service Rsyslog, appliquer une nouvelle configuration et vous déconnecter du client02 serveur pour générer un nouveau sshd Journal.

À ce stade, le serveur central-rsyslog n'a reçu que le journal sshd au lieu de tous les journaux système.

# restart rsyslog service
sudo systemctl restart rsyslog

5. Maintenant, revenez au central-rsyslog serveur pour vérifier les journaux du client02 machine.

Exécutez les commandes ci-dessous pour répertorier (ls -lah) les fichiers journaux disponibles dans le répertoire /var/log/remotelogs/.

# navigate to /var/log/remotelogs/
cd /var/log/remotelogs/
# verify log directory for client02
ls -lah

Comme vous le voyez ci-dessous, il existe un nouveau répertoire nommé client02 qui stocke les messages de journal du client02 machine.

6. Exécutez les commandes ci-dessous pour accéder au client02 répertoire et vérifiez les fichiers journaux disponibles dans ce répertoire.

cd client02/
ls -lah

Vous verrez le fichier journal sshd.log pour le nom du programme sshd. Exécutez également la commande cat pour afficher le contenu du fichier journal sshd.log.

Ci-dessous, vous ne pouvez voir qu'un seul fichier journal disponible, le fichier sshd.log, puisque vous avez utilisé la configuration /etc/rsyslog.d/50-sshd.conf.

7. Enfin, exécutez le cat commande ci-dessous pour afficher et analyser le sshd.log dossier.

cat sshd.log

Envoi des journaux convertis par message Syslog au serveur Rsyslog

Jusqu'à présent, vous avez vu comment envoyer des journaux à votre serveur Rsyslog, et c'est suffisant. Mais peut-être préférez-vous avoir vos journaux au format de message Syslog pour les rendre plus faciles à lire et à analyser. Si oui, en utilisant le Rsys imfile le module d'entrée fera l'affaire.

Le imfile Le module d'entrée vous permet de convertir tous les messages texte/journaux au format de message Syslog. Et dans cette démo, vous allez envoyer les journaux du serveur Web Apache2 à partir du client01 machine au serveur Rsyslog (central-rsyslog ).

Combiner le module d'entrée Rsyslog (imfile ) avec le module de sortie (omfwd ) vous permet d'envoyer tous les journaux convertis en messages Syslog au serveur Rsyslog (central-rsyslog ).

1. Revenez au client01 machine, créez une nouvelle configuration Rsyslog /etc/rsyslog.d/50-apache2.conf , et renseignez la configuration suivante. Assurez-vous de modifier le nom du modèle, le nom de l'ensemble de règles et le fichier d'entrée pour vos journaux.

Le modèle ci-dessous convertit les journaux Apache au format de message Syslog avec le module imfile et envoie ces journaux au serveur Rsyslog (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. Ensuite, exécutez le rsyslogd commande ci-dessous pour vérifier le /etc/rsyslog.d/50-apache2.conf configuration.

# verify rsyslog configuration
rsyslogd -N1 -f /etc/rsyslog.d/50-apache2.conf

3. Exécutez le systemctl commande ci-dessous pour restart le rsyslog service et appliquer de nouvelles configurations. À ce stade, tous les journaux Apache2 sur le client01 machine sera transmise au serveur Rsyslog (central-rsyslog ).

# restart rsyslog service
sudo systemctl restart rsyslog

4. Maintenant, exécutez le curl commande ci-dessous pour générer les journaux Apache2. Cette commande générera de nouveaux messages de journal Apache2 dans le fichier /var/log/apache2/access.log .

# generate a new log for Apache
# by accessing via curl command
curl localhost
curl localhost/testnotfound

5. Revenez au serveur Rsyslog (central-rsyslog ) et exécutez les commandes ci-dessous pour accéder au /var/log/remotelogs/client01 répertoire répertorie les fichiers journaux disponibles.

# navigate to the directory /var/log/remotelogs/client01/
cd /var/log/remotelogs/client01/
# check available log files
ls -a

Vous pouvez voir ci-dessous que le serveur Rsyslog (central-rsyslog ) a reçu le fichier apache.log du client01 machine.

6. Enfin, exécutez le cat commande pour afficher le contenu du fichier journal apache2.log .

# showing the content of apache2.log file
cat apache2.log

Si le /etc/rsyslog.d/50-apache2.conf fonctionne, vous verrez le contenu du fichier journal au format de message Syslog comme celui ci-dessous.

Conclusion

Dans ce didacticiel, vous avez appris à configurer la journalisation centralisée avec la configuration Rsyslog. Vous avez également envoyé des journaux de serveurs à distance au serveur Rsyslog centralisé à l'aide de différents types de plugins d'entrée et de sortie Rsyslog. Désormais, vous n'avez plus besoin de parcourir différents endroits pour les journaux autres que votre serveur Rsyslog.

Sinon, comment comptez-vous utiliser Rsyslog ? Peut-être commencer à explorer d'autres modules d'entrée et de sortie Rsyslog ? Ou intégrer Rsyslog à un autre système de journalisation, tel que Fluentd et Logstash ?


Linux
  1. Installer un serveur de journal centralisé avec Rsyslog dans Debian 9

  2. Comment configurer des serveurs de journalisation distants avec rsyslog ?

  3. Comment créer un sous-domaine

  4. Comment consigner les paquets rejetés par le pare-feu Linux IPTables dans un fichier journal

  5. Comment créer un lien vers un répertoire

Comment créer un fichier Tar Gz

Comment créer un module Terraform

Comment se connecter à cPanel

Gestion centralisée des logs en installant rsyslog sur Debian 11 !

Comment créer une base de données dans Plesk

Comment créer un journal d'erreurs PHP dans cPanel