Ceci est une ancienne révision du document !
Présentation
Logstash est un moteur de découpage de logs. Il est déjà riche de nombreux plugins et expressions régulières pour comprendre une très large variété de logs (system, apache, postfix, etc). Il est de plus très souple pour configurer les règles et tries des logs qu'on lui envoit.
Il supporte aussi très bien la mise à l'échelle, via des éventuelles clients pour pre-parser les logs, un gestionnaire de cache utilise redis, et une base de données modernes types noSQL elasticsearch.
Architecture simple
Un serveur central faisant aussi de collecteur de logs. Sur ce serveur logstash est configuré avec une entrée de type syslog sur le port 5000.
Les clients envoyent leurs logs via rsyslog.
Mise en oeuvre
Configuration des dépôts yum
Il y a un dépôt yum pour elasticsearch, et un pour logstash.
Fichier de configuration du dépôt pour elasticsearch dans /etc/yum.repos.d/elasticsearch.repo:
[elasticsearch-1.0] name=Elasticsearch repository for 1.0.x packages baseurl=http://packages.elasticsearch.org/elasticsearch/1.0/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Fichier<font 13px/arial;;#000000;;#ffffff>de configuration du</font> dépôt<font 13px/arial;;#000000;;#ffffff>pour</font> elasticsearch<font 13px/arial;;#000000;;#ffffff></font> dans<font 13px/arial;;#000000;;#ffffff>/etc/yum.repos.d/elasticsearch.repo:</font>
[logstash-1.4] name=logstash repository for 1.4.x packages baseurl=http://packages.elasticsearch.org/logstash/1.4/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
Installation des paquets
L'installation de la base de données se fait avec la commande suivante:
yum install elasticsearch
L'installation de logstash se fait avec la commande suivante:
yum install logstash
Configuration
input { tcp { port => 5544\\ type => syslog\\ } udp { port => 5544\\ type => syslog\\ } } filter { # Process syslog if [type] == "syslog" { grok {\\ overwrite => "message"\\ match => {\\ "message" => "^(?:<%{NONNEGINT:syslog_pri}>)?%{SYSLOGBASE2} %{GREEDYDATA:message}"\\ }\\ add_tag => [ "syslog", "grokked" ]\\ }\\ syslog_pri { } mutate { add_field => [ "hostip", "%{host}" ]\\ } dns { reverse => [ "host" ]\\ action => "replace"\\ } } } output { elasticsearch { host => "localhost"\\ } }