Erstellen Sie einen ELK-Stack unter Mac OS X und geben Sie das JAVA-Protokoll an Elasticsearch aus (log4j2).

Hallo allerseits, lange nicht gesehen.

ELK Stapelkonstruktion

Vorbereitung

Homebrew und JAVA JDK sind erforderlich, um ELK zu installieren. Wenn Sie es nicht installiert haben, setzen Sie es bitte zuerst ein. Homebrew Unter meinem Arbeitsweg

$ mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew

Java SDK Weitere Informationen finden Sie unter Oracle ** Java SE-Downloads **. Ich habe JDK 8 für alle Fälle gewählt.

ELK

Was ist ELK?

ELK-Stack ist ein allgemeiner Begriff für die drei Produkte von Elasticsearch: Elasticsearch (Analyse) + Logstash (Sammlung) + Kibana (Visualisierung). (Wenn es sich tatsächlich bewegt, bewegt es sich entsprechend dem LEK-Fluss) Elasticsearch Elasticsearch ist eine von Elastic entwickelte Open-Source-Volltextsuchmaschine. Sie können schnell ein Dokument mit dem gewünschten Wort aus einer großen Anzahl von Dokumenten extrahieren.

Da Elasticsearch keine relationale Datenbank ist, können Sie keine SQL-Anweisungen verwenden. Verwenden Sie stattdessen die RESTful-Schnittstelle.

Dieses Mal wird Elasticsearch 6.2.4 verwendet.

Installation

$ brew install elasticsearch

Richten Sie einen Host ein

Zuerst finden Sie elasticsearch.yml.

$ brew info elasticssearch

Ich denke, dass solche Informationen herauskommen werden.

...(Blah Blah Blah)...
Data:    /usr/local/var/lib/elasticsearch/elasticsearch_JP23417/
Logs:    /usr/local/var/log/elasticsearch/elasticsearch_JP23417.log
Plugins: /usr/local/var/elasticsearch/plugins/
Config:  /usr/local/etc/elasticsearch/
...(Blah Blah Blah)...

elasticsearch.yml befindet sich unter dem Pfad in Config. Öffnen Sie es und ändern Sie network.host in Ihre tatsächliche IP-Adresse. Dieses Mal werde ich es in einer lokalen Umgebung erstellen, also habe ich es auskommentiert und so eingestellt.

network.host: localhost

Funktionsprüfung

Starten Sie Elasticsearch mit "Brew Services Elasticsearch Start". Elasticsearch wird standardmäßig auf Port 9200 ausgeführt. Wenn Sie also http: // localhost: 9200 besuchen, werden diese Informationen angezeigt.

