Webserver Logs in Elasticsearch importieren

Die Kombination von Elasticsearch, Logstash und Kibana (ELK) soll eine sehr mächtige Möglichkeit zur Auswertung von Logfiles sein. Meine ersten Versuche wollte ich mit Apache Logfiles machen. Vielleicht kann man ja damit die bei mir weggefallenen Web Analytics Anwendung Piwik ausgleichen. Da hier keine IP Adressen gespeichert werden und keine Auswertung der Browsersettings auf der Clientseite erfolgen ist zwar mit wenig aber vielleicht hilfreichen Informationen zu rechnen. Ich erwarte mir von dieser Möglichkeit auch andere Informationen aus anderen Log Daten.

Die drei Softwarepakete installieren sich für einen ersten Test recht einfach und schnell:

  • Download der Dateien von hier
  • Auspacken mit tar
  • Konfigurieren und Starten

Elasticsearch

Es ist keine Konfiguration notwendig wenn man hinter einer Firewall steht. Kann man einfach mit

 elasticsearch-x.y.z/bin/elasticsearch

gestartet werden und wenn man mag kann man mit http://localhost:9200/ sehen ob der Server antwortet

{
    "status" : 200,
    "name" : "Chondu the Mystic",
    "cluster_name" : "elasticsearch",
    "version" : {
      "number" : "1.7.2",
      "build_hash" : "e43676b1385b8125d647f593f7202acbd816e8ec",
      "build_timestamp" : "2015-09-14T09:49:53Z",
      "build_snapshot" : false,
      "lucene_version" : "4.10.4"
    },
    "tagline" : "You Know, for Search"
  }

Kibana

Kibana ist eine Anwendung zur Analyse und Visualisierung von Daten. Eine Konfiguration ist für den einfachen Fall nicht notwendig. Wenn man auf http://localhost:5601 geht bekommt die Standardoberfläche angezeigt.

Logstash

Logstash ist ein Programm das es erlaubt “beliebige” Logfiles und andere Datenquellen zu “normalisieren” und unter anderem in Elasticsearch abzulegen.

Wichtig für die unten angegebene einfach Konfiguration für den Import von existierenden Access Logs eines Apache Servers war, das diese im “combined” Format erzeugt wurden. Ansonsten funktioniert das in Logstash bereits vordefinierte “Normalisierungs Pattern” nicht. Also z.B.

 CustomLog /var/www/http/logs/access.log **combined**

Die Zeile mit date{ … } ist wichtig, wenn man existierende Logs importieren möchte. Lässt man die weg bekommen alle Zugriffe den Zeitstempel des Imports.

Die auskommentierte Zeile mit stdout kann hilfreich zur Fehlersuche sein. Dann bekommt man nämlich alles schön auf den Bildschirm dargestellt.

vi logstash.conf
 
input { stdin { type => "apache" } }
filter {
  grok {
    pattern => ["%{COMBINEDAPACHELOG}"]
    add_tag => "apache"    }
  date { match => [ "timestamp","dd/MMM/yyyy:HH:mm:ss Z" ] } 
    }
output {
 elasticsearch {
     cluster => "elasticsearch.local"
     host => "127.0.0.1"
     protocol => http
     index => "my-logs"
     index_type => "apache"
 }
# stdout { codec => rubydebug }
}

Mit

./logstash-1.5.4/bin/logstash --config ./logstash.conf < access.log

bekommt man dann alle Ereignisse aus dem Access.Log des Webservers importiert und das sieht dann in Kibana auf den ersten Blick so aus.

Apache Log ELK Import

So jetzt sind die Daten mal da. Was man damit wie machen kann muss ich nun als nächstes herausfinden.