Centraliser les logs rsyslog dans une base MySQL / MariaDB
rsyslog possède de très nombreux modules nous permettant d’envoyer les logs système vers les bases de données MySQL / MariaDB, PostgreSQL, ElasticSearch, Redis, à des fins d’analyse post-mortem par exemple.
Installation du module rsyslog-mysql
Après avoir installé au préalable une instance MySQL/MariaDB, nous allons ajouter sur Fedora 28 le paquet rsyslog-mysql :
yum install rsyslog-mysql
Création de la base Syslog
En installant le module vous disposez d’un script pour créer la base de données Syslog :
mysql -u root -p < /usr/share/doc/mysql-createDB.sql
Le script crée une base Syslog et lui rattache les tables SystemEvents et SystemEventsProperties. Pensez à créer un utilisateur disposant des droits sur cette base à partir de l’interpréteur mysql :
GRANT ALL PRIVILEGES ON Syslog.* TO utilisateur@localhost IDENTIFIED BY 'mot_de_passe';
Configuration du fichier /etc/rsyslog.conf
Dans Fedora 28, vous devez ajouter le module ommysql au fichier de configuration /etc/rsyslog.conf (finie la directive $ModLoad dans Fedora 28) :
module(load="ommysql")
Redirigez ensuite tous les messages en ajoutant tout à la fin de ce fichier :
*.* :ommysql:localhost,Syslog,utilisateur,mot_de_passe
Vous pouvez redémarrer le service rsyslog :
systemctl restart rsyslog
Requête sur la table SystemEvents
Après vous être connecté à la base Syslog nouvellement créé, tapez, par exemple, la requête pour visualiser les logs :
SELECT ReceivedAt, FromHost, Facility, Priority, Message, SysLogTag FROM SystemEvents
Tables facility et severity
Afin d’établir les correspondances entre les codes des catégories et des niveaux d’erreur des messages, je vous conseille de créer les tables facility et severity :
CREATE TABLE facility ( code INT, keyword VARCHAR(50), description VARCHAR(50) ); INSERT INTO facility(code,keyword,description) VALUES (0,'kern','kernel messages'), (1,'user','user-level messages'), (2,'mail','mail system'), (3,'daemon','system daemons'), (4,'auth','security/authorization messages'), (5,'syslog','messages generated internally by syslogd'), (6,'lpr','line printer subsystem'), (7,'news','network news subsystem'), (8,'uucp','UUCP subsystem'), (9,'cron','clock daemon'), (10,'authpriv','security/authorization messages'), (11,'ftp','FTP daemon'), (12,'ntp','NTP subsystem'), (13,'security','log audit'), (14,'console','log alert'), (15,'solaris-cron','scheduling daemon'), (16,'local0','locally used facilities'), (17,'local1','locally used facilities'), (18,'local2','locally used facilities'), (19,'local3','locally used facilities'), (20,'local4','locally used facilities'), (21,'local5','locally used facilities'), (22,'local6','locally used facilities'), (23,'local7','locally used facilities'); CREATE TABLE severity ( code INT, title VARCHAR(20), keyword VARCHAR(10) ); INSERT INTO severity(code,title,keyword) VALUES (0,'Emergency','emerg'), (1,'Alert','alert'), (2,'Critical','crit'), (3,'Error','err'), (4,'Warning','warn'), (5,'Notice','notice'), (6,'Informational','info'), (7,'Debug','debug');
Comprendre rsyslog
Vous disposez, sur Wikipédia, d’une excellente page consacrée à syslog dans laquelle vous aurez toutes les explications requises sur les valeurs figurant dans les colonnes Facility (la catégorie des messages) et Priority (le niveau de sévérité des messages).