wiki/HowtoLog2mail.md

161 lines
4.4 KiB
Markdown
Raw Normal View History

2017-07-16 18:26:25 +02:00
---
categories: sysadmin
title: Howto Log2mail
...
2016-12-29 11:25:39 +01:00
2017-07-16 22:57:12 +02:00
**Log2mail** est un démon qui surveille en permanence une liste de journaux et qui envoie immédiatement un email si certains termes apparaissent dans ce fichier. C'est un complément idéal à [Logcheck](HowtoLogcheck) qui permet d'alimenter la liste des termes considérés comme anormaux. *Log2mail* était présent dans Debian pendant plusieurs années, il a été retiré depuis Debian 7 mais nous l'utilisons toujours car le [code source](https://github.com/fumiyas/log2mail) est simple et nous n'avons pas trouvé d'équivalent.
2016-12-29 11:25:39 +01:00
2017-07-16 18:26:25 +02:00
## Installation
2017-07-16 22:57:12 +02:00
Un paquet _.deb_ pour Debian 7, 8 et 9 est disponible sur <http://pub.evolix.net>.
Pour Debian 9 :
~~~
$ wget http://pub.evolix.net/stretch/log2mail_0.3.0-2_amd64.deb
# dpkg -i log2mail_0.3.0-2_amd64.deb
~~~
2017-07-24 09:48:09 +02:00
Ce paquet log2mail ne fournit pas encore d'unité systemd, on pourra créer l'unité suivante dans /etc/systemd/system/log2mail.service :
~~~
[Unit]
Description=Daemon watching logfiles and mailing lines matching patterns
After=network.target
[Service]
Type=forking
ExecStart=/usr/sbin/log2mail -- -f /etc/log2mail/config
KillMode=control-group
Restart=always
User=log2mail
Group=adm
[Install]
WantedBy=multi-user.target
~~~
2016-12-29 11:25:39 +01:00
## Configuration
2017-07-16 22:57:12 +02:00
Sa configuration se déroule dans le fichier `/etc/log2mail/config/default`.
2016-12-29 11:25:39 +01:00
Par exemple, si vous voulez préciser que vous voulez recevoir un mail dès que le terme _fatal_
2017-07-16 22:57:12 +02:00
apparaît dans le fichier `/var/log/mail.log`, ajoutez ces lignes :
2016-12-29 11:25:39 +01:00
~~~
file = /var/log/mail.log
2017-07-22 12:24:18 +02:00
pattern = "fatal"
mailto = alert@example.com
2016-12-29 11:25:39 +01:00
~~~
2017-07-22 12:21:10 +02:00
De façon facultative vous pouvez ajouter l'option ` template = /etc/log2mail/template.mail-fatal` et créer un fichier template `/etc/log2mail/template.mail-fatal` pour le mail qui sera envoyé (par défault, il y a un templace dans `/etc/log2mail/mail`) :
2016-12-29 11:25:39 +01:00
~~~
From: %f
To: %t
Subject: [LOG2MAIL] Erreur fatale pour mail.log
Bonjour,
Nous avons reconnu le terme "%m" dans "%F" %n fois :
%l
Merci.
~~~
2017-07-22 12:24:18 +02:00
On peut préciser plusieurs patterns pour un même fichier ainsi :
~~~
file = /var/log/mail.log
pattern = "fatal"
mailto = alert@example.com
pattern = "error"
mailto = alert@example.com
~~~
2017-07-16 22:57:12 +02:00
Attention, *Log2mail* est un assez basique… si il n'a pas les droits d'accès à
un fichier déclaré dans sa configuration, il plante !! On prendra donc bien
garde à bien vérifier les droits d'accès.
2016-12-29 11:25:39 +01:00
Pour des logs système, on devra ainsi souvent faire :
~~~
# adduser log2mail adm
~~~
2017-07-16 22:57:12 +02:00
Après toutes modifications, il ne faut pas oublier de redémarrer le deamon :
2016-12-29 11:25:39 +01:00
~~~
2017-07-16 22:57:12 +02:00
# systemctl restart log2mail
2016-12-29 11:25:39 +01:00
~~~
2017-07-16 22:57:12 +02:00
Et vérifié le process avec `ps aux` :
2016-12-29 11:25:39 +01:00
~~~
2017-07-16 22:57:12 +02:00
$ ps aux | grep log2mail
2016-12-29 11:25:39 +01:00
~~~
2017-07-16 22:57:12 +02:00
Pour avoir plusieurs destinataires, on définit la variable _mailto_ ainsi :
2017-04-11 11:42:59 +02:00
~~~
mailto = "destinataire1@mail.com destinataire2@mail.com"
~~~
2016-12-29 11:25:39 +01:00
2017-07-16 22:57:12 +02:00
2016-12-29 11:25:39 +01:00
## Configuration avancée
2017-07-16 22:57:12 +02:00
log2mail détecte les _pattern_ avec le code source suivant (ligne 25 de `data.cc`) :
2016-12-29 11:25:39 +01:00
~~~
int inPattern::matches(const string& aLine) {
return (regexec(&rPattern, aLine.c_str(), 0, 0, 0) == 0);
}
~~~
2017-07-16 22:57:12 +02:00
D'après le man de _regexec(3)_ :
2016-12-29 11:25:39 +01:00
~~~
2017-07-16 22:57:12 +02:00
POSIX Regex Matching
regexec() is used to match a null-terminated string against the precom?
piled pattern buffer, preg. nmatch and pmatch are used to provide
information regarding the location of any matches. eflags may be the
bitwise-or of one or both of REG_NOTBOL and REG_NOTEOL which cause
changes in matching behavior described below.
2016-12-29 11:25:39 +01:00
~~~
On peut donc utiliser les [regex POSIX](http://en.wikipedia.org/wiki/Regular_expression#POSIX)
Voici quelques exemples testés :
~~~
# N'importe quelle ligne
pattern = ".*"
# Debut de ligne
pattern = "^ERROR"
~~~
2017-07-16 22:57:12 +02:00
Dans un mode plus avancé, on peut peut astucieusement combiner l'utilisation de *Log2mail* avec *Procmail*, une première détection sera faite avec *Log2mail* puis envoyé vers un email géré par *Procmail* pour un filtrage encore plus fin des alertes.
2017-03-23 15:41:48 +01:00
2017-07-16 23:24:05 +02:00
## FAQ
### Debug
2017-03-23 15:41:48 +01:00
2017-07-16 22:57:12 +02:00
L'option `-N` permet de forcer l'écriture des erreurs sur STDERR et que le process ne soit pas deamonizé (mis en tâche de fond) :
2017-03-23 15:41:48 +01:00
~~~
# /usr/sbin/log2mail -N -f /etc/log2mail/config/
2017-07-16 22:57:12 +02:00
~~~
2017-07-16 23:24:05 +02:00
### Log2mail VS Fail2Ban
Peut-on remplacer Log2mail par [Fail2Ban](HowtoFail2Ban) ? En effet, Fail2Ban permet de détecter des patterns, et de lancer des actions diverses, notamment envoyer un email. Malheureusement, Fail2Ban veut absolument détecter une adresse IP (variable _<HOST>_) ce qui le rend inutilisable dans un cas général.