'

Outils pour utilisateurs

Outils du site


doc:rsyslog

rsyslog

rsyslog est le démon syslog fourni par défaut dans de nombreuses distributions Linux dont Debian et RedHat.

La configuration de ce logiciel n'est pas simple (question de goûts). Je donne ici quelques pistes.

Envoi vers ElastiscSearch

Introduction

ElasticSearch est une base de donnée NoSQL. Combiné avec l'interface web Kibana, c'est une excellente solution pour visionner des logs.

Le couple ElasticSearch - Kibana vient souvent avec un troisième compère : Logstash qui permet d'écrire des événements : logs, traps SNMP, statistiques collectd, etc dans divers outils dont ElastisSearch. Le but ici est de se passer de Logstash pour envoyer les logs syslog dans elastissearch.

Installation

D'abord, il faut utiliser une version >= 7.4 de rsyslog pour pouvoir utiliser le module elasticsearch. Cette version est disponible dans Debian backports. Si vous n'avez pas encore sauvegarder votre configuration rsyslog, c'est le moment ('/etc/rsyslog.conf et dossier /etc/rsyslog.d). <code bash> sudo apt-get install –target-release=wheezy-backports install rsyslog rsyslog-elasticsearch </code> ==== Configuration ==== Tout d'abord chargeons le module ElasticSearch dans le fichier /etc/rsyslog.conf : <code bash> ################# #### MODULES #### ################# $ModLoad imuxsock # provides support for local system logging $ModLoad imklog # provides kernel logging support module(load=“omelasticsearch”) </code> Cette ligne doit être présente en début de fichier. J'ai laissé l'ancienne et la nouvelle syntaxe pour charger les modules dans rsyslog. Ensuite, tout se passe dans le fichier /etc/rsyslog.d/elasticsearch.conf <code bash> # this is for index names to be like: logstash-YYYY.MM.DD template(name=“logstash-index” type=“list”) { constant(value=“logstash-”) property(name=“timereported” dateFormat=“rfc3339” position.from=“1” position.to=“4”) constant(value=“.”) property(name=“timereported” dateFormat=“rfc3339” position.from=“6” position.to=“7”) constant(value=“.”) property(name=“timereported” dateFormat=“rfc3339” position.from=“9” position.to=“10”) } # this is for formatting our syslog in JSON with @timestamp template(name=“plain-syslog” type=“list”) { constant(value=“{”) constant(value=“\”@timestamp\“:\”“) property(name=“timereported” dateFormat=“rfc3339”) constant(value=“\”,\”host\“:\”“) property(name=“hostname”) constant(value=“\”,\”severity\“:\”“) property(name=“syslogseverity-text”) constant(value=“\”,\”facility\“:\”“) property(name=“syslogfacility-text”) constant(value=“\”,\”tag\“:\”“) property(name=“syslogtag” format=“json”) constant(value=“\”,\”message\“:\”“) property(name=“msg” format=“json”) constant(value=“\”}”) } # this is where we actually send the logs to Elasticsearch (localhost:9200 by default) action(type=“omelasticsearch” template=“plain-syslog” searchIndex=“logstash-index” dynSearchIndex=“on” bulkmode=“on”) </code> Il existe une méthode qui nécessite moins de ligne de configurations mais je ne trouve pas plus compréhensible… ==== Conclusion ====

Solution déconseillée

Cette solution fonctionne mais n'est pas aussi souple que logstash. En effet, tout l'intérêt de logstash est de découper le champ « message » des logs pour créer des champs spécifiques dans ElasticSearch et ainsi faciliter la recherche et l'affiche de données pertinentes. On peut faire cet exercice avec rsyslog et sont module normalize. C'est probablement très performant (c'est fait en C) mais bien moins pratique que logstash et son parser grok. Je préfère donc envoyer les logs de rsyslog vers logstash via le protocole syslog en TCP ou en RELP vers logstash''.

doc/rsyslog.txt · Dernière modification: Le 30/03/2015 à 21:58 par sylvain