Elasticsearch, Rsyslog, Logstash / Elk
Par pepin le mercredi, mai 3 2017, 19:43 - Elasticsearch - Lien permanent
Voici la documentation d'installation d'un triplet Elk/Rsyslog/Logstash afin d'indexer des logs pour des requêtes plus efficaces.
Installation de Logstash et Elasticsearch
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb http://artifacts.elastic.co/packages/5.x/apt stable main" > /etc/apt/sources.list.d/elk.list
apt update
apt install elasticsearch logstash
Ajoutez les lignes suivantes au fichier /etc/logstash/conf.d/logstash.conf
# This input block will listen on port 10514 for logs to come in. # host should be an IP on the Logstash server. # codec => "json" indicates that we expect the lines we're receiving to be in JSON format # type => "rsyslog" is an optional identifier to help identify messaging streams in the pipeline. input { udp { host => "127.0.0.1" port => 10514 codec => "json" type => "rsyslog" } } # This is an empty filter block. You can later add other filters here to further process # your log lines filter { } # This output block will send all events of type "rsyslog" to Elasticsearch at the configured # host and port into daily indices of the pattern, "rsyslog-YYYY.MM.DD" output { if [type] == "rsyslog" { elasticsearch { hosts => [ "127.0.0.1:9200" ] } } }
Maintenant nous allons configurer rsyslog pour envoyer a logstash :
Créer un fichier /etc/rsyslogd/01-json-template contenant :
template(name="json-template" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"@version\":\"1") constant(value="\",\"message\":\"") property(name="msg" format="json") constant(value="\",\"sysloghost\":\"") property(name="hostname") constant(value="\",\"severity\":\"") property(name="syslogseverity-text") constant(value="\",\"facility\":\"") property(name="syslogfacility-text") constant(value="\",\"programname\":\"") property(name="programname") constant(value="\",\"procid\":\"") property(name="procid") constant(value="\"}\n") }
Puis indiquer a rsyslog qu'il faut envoyer en utilisant le template json a logstash :
Editer /etc/rsyslog.d/50-default et ajoutez la ligne :
*.* @127.0.0.1:10514;json-template
Lancer/Relancer les services :
service elasticsearch start
service logstash start
service rsyslog restart
Maintenant, Kibana !
apt install kibana
service kibana start
Consulter les liens :
Liste des indexes d'ElasticSearch
http://localhost:9200/_cat/indices?v
Kibana
http://localhost:5601/
Bien sur, si vous hébergez votre Elk + Kibana sur une autre machine, il faut changer l'ip dans /etc/rsyslog.d/50-default et localhost dans les urls de consultation et d'interrogation.
Nous avons aussi la possibilité d'avoir un rsyslog local à la machine qui héberge logstash, Elk, et kibana, ou que chaque machine envoie ses logs directement à logstash, ou encore que logstash soit local a chaque machine et envoie a un Elk distant. Multiples combinaisons selon vos besoins architecturaux.