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.
So jetzt sind die Daten mal da. Was man damit wie machen kann muss ich nun als nächstes herausfinden.