Mit Spring Boot bei Graylog anmelden

1. Einleitung

Graylog ist ein Protokollaggregationsdienst. Einfach ausgedrückt, kann es Millionen von Protokollnachrichten aus mehreren Quellen sammeln und auf einer einzigen Oberfläche anzeigen.

Darüber hinaus bietet es eine Reihe weiterer Funktionen wie Echtzeitwarnungen, Dashboards mit Grafiken und Diagrammen und vieles mehr.

In diesem Tutorial erfahren Sie, wie Sie einen Graylog-Server einrichten und Protokollnachrichten von einer Spring Boot-Anwendung an ihn senden.

2. Graylog einrichten

Es gibt verschiedene Möglichkeiten, Graylog zu installieren und auszuführen. In diesem Tutorial werden die beiden schnellsten Möglichkeiten erläutert: Docker und Amazon Web Services.

2.1. Docker

Mit den folgenden Befehlen werden alle erforderlichen Docker-Images heruntergeladen und für jeden Dienst ein Container gestartet:

$ docker run --name mongo -d mongo:3 $ docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e ES_JAVA_OPTS="-Xms2g -Xmx4g" \ -e "discovery.type=single-node" -e "xpack.security.enabled=false" \ -e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1 \ -d docker.elastic.co/elasticsearch/elasticsearch:5.6.11 $ docker run --name graylog --link mongo --link elasticsearch \ -p 9000:9000 -p 12201:12201 -p 514:514 -p 5555:5555 \ -e GRAYLOG_WEB_ENDPOINT_URI="//127.0.0.1:9000/api" \ -d graylog/graylog:2.4.6-1

Das Graylog-Dashboard ist jetzt unter der URL // localhost: 9000 / verfügbar. Der Standardbenutzername und das Standardkennwort sind beide admin .

Das Docker-Setup ist zwar am einfachsten, erfordert jedoch eine erhebliche Menge an Speicher. Es funktioniert auch nicht unter Docker für Mac und ist daher möglicherweise nicht für alle Plattformen geeignet.

2.2. Amazon Web Services

Die nächst einfachere Option zum Einrichten von Graylog zum Testen ist Amazon Web Services. Graylog bietet eine offizielle AMI, die alle erforderlichen Abhängigkeiten enthält , obwohl nach der Installation einige zusätzliche Konfigurationen erforderlich sind.

Wir können schnell eine EC2-Instanz mit dem Graylog AMI bereitstellen, indem wir hier klicken und eine Region auswählen. Graylog empfiehlt die Verwendung einer Instanz mit mindestens 4 GB Speicher .

Nachdem die Instanz gestartet wurde, müssen wir SSH auf dem Host durchführen und einige Änderungen vornehmen. Die folgenden Befehle konfigurieren den Graylog-Dienst für uns:

$ sudo graylog-ctl enforce-ssl $ sudo graylog-ctl set-external-ip //:443/api/ $ sudo graylog-ctl reconfigure

Wir müssen auch die Sicherheitsgruppe aktualisieren, die mit der EC2-Instanz erstellt wurde, um den Netzwerkverkehr an bestimmten Ports zuzulassen. Die folgende Grafik zeigt die Ports und Protokolle, die aktiviert werden müssen:

Das Graylog-Dashboard ist jetzt über die URL /// verfügbar. Der Standardbenutzername und das Standardkennwort sind beide admin .

2.3. Andere Graylog-Installationen

Neben Docker und AWS gibt es auch Graylog-Pakete für verschiedene Betriebssysteme. Mit diesem Ansatz müssen wir auch einen ElasticSearch- und einen MongoDB-Dienst einrichten .

Aus diesem Grund sind Docker und AWS viel einfacher einzurichten, insbesondere für Entwicklungs- und Testzwecke.

3. Senden von Protokollnachrichten

Wenn Graylog aktiv ist, müssen wir jetzt unsere Spring Boot-Anwendung so konfigurieren, dass Protokollnachrichten an den Graylog-Server gesendet werden.

Jedes Java-Protokollierungsframework kann das Senden von Nachrichten an einen Graylog-Server mithilfe des GELF-Protokolls unterstützen.

3.1. Log4J

Derzeit ist Log4J das einzige offiziell unterstützte Protokollierungsframework. Graylog bietet einen Appender, der in Maven Central verfügbar ist.

Wir können es aktivieren, indem wir jeder pom.xml- Datei die folgende Maven-Abhängigkeit hinzufügen :

 org.graylog2 gelfj 1.1.16 

Wir müssen das Protokollierungsstartermodul auch überall dort ausschließen, wo wir ein Spring Boot-Startermodul verwenden:

 org.springframework.boot spring-boot-starter-web   org.springframework.boot spring-boot-starter-logging   

Jetzt können wir einen neuen Appender in unserer Datei log4j.xml definieren :

Dadurch werden alle Protokollnachrichten mit INFO-Level oder höher so konfiguriert, dass sie an den Graylog-Appender gesendet werden, der wiederum die Protokollnachricht an den Graylog-Server sendet.

3.2. Andere Protokollierungs-Frameworks

Der Graylog-Marktplatz verfügt über zusätzliche Bibliotheken, die eine Vielzahl anderer Protokollierungsframeworks wie Logback, Log4J2 und mehr unterstützen. Beachten Sie nur, dass diese Bibliotheken nicht von Graylog verwaltet werden . Einige von ihnen werden aufgegeben, andere haben wenig oder keine Dokumentation.

Vorsicht ist geboten, wenn Sie sich auf diese Bibliotheken von Drittanbietern verlassen.

3.3. Graylog Collector Sidecar

Eine weitere Option für die Holzsammlung ist der Graylog Collector Sidecar. Das Sidecar ist ein Prozess, der entlang eines Dateisammlers ausgeführt wird und den Inhalt der Protokolldatei an einen Graylog-Server sendet.

Der Sidecar ist eine großartige Option für Anwendungen, bei denen das Ändern von Protokollkonfigurationsdateien nicht möglich ist. Und da Protokolldateien direkt von der Festplatte gelesen werden, können auch Protokollnachrichten von jeder Plattform und Programmiersprache integriert werden .

4. Anzeigen von Nachrichten in Graylog

Wir können das Graylog-Dashboard verwenden, um die erfolgreiche Zustellung unserer Protokollnachrichten zu bestätigen. Verwenden der Filterquelle : localhost zeigt die Protokollnachrichten aus unserer obigen log4j- Beispielkonfiguration an :

5. Schlussfolgerung

Graylog ist nur einer von vielen Protokollaggregationsdiensten. Es kann schnell Millionen von Protokollnachrichten durchsuchen, Protokolldaten in Echtzeit visualisieren und Warnungen senden, wenn bestimmte Bedingungen erfüllt sind.

Die Integration von Graylog in eine Spring Boot-Anwendung erfordert nur wenige Konfigurationszeilen und keinen neuen Code.

Codebeispiele finden Sie wie immer auf GitHub.