{
  "name" : "ry1EXQC",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ZMYVLV-eR-G5hBrQ6QmSGA",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Logstash Logstash ist eine Open-Source-Pipeline für die serverseitige Datenverarbeitung. Erfasst gleichzeitig Daten aus einer Vielzahl von Quellen, konvertiert sie und sendet sie an Ihren bevorzugten Tresor (Stash). Das empfohlene Versteck ist natürlich die elastische Suche.

Dieses Mal wird Logstash 6.2.4 verwendet.

Installieren und starten

$ brew install logstash
$ brew services start logstash

Logstash funktioniert tatsächlich in Verbindung mit der Konfiguration. Sie müssen für jede Szene eine andere Konfiguration platzieren. Sie sollten in der Lage sein, Kibana vorerst damit zu bewegen, daher werde ich später ausführlich darauf eingehen.

Kibana Kibana ist ein einfaches Visualisierungstool für Elasticsearch-Daten.

Dieses Mal werde ich Kibana 6.2.4 verwenden.

Installation

$ brew install kibana

Stellen Sie den Port und die elastische Suche ein

Zuerst finden Sie kibana.yml.

$ brew info kibana

Ich denke, dass solche Informationen herauskommen werden.

...(Blah Blah Blah)...
Config: /usr/local/etc/kibana/
...(Blah Blah Blah)...

kibana.yml befindet sich unter dem in Config beschriebenen Pfad. Öffnen Sie es und ändern Sie "server.port" und "elasticsearch.url" in die tatsächlich verwendeten. Dieses Mal habe ich es mit den Standardeinstellungen so eingestellt.

...(Blah Blah Blah)...
server.port: 5601 

...(Blah Blah Blah)...

elasticsearch.url: "http://localhost:9200”
...(Blah Blah Blah)...

Bestätigung

Wenn Sie dies tun können, sollten Sie es unter http: // localhost: 5601 / status überprüfen können. Ein Bildschirm wie dieser wird angezeigt. スクリーンショット 2018-09-12 16.56.32.png

Protokollausgabe von JAVA (log4j2)

Dieses Mal erstellen wir ein Tool zum Senden von Protokollen per TCP an Elasticsearch.

Erstellen Sie ein Maven-Projekt

Ich bin sicher, dass eine IDE automatisch ein Maven-Projekt generiert, aber bitte verwenden Sie es. Es ist kein Problem, wenn es auf diese Weise generiert wird. Als Referenz. スクリーンショット 2018-09-12 17.07.29.png Der Paketname ist diesmal log4j2.local (eigentlich ist alles in Ordnung).

Platzierung der Maven-Bibliothek

Mit anderen Worten, es ist der Inhalt von pom.xml. Fügen Sie dem Tag "Abhängigkeiten" Folgendes hinzu.

pom.xml


<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.8.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
</dependencies>

Platzierung von Log4j2

Mit anderen Worten, es ist der Inhalt von log4j2.xml. Log4j2 entscheidet, wohin das Protokoll entsprechend gesendet werden soll. Dieses Mal wird es natürlich über Logstash an Elasticsearch gesendet, aber angesichts der Einfachheit des Debuggens habe ich es vorerst an Console ausgegeben.

log4j2.xml


<configuration status="OFF">
    <appenders>
        <Socket name="Logstash" host="localhost" port="9601" protocol="TCP">
            <PatternLayout pattern="%d|%t|%p|%c|%L|%m%n" />
        </Socket>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d|%t|%p|%c|%L|%m%n" />
        </Console>
    </appenders>
    <loggers>
        <root level="all">
            <AppenderRef ref="Logstash"/>
            <appender-ref ref="Console"/>
        </root>
    </loggers>
</configuration>

Wenn Sie personalisieren möchten, lesen Sie bitte ** Diese Seite **.

Hauptklasse

Dies ist das Verhalten zum Ausgeben des Protokolls.

Main.java


package log4j2.local;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;


public class Main {
    private static Logger logger = LogManager.getLogger("test");

    public static void main(String[] args) {
        logger.error("Fehlermeldung");
    }
}

Wenn Sie dies tun, wird in der Konsole ein Protokoll wie dieses angezeigt. (Natürlich wird es nicht in Elasticsearch gespeichert, da es noch nicht mit Logstash verbunden ist.)

2018-09-12 12:55:13,962|main|ERROR|test|13|Fehlermeldung

Logstash platzieren

Logstash-Konfiguration

Sie können einen beliebigen Pfad verwenden und logstash-tcp.conf erstellen. (Da es sich um TCP-Kommunikation handelt, habe ich ihm nur diesen Namen gegeben.) Logstash kann standardmäßig alle Ports 9600-9700 verwenden, daher verwenden wir dieses Mal Port 9601. (Stellen Sie sicher, dass Sie denselben Port ** wie das Tag von log4j2.xml verwenden.)

logstash-tcp.conf


input {
    tcp {
        host => "localhost"
        port => "9601"
        mode => "server"
        type => "eslocallogger"
    }
}

filter {
    mutate{
        split => ["message","|"]
        add_field =>   {
            "Datetime" => "%{[message][0]}"
        }
        add_field =>   {
            "Classname" => "%{[message][1]}"
        }
        add_field =>   {
            "Level" => "%{[message][2]}"
        }
        add_field =>   {
            "Logger" => "%{[message][3]}"
        }
        add_field =>   {
            "Message" => "%{[message][5]}"
        }
    }
}
output {
    stdout {
        codec => rubydebug
    }
    elasticsearch {
        hosts => "localhost:9200"
    }
}

Ich habe Filter verwendet, um die Schemas hier zu trennen, aber die Standardspalten werden automatisch analysiert, auch wenn Sie sie nicht verwenden. (Hier werden die Fehlermeldungen, die in Logstash eingehen, durch | getrennt.)

Verbinden Sie Logstash mit der Konfiguration und starten Sie es neu

$ brew services stop logstash
$ logstash -f ./logstash-tcp.conf --experimental-java-execution

Mit dem Flag "--experimental-java-execute" wird es auf der JAVA-Engine ausgeführt. Weitere Informationen finden Sie unter ** Lernen Sie die neue Logstash Java Execution Engine kennen **. Dies erhöht sicherlich den Durchsatz erheblich.

Lass uns rennen

Console

2018-09-12 18:05:39,737|main|ERROR|test|13|Fehlermeldung

Logstash Console

[2018-09-12T18:05:40,464][DEBUG][logstash.pipeline        ] Pushing flush onto pipeline {:pipeline_id=>"main", :thread=>"#<Thread:0x5caa3237 sleep>"}
{
         "Level" => "ERROR",
    "@timestamp" => 2018-09-12T09:05:39.847Z,
        "Logger" => "test",
          "port" => 60614,
       "message" => [
        [0] "2018-09-12 18:05:39,737",
        [1] "main",
        [2] "ERROR",
        [3] "test",
        [4] "13",
        [5] "Fehlermeldung"
    ],
          "type" => "eslocallogger",
       "Message" => "Fehlermeldung",
      "Datetime" => "2018-09-12 18:05:39,737",
          "host" => "localhost",
      "@version" => "1",
     "Classname" => "main"
}

Kibana Wenn Sie zum Bildschirm ** Management ** von Kibana gehen und neu laden, sollte ein Bildschirm wie dieser angezeigt werden. スクリーンショット 2018-09-12 18.08.52.png Gehen Sie zu "Nächster Schritt", setzen Sie "Filter" auf "@ Zeitstempel" und klicken Sie auf "Indexmuster erstellen", um den Index zu visualisieren. スクリーンショット 2018-09-12 18.11.16.png Wenn Sie den Bildschirm "Entdecken" aufrufen, können Sie die Daten auf der Zeitachse sehen. スクリーンショット 2018-09-12 18.11.25.png Weitere Informationen finden Sie unter ** Verwendung von Kibana **.

Referenzquelle

Installing the ELK Stack on Mac OS X ElasticSearch + Logstash + Kibana + log4j2 Official 6.1.1 Edition Anguist Arrangement Verwenden Sie wie LogStash Filter Elastic Stack

Recommended Posts

Erstellen Sie einen ELK-Stack unter Mac OS X und geben Sie das JAVA-Protokoll an Elasticsearch aus (log4j2).
Protokollausgabe in Datei in Java
Aktivieren Sie die Protokollausgabe sowohl für Dateien als auch für die Konsole mit log4j in Eclipse.
So überprüfen Sie, ob Java auf einem Mac installiert ist
[Java] Wie man Dateien ausgibt und schreibt!
So wechseln Sie Java-Versionen auf dem Mac
Erstellen Sie eine Java-Entwicklungsumgebung auf dem Mac
Was tun, wenn Sie Java für OS X unter macOS installiert haben?
Versuchen Sie, eine Java 8-Umgebung unter Amazon Linux2 zu erstellen
Installieren Sie Java und Android-SDK auf dem Mac mit Homebrew
Erstellen Sie eine Java-Umgebung und geben Sie Hallo Welt aus [Anfänger]
Erstellen Sie Java x Spring x VSCode x Gradle auf Docker (1)
Erstellen Sie eine Java-Entwicklungsumgebung mit VS Code auf dem Mac
Installieren Sie Java und Maven mit Brew auf einem neuen Mac
Ich möchte die Protokollausgabe unter Android vereinfachen