{{tag>Brouillon Log Syslog}} # Notes Rsyslog Voir : * https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-basic_configuration_of_rsyslog * https://access.redhat.com/documentation/fr-fr/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-configuring_rsyslog_on_a_logging_server * https://wiki.debian.org/fr/Rsyslog * https://wiki.archlinux.org/index.php/Rsyslog * https://www.loggly.com/use-cases/rsyslog-manual-configuration-and-troubleshooting/ * https://selivan.github.io/2017/02/07/rsyslog-log-forward-save-filename-handle-multi-line-failover.html Voir aussi : * Syslog-ng * NXLog * Snare * Graylog2 ## Généralités Voir : * https://fr.wikipedia.org/wiki/Syslog * https://docs.fedoraproject.org/en-US/Fedora/23/html/System_Administrators_Guide/s1-basic_configuration_of_rsyslog.html * https://www.the-art-of-web.com/system/rsyslog-config/ Exemple de fichier de conf : * https://github.com/openstack/swift/blob/master/etc/swift-rsyslog.conf-sample Vérifier la syntax du fichier de conf ~~~bash rsyslogd -N1 ~~~ Supprimer certaines classes de messages ~~~ *.=debug stop *.=info stop *.=notice stop #*.=warn stop #*.=err stop ~~~ Supprimer des messages voir https://linux.die.net/man/5/rsyslog.conf ~~~ # discards everything #*.* ~ *.* stop ~~~ `/etc/rsyslog.conf` ~~~ $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $SystemLogRateLimitInterval 0 $SystemLogRateLimitBurst 0 ~~~ `/etc/default/rsyslog` ~~~bash # Options for rsyslogd # -x disables DNS lookups for remote messages # See rsyslogd(8) for more details #RSYSLOGD_OPTIONS="" RSYSLOGD_OPTIONS="-x" ~~~ ## Conf client / serveur Voir : https://www.linuxtricks.fr/wiki/rsyslog-centralisation-des-logs-sous-linux Il est possible d'utiliser UDP, TCP, TLS, RELP https://gist.github.com/drmalex07/bb178d61f800488446d22de4301160f1 ### Conf serveur ~~~bash apt-get install rsyslog rsyslog-relp ~~~ `/etc/default/rsyslog` ~~~python module(load="imtcp") #input(type="imptcp" port="1514" address="127.0.0.1") input(type="imtcp" port="1514") ~~~ ~~~bash iptables -A INPUT -i ens2 -s 51.91.254.172 -p tcp --dport 1514 -j ACCEPT iptables -A INPUT -i ens2 -p tcp --dport 1514 -j REJECT ~~~ Voir **`$AllowedSender`** ~~~bash system restart rsyslog ~~~ Par défaut les logs arriverons ici : /var/log/syslog Pour changer le fichier de destination `/etc/rsyslog.d/45-rsyslog-server.conf` ~~~ $template syslog,"/var/log/clients/%fromhost%/syslog.log" *.* ?syslog # Plus de log dans /var/log/syslog ni ailleurs & stop ~~~ ### Conf client `/etc/rsyslog.d/20-pushlog.conf` ~~~ $ActionQueueType LinkedList # Exécuter le traitement de façon asynchrone. $ActionQueueFileName srvrfwd1 # Préfixe de nom unique pour les fichiers spool. Active également le mode disque. $ActionQueueMaxDiskSpace 1g # Limite d'espace de 1 Go. $ActionQueueSaveOnShutdown on # Enregistrer les données sur le disque si Rsyslog est arrêté. $ActionResumeRetryCount -1 # Tentatives infinies en cas d'échec de connexion avec l'hôte. # jouter les lignes suivantes dans la section RULES : # Envoyer tous les messages sur le serveur de journalisation distant avec la commande suivante : # Les @@ doivent figurer dans la ligne de commande, le fait qu'il y en ai deux indique que les échanges se feront en TCP. *.* @@192.168.1.10:1514 ~~~ Test ~~~bash logger -s "TEST plop" ~~~ ## Les filtres Voir : * https://docs.fedoraproject.org/en-US/Fedora/23/html/System_Administrators_Guide/s1-basic_configuration_of_rsyslog.html 3 types de filtres : * Facility/Priority-based filters * Property-based filters * Expression-based filters ### Facility/Priority-based filters ### Property-based filters ~~~ :msg, contains, "123: Message for bucket 123" -/var/log/myapp/123.log ~~~ `/etc/rsyslog.d/20-ufw.conf` ~~~ # Log kernel generated UFW log messages to file :msg,contains,"[UFW " /var/log/ufw.log # Uncomment the following to stop logging anything that matches the last rule. # Doing this will stop logging kernel generated UFW log messages to the file # normally containing kern.* messages (eg, /var/log/kern.log) #& stop ~~~ ### Expression-based filters ## Conf input Voir * https://www.rsyslog.com/using-the-text-file-input-module/ * https://rsyslog-doc.readthedocs.io/en/latest/configuration/modules/imfile.html * https://stackoverflow.com/questions/31426373/rsyslogs-new-configuration-format-for-input-files # Old ## Serveur rsyslog distant Voir http://www.it-connect.fr/centralisez-vos-logs-avec-rsyslog/ Voir aussi : * journald * imjournal ~~~bash apt-get install rsyslog ~~~ ou ~~~bash yum install rsyslog ~~~ ~~~bash netstat -taupen | grep 514 ~~~ Aucun processus n'écoute sur le port UDP 514. Utilisation du port UDP 514. Il suffit de dé-commenter ces lignes : `/etc/rsyslog.conf` ~~~ # UDP $ModLoad imudp $UDPServerRun 514 # TCP #$ModLoad imtcp #$InputTCPServerRun 514 ~~~ ~~~bash systemctl restart rsyslog netstat -taupen | grep 514 ~~~ ~~~ udp 0 0 0.0.0.0:514 0.0.0.0:* 0 199126 5041/rsyslogd udp6 0 0 :::514 :::* 0 199127 5041/rsyslogd ~~~ Sur les clients, à la fin du fichier de conf, nous précisons où envoyer les logs `/etc/rsyslog.conf` ~~~ # UDP *.* @IP_Adress_ou_FQDN:514 # TCP #*.* @@IP_Adress_ou_FQDN:514 ~~~ Après le bloc « **RULES** » dans le fichier de configuration du serveur : ~~~ $template syslog,"/var/log/clients/%fromhost%/syslog.log" ~~~ On va ensuite appliquer ce template à tous les logs entrants : ~~~ *.* ?syslog ~~~ Règle iptables ~~~bash iptables -A INPUT -m state --state NEW -m udp -p udp --dport 514 -j ACCEPT ~~~ ### Autres `/etc/rsyslog.d/listen.conf` ~~~ $SystemLogSocketName /run/systemd/journal/syslog ~~~ `/etc/rsyslog.conf` ~~~ #$OmitLocalLogging on $OmitLocalLogging off ~~~ ~~~bash systemctl restart rsyslog systemctl restart systemd-journald ~~~ Voir `/etc/systemd/journald.conf` A tester `/etc/rsyslog.conf` ~~~ if $msg contains 'pcieport' then /dev/null & stop if $msg contains 'pcieport' then { action(type="omfile" file="/dev/null") } ~~~ ## Exemple ~~~ $SystemLogRateLimitInterval 5 $SystemLogRateLimitBurst 1200 # In order to gain read access to logs, make user 'utilisateur' member of group adm $Template PreciseFormat,"%timegenerated:1:23:date-rfc3339% %HOSTNAME% %syslogpriority-text% %syslogtag%%msg:::drop-last-lf%\n" # Decomment to apply PreciseFormat template to every log # $ActionFileDefaultTemplate PreciseFormat # Base for system with Coding Control local3.* /var/log/mylog1.log;PreciseFormat local3.notice /var/log/mylog2.log;PreciseFormat # Finally discard local messages so they are not going to be written in other log files local0.*,local1.*,local2.*,local3.*,local4.*,local5.*,local6.*,local7.* stop ~~~ ~~~bash logger -p local0.notice -t MYTAG "my message" ~~~ ## Infos utiles Valider la configuration ~~~bash rsyslogd -N1 ~~~ ## Docker et Rsyslog ~~~yaml docker-compose logging: driver: syslog options: tag: "BigDataSolyDBTmp" syslog-facility: "local5" ~~~ rsyslog ~~~ $Template CustomFormat,"%timegenerated:1:23:date-rfc3339% %HOSTNAME% %syslogpriority-text% %syslogtag%%msg:::drop-last-lf%\n" $ActionFileDefaultTemplate CustomFormat $IMUXSockRateLimitBurst 2000 $template syslogDocker, "/var/log/plop/%APP-NAME:::secpath-replace%.log" $umask 0002 local5.* ?syslogDocker local5.* stop ~~~ ## Pb ### Erreur : SystemLogRateLimitBurst is currently not permitted ~~~bash journalctl -p warning -u rsyslog ~~~ ~~~ command 'SystemLogRateLimitBurst' is currently not permitted - did you already set it via a RainerScript command (v6+ config)? [v8.24.0 try http://www.rsyslog.com/e/2222 ] ~~~ Solution Remplacer `$SystemLogRateLimitBurst 2000` par `$IMUXSockRateLimitBurst 2000` `/etc/rsyslog.d/plop.conf` ~~~ #$SystemLogRateLimitBurst 2000 $IMUXSockRateLimitBurst 2000 ~~~ Et redémarrer le service rsyslog Voir : http://www.celtha.es/blog/notas-sobre-rsyslog/