Logging mit Elasticsearch
https://daylightsoftware.atlassian.net/browse/DL-4018
Kibana
https://log03.cdl.one username: elastic, pw im Vault
Dashboards
Es können verschiedene Dashboards erstellt werden, um die Daten zu Filtern und Visualisieren. https://www.elastic.co/guide/en/kibana/current/create-a-dashboard-of-panels-with-web-server-data.html
In “Test1 Dashboard” werden die Logmessages als Beispiel aufbereitet. Das Dashboard “test1_customer” zeigt nur die Logmessages für den Kunden “test1_customer” an.
Alerting
Um zb Emails zu verschicken, falls gewisse Fehler zu oft auftreten oder der Server zu sehr ausgelastet ist, können Regeln gesetzt werden, die in bestimmten Zeitintervallen überprüft werden und eine Aktion auslösen.
https://www.elastic.co/guide/en/kibana/current/alerting-setup.html#alerting-prerequisites
https://www.elastic.co/guide/en/kibana/current/alerting-getting-started.html
https://www.elastic.co/guide/en/kibana/current/rule-types.html
Index Lifecycle
Logdaten als Data streams zu speichern ist passend, da diese für “append-only time series data” sind. Die Logmessages werden jeweils in einem Index gespeichert, aus denen der Data stream besteht, wobei immer wieder neue Indices erstellt werden https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html#data-streams-rollover anhand vom Index Template, das für den Data stream gesetzt wurde. Für Index Templates können Index Lifecycle Policies erstellt werden, die dann auf alle Indices angewendet werden, die auf dem entsprechenden Index Template beruhen. https://log03.cdl.one/app/management/data/index_lifecycle_management/policies
Indem z.B für verschiedene Kunden verschiedene Data streams mit unterschiedlichen Index Templates verwendet werden, könnte auch unterschiedlich festgelegt werden ab wann die Logmessages gelöscht werden oder wann die Logmessages in ein “cold tier” verschoben werden sollen um Kosten zu sparen und dafür längere Suchzeiten in kauf zu nehmen.
Logstash
Mit dem Gelf4Net.Appender.GelfUdpAppender werden die Logmessages an den Logstash Server geschickt. Dort können die Logmessages gefiltert und verändert werden (siehe Config), bevor sie in die auf demselben Server laufende Elasticsearch Instanz geschrieben werden.
Start Logstash
https://www.elastic.co/guide/en/logstash/current/running-logstash.html
ssh -i openssh dladm@log03.cdl.one
dladm@log03:/etc/systemd/system$ sudo systemctl start logstash.service
Stop Logstash
dladm@log03:/etc/systemd/system$ sudo systemctl stop logstash.service
Log von Logstash anzeigen
tail -f /var/log/logstash/logstash-plain.log
Config editieren
cd /etc/logstash/conf.d
sudo nano -w first.conf
Momentane Config
input {
gelf {
host => "192.168.77.32"
port => 12201
use_udp => true
}
}
filter {
json {
source => "RenderedMessage"
target => "m"
}
date {
match => [ "TimeStamp", "dd/MMM/YYYY:HH:mm:ss Z" ]
locale => de
remove_field => ["TimeStamp"]
}
mutate {
remove_field => [ "Level" ]
remove_field => [ "host" ]
add_field => {
"[data_stream][type]" => "logs"
"[data_stream][dataset]" => "%{[m][Customer]}"
"[data_stream][namespace]" => "%{[m][Environment]}"
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
user => "logstash_internal"
password => "pw im Vault"
data_stream => true
}
Verschiedene Data streams schreiben
Mit der momentanen Config werden die Logmessages jeweils in den Data Stream mit dem Namen “Logs-Customer-Environment” geschrieben. So kann jeweils für jede Kombination aus Kunde und Umgebung separat eine Lifecycle Policy festgelegt werden.
Mögliche Optimierungen
Eventuell können wir Logs Data Streams verwenden, die weniger Speicherplatz brauchen würden.
https://www.elastic.co/guide/en/elasticsearch/reference/current/logs-data-stream.html