ELK : Elasticsearch + Logstash + Kibana

2014-06-17 0 Par seuf

elasticsearch-iconelogstashkibana

Je viens de tester cette semaine le trio ELK Elasticsearch + logstash + kibana ! Et c’est super puissant !

J’en entendait parler depuis quelques temps sur IRC et sur quelques sites de news, et du coup j’ai eu envie d’essayer ces nouvelles techno dont tout le monde parle.

Ce combo permet de centraliser, d’analyser, et d’extraire facilement des données utiles de multiples fichiers de logs en temps réel.

Pour ça, il y a la brique logstash, qui va se charger d’analyser les logs en temps réel, d’en extraire des données utiles via des filtres, et ensuite de stocker tout ça dans un output.

Justement dans le trio ELK, les données ainsi analysées sont stockées dans elasticsearch, une sorte de gros index en JSON, qui permet de stocker de gros volumes de données et surtout de rechercher rapidement dedans !

Enfin Kibana, l’interface super sexy qui va se brancher sur elasticsearch pour afficher des graphiques, permettre de rechercher ce qu’on veut dans les logs, et même se créer des tableaux de bord custom par application.

Au boulot, j’ai donc monté un POC pour analyser les logs d’un outil proprio, extraire des infos (dates, mesures, etc..) et envoyer tout ça dans Zabbix, via le plugin output Zabbix de logstash.

J’ai commencé par installer elasticsearch, en décompressant l’archive dispo sur le site officiel, puis en lançant le binaire..

J’ai également dézippé kibana dans mon répertoire apache (y’a pas plus simple comme installl 😛 ).

Ensuite j’ai commencé à configurer logstash…

J’ai donc créé un fichier de configuratio logstash tout simple avec les infos suivantes :

 

input {
  file {
    path => "Chemin/vers/mon/fichier/de/logs"
    stat_interval => 10
    tags => ["Mon-Appli", "PROD"]
  }
}

filter {
  if "Mon-Appli" in [tags] {
    grep {
      match => {
        message => ".*OK.*nb=.*"
      }
    }
    grok {
      match => [ "message", ".*%{WORD:client}.*%{WORD:request}.*nb=%{INT:nb}.*(?<day>[0-9]{8}).*(?<hour>[0-9]{6})" ]
      add_tag => [ "zabbix_sender" ]
      add_field => [
        "zabbix_host", "My-Appli",
        "zabbix_item", "%{client}.%{request}",
        "send_field", "nb",
        "log_date", "%{day} %{hour}"
      ]
    }
    date {
      match => ["log_date", "YYYYMMdd HHmmss" ]
      timezone => "Europe/Paris"
    }
  }
}

output {
  elasticsearch { host => localhost }

  stdout { codec => rubydebug }

  zabbix {
    tags => "zabbix-sender"
    host => "IP.DU.SERVEUR.ZABBIX"
    zabbix_sender => "Chemin/vers/zabbix_sender"
  }
}

Et voila, grâce à ce petit fichier de conf, je peut directement extraire les infos dont j’ai besoin de mon fichier de log au format bizarre, et importer les données dans Zabbix pour ensuite créer des alertes « métier » pour les utilisateurs (oui les utilisateurs ne font pas de la supervision classique, ils ont des besoins spécifiques).

Au final, je n’avait pas forcément besoin d’elasticsearch et de kibana, mais j’avais quand même envie de tester alors ça m’a fait plaisir…

Bref, je pense que je vais de plus en plus utiliser logstash pour l’analyse de logs en tout genre. En effet, il y a plein de plugins en input déjà dispo (collectd, irc, jmx, snmptrap, syslog, redis, etc..) des filtres développés par la communauté super pratiques, et encore plus d’output pour envoyer les données dans l’outil de notre choix !

La liste complète des plugins (et leur documentation) est dispo sur le site officiel de logstash. Et je pense qu’elle risque de s’agrandir avec le temps.