ELK

Analyse de Logs avec

ElasticSearch-Logstash-Kibana

Présentation de Gauthier C. / @CattGr

En 40 minutes environ

  1. Avant ...
  2. Présentation d'ELK
  3. Démo
  4. Architecture
  5. Alimentation avec LogStash
  6. Outils annexes

Avant ...

Et bien oui, ElasticSearch n'a pas toujours existé

Il y a très longtemps

  • Fichiers de logs réparties sur x serveurs.
  • Difficile de retrouver l'information.
  • Impossible de faire de la corrélation.
  • Pas d'archivage des journaux (quelques jours au plus).
  • Impossible de trouver une vieille information.

Première amélioration

  • Rsyslog centralisé.
  • Consolidation des fichiers par type de logs.
  • Horodatage précis.
  • [bz|z]grep, awk, sed
  • Parfois des heures pour trouver une information.

Depuis la mise en place d'ELK

  • Quelques secondes pour retouver une information.
  • Recherche et corrélation possible dans plusieurs fichiers de logs.
  • Détection de comportements anormaux.
  • Tableaux de bord personnalisables.
  • Filtres multicritères.

Présentation d'ELK

ELK c'est quoi?

  • Elasticsearch - Base NoSql distribuée et moteur de recherche Lucene
  • Logstash - ETL spécialisé dans la gestion des logs
  • Kibana - Interface graphique pour Elasticsearch

ElasticSearch

ElasticSearch

ElasticSearch est un support de stockage haute performance permettant d’effectuer des recherches full-text en un éclair sur des Gigas de données.
  • Orienté Document
  • Sans schéma (pas de définition stricte du contenu des index)
  • Possibilité de distribuer sur plusieurs nœuds
  • Hautement disponible
  • Basé sur le moteur de recherche full-text Lucene
  • Accessible à partir d’une API REST
  • Open source

LogStash

LogStash est un ETL (Extract-Transform-Load)

Il permet nativement de :

  • Récupérer les logs provenant de sources variées,
  • Transformer les logs vers de multiples formats,
  • Sauvegarder le résultat de la transformation vers différents systèmes de stockage.

LogStash propose par défaut:

  • 41 entrées : syslog, zeromq, file, collectd, pipe, eventlog, etc...
  • 20 codecs : json, json_lines, multiline, etc...
  • 50 filtres : grok, date, geoip, mutate, etc...
  • 55 sorties : elasticsearch, stdout, rabbitmq, graphite, etc...

Kibana

Kibana est l'interface web de référence d'ElasticSearch

Depuis la version 4, les opérations dans kibana se décomposent en 3 parties :
  • Discover: permet de visualiser les données des index elasticsearch.
  • Visualize: cœur de kibana pour mettre en forme et agréger les données dans des vues.
  • Dashboard: pages de synthèse des vues.

Discover

Visualize

Dashboard

Démo

Architecture

Alimentation avec LogStash

input

Exemple de fichier de configuration logstash

input {
    file {
        type => "apache"
        path => "/var/log/remote/HTTP/20*/*/vncache*.log"
   }
}
                                          

filter


filter {
    if [loglevel] == "debug" { 
         drop { } 
      }
    if [type] == "apache" {
        grok {
              patterns_dir => [ "/home/logstash/patterns" ]
              match => [
                "message", "%{SYSLOGBASE} %{COMBINEDAPACHELOG}",
                "message", "%{COMBINEDAPACHELOG}"
              ]
              tag_on_failure => [ ]
            }
        date {
            match  => [ 'timestamp', 'dd/MMM/yyyy:HH:mm:ss Z' ]
            locale => "en"
            timezone => "Europe/Paris"
            target => "@timestamp"
          }
   }
}
                                          

output



utput {
        if [type] == "apache" {
                   elasticsearch {
                                 bind_host => "127.0.0.1"
                                 host => "127.0.0.1"
                                 index => "heberge-%{+YYYY.MM.dd}" 
                                }
        }
} 
                                          

Patterns

De nombreuses règles par défaut dans /opt/logstash/patterns/

SYSLOGBASE %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}:
COMMONAPACHELOG %{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
                                          

Outils annexes

  • Grok Debugger: Permet de valider et tester les nouvelles règles grok. http://grokdebug.herokuapp.com/
  • Curator: Pour faire le ménage.
  • Packetbeat: Agent analyse du trafic à déployer sur les serveurs.
  • Shield: Limiter les accès à ElasticSearch.