mkdir /var/log/ntp
chown ntp:ntp /var/log/ntp
Logstash
ELG Stack = Elasticsearch, Logstash und Grafana
|
Important
|
Dieses Kapitel wird editiert und ist noch nicht abgeschlossen. |
Erste Schritte
Um die Verwendung von Logstash zu verstehen, soll als erstes Beispiel die Log-Datei /var/log/ntp/ntp.log überwacht und als neue Datei im JSON-Format abgespeichert werden.
Konfiguration
ntpd
# /etc/conf.d/ntpd
NTPD_OPTS="-u ntp:ntp -l /var/log/ntp/ntp.log"
# /etc/sysconfig/ntpd
#
# see also /usr/lib/systemd/system/ntpd.service
OPTIONS="-g -l /var/log/ntp/ntp.log"
logstash
Die Logstash-Konfiguration teilt sich in die Abschnitte input, filter und output.
Als input-Typ wird von uns syslog-ntp festgelegt.
Der Zeitstempel-Anteil des output-Dateinamens wird im Joda-Time-Format angegeben.
# /etc/logstash/conf.d/ntpstats-ng.conf.ntplog
input {
file {
path => [ "/var/log/ntp/ntp.log" ]
type => "syslog-ntp"
}
}
filter {}
output {
if [type] == "syslog-ntp" {
file {
path => "/tmp/ntpstats-ng-%{+YYYY-MM-dd}.json"
}
}
}
|
Note
|
Die komplette Datei findet sich hier: ntpstats-ng.conf.ntplog |
Es funktioniert!
Die Dienste ntpd und logstash werden mit der oben beschriebene Konfiguration gestartet.
/etc/init.d/logstash start
/etc/init.d/ntpd start
systemctl start logstash.service
systemctl start ntpd.service
|
Note
|
Kurz nach Start der Dienste werden zwei Dateien angelegt:/var/log/ntp/ntp.log/tmp/ntpstats-ng-2017-01-29.json
|
Vergleichen wir die jeweils erste Zeile der beiden Dateien.
head -n 1 /var/log/ntp/ntp.log29 Jan 22:15:59 ntpd[19633]: ntpd [email protected] Thu Nov 24 08:57:19 UTC 2016 (1): Starting
head -n 1 /tmp/ntpstats-ng-2017-01-29.json{"path":"/var/log/ntp/ntp.log","@timestamp":"2017-01-29T22:16:14.805Z","@version":"1","host":"localhost","message":"29 Jan 22:15:59 ntpd[19633]: ntpd [email protected] Thu Nov 24 08:57:19 UTC 2016 (1): Starting","type":"syslog-ntp"}
|
Tip
|
Hier hilft uns der JSON-Kommandozeilenprozessor jq.
|
head -n 1 /tmp/ntpstats-ng-2017-01-29.json | jq{
"path": "/var/log/ntp/ntp.log",
"@timestamp": "2017-01-29T22:16:14.805Z",
"@version": "1",
"host": "localhost",
"message": "29 Jan 22:15:59 ntpd[19633]: ntpd [email protected] Thu Nov 24 08:57:19 UTC 2016 (1): Starting",
"type": "syslog-ntp"
}
Vergleiche
Die Felder path und type aus unserer Konfiguration finden wir sofort wieder.
In message ist der komplette Inhalt der Log-Zeile gelandet.
Hinzugekommen sind die Felder @timestamp, @version und host.
In host steht der Hostname des Logstash Host - dazu später mehr.[1]
Das Feld @version brauchen wir eigentlich nicht.[2]
|
Note
|
Datum und Uhrzeit sind in message und @timestamp verschieden!
|
Die Log-Zeile wurde am "29. Januar, 22:15:59" geschrieben - Jahr und Zeitzone fehlen.
Die Verarbeitung durch Logstash erfolgte am "29. Januar 2017, 22:16:14.805, UTC" - etwa 15 Sekunden später.
Das Format von @timestamp entspricht dem für die Weiterleitung an Elasticsearch benötigtem.
Wir wollen aber die Ereignisse in der exakten Log-Reihenfolge erhalten und später analysieren können.
Wenden wir dazu Logstash-Filter auf unseren Typ syslog-ntp an.
Filter
# /etc/logstash/conf.d/ntpstats-ng.conf
input {
# ...
}
filter {
if [type] == "syslog-ntp" {
grok {
match => { "message" => "%{MONTHDAY:msg_day} %{MONTH:msg_month} %{TIME:msg_time} %{SYSLOGPROG}: %{GREEDYDATA:message}" }
add_field => { "logstamp" => "%{msg_day} %{msg_month} %{msg_time}" }
}
}
}
output {
# ...
}
/etc/init.d/logstash stop
systemctl stop logstash.service
rm /tmp/ntpstats-ng-2017-01-29.json
/etc/init.d/logstash start
systemctl start logstash.service