{{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
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''
# 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
apt-get install rsyslog rsyslog-relp
''/etc/default/rsyslog''
module(load="imtcp")
#input(type="imptcp" port="1514" address="127.0.0.1")
input(type="imtcp" port="1514")
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''**
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
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
apt-get install rsyslog
ou
yum install rsyslog
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
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
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
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
logger -p local0.notice -t MYTAG "my message"
== Infos utiles
Valider la configuration
rsyslogd -N1
== Docker et Rsyslog
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
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/