Die Protokolle einer Java App an den Elastic Stack (ELK) senden

1. Überblick

In diesem kurzen Lernprogramm wird Schritt für Schritt beschrieben, wie Anwendungsprotokolle an den Elastic Stack (ELK) gesendet werden.

In einem Link:/tomcat-jmx-elastic-stack[früherer Artikel]haben wir uns darauf konzentriert, den Elastic Stack einzurichten und JMX-Daten darin zu senden.

2. Logback konfigurieren

Beginnen wir mit der Konfiguration von Logback, um App-Protokolle mithilfe von FileAppender in eine Datei zu schreiben:

<appender name="STASH" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logback/redditApp.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>logback/redditApp.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<root level="DEBUG">
    <appender-ref ref="STASH"/>
</root>

Beachten Sie, dass:

  • Wir führen Protokolle jedes Tages in einer separaten Datei, indem wir verwenden

RollingFileAppender mit TimeBasedRollingPolicy (mehr dazu Appender-Link:/Java-Logging-Rollendatei-Appender[hier]) ** Wir speichern alte Protokolle nur für eine Woche (7 Tage), indem Sie maxHistory einstellen.

bis 7

Beachten Sie auch, wie wir das LogstashEncoder verwenden, um die Kodierung in ein JSON-Format durchzuführen - was mit Logstash einfacher zu verwenden ist.

Um diesen Encoder verwenden zu können, müssen wir unserer pom.xml folgende Abhängigkeit hinzufügen:

<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.11</version>
</dependency>

Schließlich stellen wir sicher, dass die App über Berechtigungen zum Zugriff auf das Protokollierungsverzeichnis verfügt:

sudo chmod a+rwx/var/lib/tomcat8/logback

3. Logstash konfigurieren

Jetzt müssen wir Logstash so konfigurieren, dass Daten aus von unserer App erstellten Protokolldateien gelesen und an ElasticSearch gesendet werden.

Hier ist unsere Konfigurationsdatei logback.conf :

input {
    file {
        path => "/var/lib/tomcat8/logback/** .log"
        codec => "json"
        type => "logback"
    }
}

output {
    if[type]=="logback" {
         elasticsearch {
             hosts =>["localhost:9200"]             index => "logback-%{+YYYY.MM.dd}"
        }
    }
}

Beachten Sie, dass:

  • input file wird verwendet, da Logstash dieses Mal Protokolle aus der Protokollierung liest

Dateien ** path wird auf unser Protokollverzeichnis und alle Dateien mit .log gesetzt

Erweiterung wird bearbeitet ** index ist auf den neuen Index "logback -% \ {YYYY.MM.dd}" anstelle von gesetzt

Standardwert "logstash -% \ {JJJJ.MM.dd}"

Um Logstash mit neuer Konfiguration auszuführen, verwenden wir:

bin/logstash -f logback.conf

4. Logs mit Kibana visualisieren

Wir können unsere Logback-Daten jetzt im Index logback - ** sehen.

Wir erstellen eine neue Suche "Logback-Protokolle", um sicherzustellen, dass die Logback-Daten mithilfe der folgenden Abfrage getrennt werden:

type:logback

Schließlich können wir eine einfache Visualisierung unserer Logback-Daten erstellen:

  • Navigieren Sie zur Registerkarte "Visualisieren"

  • Wählen Sie "Vertikales Balkendiagramm"

  • Wählen Sie "Aus gespeicherter Suche".

  • Wählen Sie die soeben erstellte "Logback-Protokollsuche"

Stellen Sie für die Y-Achse sicher, Aggregation zu wählen:

Für die X-Achse wählen Sie:

  • Aggregation: Terms

  • Feld: level

Nach dem Ausführen der Visualisierung sollten mehrere Balken die Anzahl der Protokolle pro Ebene darstellen (DEBUG, INFO, ERROR, …​).

5. Fazit

In diesem Artikel haben wir die Grundlagen für die Einrichtung von Logstash in unserem System gelernt, um die erzeugten Protokolldaten in Elasticsearch zu übertragen - und diese Daten mithilfe von Kibana zu visualisieren.