WikiMiNET

La documentation technique et administrative

Outils pour utilisateurs

Outils du site


wiki:monitoring:elk:logstash

Ceci est une ancienne révision du document !


Logstash

Pourquoi ?

Logstash est un puissant outil de gestion de logs permettant d'effectuer une mise en forme avancée de ceux-ci. En effet, étant donné la diversité des formats, il peut rapidement devenir difficile de chercher une information précise apparaissant sous différentes formes, dans différents services. Logstash permet de pallier à ce problème en définissant un tamis dans lequel sont filtrés les messages : il est alors possible de classifier l'information par la définition de champs. La sortie formatée est ensuite envoyée au cluster Elasticsearch afin d'être indexée.

Nous utilisons actuellement la version 2.0 de Logstash.

Comment ?

Architecture

Pour chaque machine un serveur syslog (rsyslog ou syslog-ng) surveille les fichiers journaux. Chaque nouveau message est ainsi transféré vers le serveur Logstash (192.168.102.9), où il est analysé et formaté avant d'être transmis au cluster Elasticsearch.

Configuration

rsyslog

Pour transmettre les journaux vers Logstash, il est nécessaire de créer sur la machine concernée le fichier /etc/rsyslog.d/forward.conf.

Par défaut rsyslog surveille déjà tous les messages système (cron, authentification, noyau, …).

Pour rajouter un fichier supplémentaire, il est nécessaire d'utiliser le module imfile de rsyslog :

  $ModLoad imfile

Puis pour chaque fichier à surveiller :

$InputFileName /var/log/service.log
$InputFileTag mon-service:
$InputFileStateFile stat-mon-service
$InputFileSeverity info
$InputRunFileMonitor

Le champ Tag doit contenir par défaut le nom du service d'où est issu le journal, mais il est possible de rajouter des règles supplémentaires dans Logstash.

Par exemple, pour un serveur web Apache :

$InputFileTag apache-mon-site-error:

créera un champ “program” contenant “apache”, un champ “vhost” contenant “mon-site” et un champ “apache_logtype” contenant “error”.

A noter que les deux points “:” finaux sont indispensables pour respecter le format syslog, et que l'entrée StateFile? doit être unique.

Puis pour tout envoyer vers le container Logstash sur le port 5140 en TCP :

*.* @logstash:5140

On utilisait avant le port standard 514 mais le service logstash drop maintenant les privilèges et ne peut donc plus s'y binder.

logstash

Le fichier de configuration de Logstash est situé sur le container logstash (192.168.102.9) à l'emplacement /opt/logstash/logstash.conf.

Il est composé de trois sections :

  • La section input définit les entrées. Ici on écoute sur le port 5140 en TCP et en UDP :
  tcp {
    type => syslog
    port => 5140
  }
  udp {
    type => syslog
    port => 5140
  }
  • La section filter permet de définir une chaîne de filtres à appliquer sur les données. Un des plugins de filtrage les plus utilisés est Grok : à partir d'une expression régulière, il capture des informations et les ajoute dans des champs. Certaines expressions régulières sont déjà définies dans l'installation de base Logstash, par exemple pour récupérer les données au format syslog :
  grok {
    match => [ "message", "<%{POSINT:priority}>%{SYSLOGBASE} %{GREEDYDATA:shortmessage}" ]
  }

Une liste des expressions pré-définies et de leur valeur est disponible sur le dépôt Git de Logstash.

Ensuite, on écrit les bons patterns pour matcher les logs radius, DHCP, etc.​

  • La section output définit les sorties. Ici on envoie les données à l'un des noeuds (peu importe lequel) de notre cluster Elasticsearch :
output {
  elasticsearch {
    hosts => ['192.168.102.229:9200']
    template_overwrite => true
  }
}

Comme pour les autres composants de la stack ELK, n'hésitez pas à consulter la très bonne documentation officielle.

wiki/monitoring/elk/logstash.1447550568.txt.gz · Dernière modification: 2020/06/27 18:15 (modification externe)