Anmeldung bei Graylog mit Spring Boot

Protokollierung in Graylog mit Spring Boot

1. Einführung

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 Diagrammen 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="http://127.0.0.1:9000/api" \
    -d graylog/graylog:2.4.6-1

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

Das Docker-Setup ist zwar das einfachste, 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 provides an official AMI that includes all the required dependencies, obwohl nach der Installation eine zusätzliche Konfiguration erforderlich ist.

Wir können schnell eine EC2-Instanz mit dem Graylog AMI bereitstellen, indem wir aufhere klicken und eine Region auswählen. Graylog recommends using an instance with at least 4GB memory.

Nachdem die Instanz gestartet wurde, müssen wir SSH auf dem Host ausfü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 https://: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:

image

Das Graylog-Dashboard ist jetzt unter der URLhttps://<EC2 PUBLIC IP>/ verfügbar. Der Standardbenutzername und das Standardkennwort sind beideadmin.

2.3. Andere Graylog-Installationen

Neben Docker und AWS gibt es auchGraylog packagesfür verschiedene Betriebssysteme. With this approach, we also have to set up an ElasticSearch and MongoDB service.

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

3. Senden von Protokollnachrichten

Nachdem Graylog ausgeführt wurde, 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 fürMaven central verfügbar ist.

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


    org.graylog2
    gelfj
    1.1.16

Wir müssen das Startmodul für die Protokollierung auch überall dort ausschließen, wo wir ein Spring Boot-Startmodul verwenden:


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

Jetzt können wir einen neuen Appender in unsererlog4j.xml-Datei definieren:


    
    
    
    
    
    
    
    

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

3.2. Andere Protokollierungsframeworks

DasGraylog marketplace verfügt über zusätzliche Bibliotheken, die eine Vielzahl anderer Protokollierungsframeworks wie Logback, Log4J2 und mehr unterstützen. Just beware that these libraries are not maintained by Graylog. Einige von ihnen sind aufgegeben, andere haben nur wenige oder gar keine Unterlagen.

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

3.3. Graylog Collector Beiwagen

Eine weitere Option für die Protokollsammlung istGraylog 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 weil es Protokolldateien direkt von der Festplatte liest,it can also be used to integrate log messages from any platform and programming language.

4. Anzeigen von Nachrichten in Graylog

Wir können das Graylog-Dashboard verwenden, um die erfolgreiche Zustellung unserer Protokollnachrichten zu bestätigen. Wenn Sie den Filtersource:localhost verwenden, werden die Protokollmeldungen aus der obigen Konfiguration von Beispiellog4jangezeigt:

image

5. Fazit

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 können wie immerfound on GitHub sein.