Vortrag auf den Chemnitzer Linux Tagen 2014
Klaus Kruse / mail@klaus-kruse.de
Logs sind toll:
Viele Daemons produzieren viele Logs
Viele Server produzieren zu viele Logs
Fazit: Sammelstelle für Logmanagement und Auswertungen benötigt
Aktuelle Version 1.0.11 (Release: 16.02.2014)
Aktuelle Version 1.3.3
Konfiguration über Textdatei(en)
Teil des Elasticsearch-Projektes
Umfangreiche Plugin-Sammlung
Eigenes Buch (The Logstash Book)
Entstanden 2010 als persönliches Projekt zweier Mitarbeiter von Xing
Mittlerweile überführt in die TORCH GmbH in Hamburg
Hauptentwickler Lennart Koopmann und Kay Röpke
Minimales Setup besteht aus einem Graylog2-Server, Webinterface, MongoDB und Elasticsearch
Kommunikation zwischen Server-Daemon und Webinterface-Daemon über REST-Schnittstelle
Ausführlich & Erweiterbar: architecture high level overview
Alle Dienste auf einer Maschine
Webinterface als unprivilegierter User, Server als Root
Scale Out: Elasticsearch-Knoten auf separaten Maschinen (später mehr...)
Java Version 7 - Entweder Oracle JDK oder OpenJDK
Letzte Stable der MongoDB von www.mongodb.org
Exakt die von Graylog2 angegebene Version der ElasticSearch-Engine von www.elasticsearch.org
Aktuelle Version von graylog2.org/download
Solide Anleitung: Installing graylog2 server on *NIX systems
Leider keine paketierte Version oder Initskripte - Handarbeit ist angesagt...
cd /opt/graylog2-server-0.20.0-rc.2
java -jar graylog2-server.jar --debug
[...]
2014-02-13 23:14:29,770 INFO : org.graylog2.Main - Graylog2 up and running.
cd /opt/graylog2-web-interface
./bin/graylog2-web-interface
Play server process ID is 23226
Selbst ist der/die AdministratorIn:
Für graylog2-server reicht ein Wrapper um graylog2ctl
graylog2-webinterface etwas umfangreicher mit start-stop-daemon
(Debian)
User: admin
, Passwort in /etc/graylog2.conf
Umfangreiche Möglichkeiten und natürlich Regex
Zeigen Nachrichten nach festgelegten Filterregeln an
Ermöglicht "Views", d.h. Graphen aus Logmeldungen
Übersicht über die konfigurierten Quellen
Übersicht über Cluster und Konfiguration von Quellen
Neben Graylog2-Eigenentwicklung GELF (natürlich) auch Syslog-Streams
Graylog2 lauscht auf Syslog-Nachrichten von localhost
/etc/syslog-ng/conf.d/hello.conf
filter f_helloworld{level(info); facility(local0);}; destination d_helloworld{udp("127.0.0.1" port(514);}; log{ source(s_src); filter(f_helloworld); destination(d_helloworld);};
/etc/init.d/syslog-ng restart
reload
hat ein paar mal keine Auswirkungen gehabt...
logger --priority local0.info "Hello World"
Fragen bis hierhin?
Was meinen wir mit "Syslog"?
BSD Syslog nach RFC3164
<PRIORITY> TIMESTAMP HOSTNAME APPLICATION: MESSAGE
Feb 18 18:02:36 django syslog-ng[23148]: Configuration reload request received, reloading configuration;
IETF Syslog nach RFC5424
<PRIORITY>VERSION ISOTIMESTAMP HOSTNAME APPLICATION PID MESSAGEID STRUCTURED-DATA MSG
<45>1 2014-02-19T16:00:27+01:00 django syslog-ng 23148 - [meta sequenceId="2"] Configuration reload request received, reloading configuration;
IETF Syslog ist besser weil klarer definiert
Leider kann Graylog2 nur BSD Syslog
Syslog-ng kann beides und noch viel mehr
Weiterentwicklung des alten Syslog-Daemons und mittlerweile Standard in vielen Distributionen
Flexible aber zuerst nicht vollständig eingängige Konfiguration (siehe hello.conf)
Kann alles lesen und ggf. formatiert wieder ausgeben
KISS: Anwendungen loggen und nur Syslog-ng kümmert sich um die Sammlung und Verteilung
Einfach: logger
statt Logfile
CustomLog "|/usr/bin/logger --priority local7.info --tag Apache" combined
destination d_graylog{ udp("graylog" port(514) ); };
filter f_apache{ facility(local7); "$PROGRAM" == "Apache"; };
log{ source(s_src); filter(f_apache); destination(d_graylog); };
War doch easy!
Keine Trennung der Nachrichtenteile
Umständliche Suche oder Sortierung
Wir brauchen ein Logformat das sich einfach extrahieren lässt
Einfacher wird es mit Logs im Key=Value Stil
LogFormat "REMOTE=%h IDENT=%l USER=%u \
REQUEST_TIME=%t REQUEST_METHOD=%m REQUEST=%U%q \
STATUS=%>s BYTES=%O REFERER=\"%{Referer}i\" \
USER_AGENT=\"%{User-Agent}i\" HOST=\"%{Host}i\"" graylog-combined
System → Inputs → Action → Manage Extractors
Die letzte Nachricht eines Inputs dient als Vorlage
Regelwerk: Java Class Pattern
...macht jetzt aber Sinn
Natürlich nicht alle Dienste auf einer Maschine
Trennung in:
Einstieg: Acht (virtuelle) Maschinen
FIFO-Daemon für Logs
Nimmt die Lognachrichten entgegen und Graylog2-Server holt diese ab
Abfederung von Ausfällen
Schutz vor Überlastung
Graphische Verwaltung und Statusbericht des Elasticsearch-Clusters
Tolle Software aber auch komplexe Infrastruktur
Fragen?
Danke für die Aufmerksamkeit und viel Spaß bei den CLT 2014