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

Centraliser les logs rsyslog dans une base MySQL / MariaDB

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).

Linux  / Fedora Formateur Linux Linux MariaDB MySQL rsyslog 

Commentaires

Pas encore de commentaire.

Laisser un commentaire

(requis)

(requis)