Verwenden Sie Docker Compose, um ELK schnell bereitzustellen (getestet und effektiv)

Verwenden Sie Docker Compose, um ELK schnell bereitzustellen (getestet und effektiv)

1. Übersicht

1.1 Definition

Für Protokolle großen Umfangs ist eine zentrale Verwaltung erforderlich. ELK bietet eine umfassende Palette an Lösungen, bei denen es sich ausschließlich um Open-Source-Software handelt. Sie arbeiten perfekt zusammen und erfüllen effizient die Anforderungen vieler Anwendungen. ELK ist die Abkürzung für drei technische Produkte, darunter Elasticsearch, Logstash und Kibana, die im Projekt als Protokoll-Framework verwendet werden können.

1.2 Funktionsbeschreibung

Elasticsearch ist eine verteilte Open-Source-Suchmaschine, die drei Hauptfunktionen bietet: Sammeln, Analysieren und Speichern von Daten.

Logstash ist in erster Linie ein Tool zum Sammeln, Analysieren und Filtern von Protokollen und unterstützt eine Vielzahl von Methoden zur Datenerfassung.

Kibana ist ebenfalls ein Open-Source- und kostenloses Tool. Kibana kann eine protokollanalysefreundliche Weboberfläche für Logstash und ElasticSearch bereitstellen, die beim Aggregieren, Analysieren und Durchsuchen wichtiger Datenprotokolle helfen kann.

Ihre Funktionen sind unten aufgeführt:

Einfach ausgedrückt erstellen Anwendungsdienste Protokolle, die über Logger generiert und ausgegeben werden. Logstash empfängt von Anwendungsdiensten generierte Protokolle über http. Elasticsearch bietet eine Volltextsuchfunktion für Protokolle und Kibana bietet eine grafische Benutzeroberfläche für Elasticsearch.

2. ELK bereitstellen

Dieser Artikel wird unter Linux bereitgestellt und verwendet /opt als Stammverzeichnis.

2.1 Verzeichnisse und Dateien erstellen

1) Erstellen Sie ein Docker-Elk-Verzeichnis und erstellen Sie Dateien und andere Verzeichnisse in diesem Verzeichnis

mkdir /opt/docker_elk

2) Erstellen Sie eine Logstash-Konfigurationsdatei

mkdir /opt/docker_elk/logstash
berühren Sie /opt/docker_elk/logstash/logstash.conf

3) Konfigurieren Sie logstash.conf. Der Inhalt ist wie folgt

Eingabe {
  tcp {
    Modus => "Server"
    Host => "0.0.0.0"
    Port => 4560
    Codec => json
  }
}
Ausgabe {
  elastische Suche
    Hosts => "es:9200"
    index => "logstash-%{+JJJJ.MM.tt}"
  }
}

Der Port für Eingabeprotokolle ist hier mit 4560 angegeben, daher muss der nach außen sichtbare Port ebenfalls 4560 sein.

4) Erstellen Sie eine docker-compose.yml-Datei

mkdir /opt/docker_elk/docker-compose.yml

2.2 Docker-Compose konfigurieren und starten

Öffnen Sie docker-compose.yml.

cd /opt/docker_elk
vi docker_compose.yml

Der Konfigurationsinhalt ist wie folgt:

Version: '3.7'
Leistungen:
  elastische Suche:
    Bild: elasticsearch:7.6.2
    Containername: Elasticsearch
    privilegiert: wahr
    Benutzer: root
    Umfeld:
      #Setzen Sie den Clusternamen auf elasticsearch
      - cluster.name=elasticsearch 
      #Starten Sie im Einzelknotenmodus - discovery.type=single-node 
      #Legen Sie die JVM-Speichergröße fest - ES_JAVA_OPTS=-Xms512m -Xmx512m 
    Bände:
      – /opt/docker_elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      – /opt/docker_elk/elasticsearch/data:/usr/share/elasticsearch/data
    Häfen:
      9200:9200
      9300:9300

  Protokollspeicher:
    Bild: logstash:7.6.2
    Containername: Logstash
    Häfen:
       -4560:4560
    privilegiert: wahr
    Umfeld:
      - TZ=Asien/Shanghai
    Bände:
      #Mounten Sie die Logstash-Konfigurationsdatei - /opt/docker_elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf 
    hängt ab von:
      - elastische Suche 
    Links:
      #Sie können den es-Domänennamen verwenden, um auf den Elasticsearch-Dienst zuzugreifen – elasticsearch:es 
    
  kibana:
    Bild: kibana:7.6.2
    Containername: Kibana
    Häfen:
        -5601:5601
    privilegiert: wahr
    Links:
      #Sie können den es-Domänennamen verwenden, um auf den Elasticsearch-Dienst zuzugreifen – elasticsearch:es 
    hängt ab von:
      - elastische Suche 
    Umfeld:
      #Legen Sie die Adresse für den Zugriff auf Elasticsearch fest - elasticsearch.hosts=http://es:9200

Wenn Sie hier „privilegiert“ auf „true“ setzen, erhalten Sie für diesen Container Root-Berechtigungen. Dann starten Sie

docker-compose up -d

Wenn Elasticsearch beim Start einen Fehler meldet, der besagt, dass für die Dateien unter /usr/share/elasticsearch/data keine Berechtigungen vorliegen, müssen Sie dem Hostcomputer Lese- und Schreibberechtigungen erteilen.

chmod 777 /opt/docker_elk/elasticsearch/data

Wenn beim Start ein Fehler auftritt, müssen Sie den Container herunterfahren und löschen, bevor Sie ihn neu starten. Deaktivieren des Löschbefehls:

Docker-Compose nach unten

2.3 Kibana öffnen

1) Greifen Sie unter http://192.168.0.150:5601 auf die Kibana-Weboberfläche zu. Klicken Sie links auf „Einstellungen“, um die Verwaltungsoberfläche aufzurufen

2) Klicken Sie nach dem Klicken auf Indexmuster auf Index erstellen

3) Klicken Sie auf „Index erstellen“.

4) Erstellen Sie einen Index mit dem Namen logstash-*.

5) Wählen Sie dann im nächsten Schritt den Filter @timestamp aus

6) Klicken Sie nach Abschluss der Erstellung auf „Erkennen“ und wählen Sie den gerade erstellten Index aus.

3. Protokolle sammeln

Dieser Artikel verwendet die SpringBoot-Architektur, um Protokollinformationen in Logstash aufzuzeichnen.

3.1 Umweltvorbereitung

Erstellen Sie ein neues Springboot-Projekt und importieren Sie Web-Abhängigkeiten

<Abhängigkeit>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</Abhängigkeit>

Darüber hinaus müssen Sie die Logstash-Abhängigkeiten importieren:

<!--Logstash integrieren-->
<Abhängigkeit>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</Abhängigkeit>

3.2 Protokollieren mit logback

Logback ist das integrierte Protokoll von SpringBoot, das verwendet werden kann, solange die Web-Abhängigkeit importiert wird.

1) Erstellen Sie eine neue Testklasse und Testmethode unter dem Testpaket

importiere org.apache.logging.log4j.LogManager;
importiere org.apache.logging.log4j.Logger;
importiere org.junit.jupiter.api.Test;
importiere org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
öffentliche Klasse AppTest {

    //Protokollobjekt erstellen Logger logger = LogManager.getLogger(this.getClass());

    @Prüfen
    öffentliche Leere test1() {
        logger.info("Logback-Loginformationen kommen");
        logger.error("Fehlermeldung vom Logback kommt");
    }
}

2) Erstellen Sie eine neue logback-spring.xml im gewünschten Verzeichnis

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Konfiguration>
<Konfiguration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
    <!--Anwendungsname-->
    <Eigenschaftsname="APP_NAME" Wert="springboot-logback-elk-demo"/>
    <!--Pfad zum Speichern der Protokolldatei-->
    <Eigenschaftsname="LOG_FILE_PATH" Wert="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
    <contextName>${APP_NAME}</contextName>
    <!--Täglich Protokolle im Datei-Appender aufzeichnen-->
    <appender name="DATEI" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy-Klasse="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <Encoder>
            <Muster>${FILE_LOG_PATTERN}</Muster>
        </Encoder>
    </appender>
    <!--Ausgabe an Logstash-Appender-->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--Zugänglicher Port für die Logstash-Protokollsammlung-->
        <Ziel>192.168.86.128:4560</Ziel>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>
    <root-Ebene="INFO">
        <appender-ref ref="KONSOLE"/>
        <appender-ref ref="DATEI"/>
        <appender-ref ref="LOGSTASH"/>
    </Wurzel>
</Konfiguration>

3) Starten Sie die Testmethode und zeigen Sie die Protokollinformationen von Kibana an

Beim Anzeigen von Informationen wird empfohlen, „Nachrichten“-Informationen in den verfügbaren Feldern auf der linken Seite herauszufiltern. Das Feld „Threadname“ ist optional. Auch auf der linken Seite sind die gefilterten Felder zu sehen, auf der rechten Seite sind die Informationen übersichtlicher.

Es ist zu beachten, dass in diesen Protokollen die Zeit der Erstellungszeitpunkt ist, zu dem Logstash das Protokoll sammelt, und nicht die Aufzeichnungszeit des Originalprotokolls.

3.3 Protokollierung mit log4j2

Um log4j2 zu verwenden, müssen Sie das mit SpringBoot gelieferte Protokoll ausschließen.

1) Logback- und Importabhängigkeiten ausschließen

<Abhängigkeit>
    <groupId>org.springframework.boot</groupId>
    <artifactId>Spring-Boot-Starter</artifactId>
    <Ausschlüsse>
        <!-- Wenn Sie log4j-Protokolle einführen, müssen Sie das Standard-Logback entfernen -->
        <Ausschluss>
            <groupId>org.springframework.boot</groupId>
            <artifactId>Spring-Boot-Starter-Protokollierung</artifactId>
        </Ausschluss>
    </Ausschlüsse>
</Abhängigkeit>

<!-- Protokollverwaltung log4j2 -->
<Abhängigkeit>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>2.1.0.RELEASE</version>
</Abhängigkeit>

2) Erstellen Sie eine neue log4j2.xml im Ressourcenverzeichnis

<?xml version="1.0" encoding="UTF-8"?>

<Konfigurationsstatus="info">
    <Eigenschaften>
        <!-- Geben Sie das Verzeichnis an, in dem die Protokolldateien gespeichert sind -->
        <Eigenschaftsname="LOG_HOME">E:\logs</Eigenschaft>
        <Eigenschaftsname="LOG_PATTERN"
                  Wert="%date{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread][%class{36}:%line] - %msg%n"></Eigenschaft>
    </Eigenschaften>

    <Anhänge>
        <!--Konfiguration der Ausgabekonsole-->
        <Konsolenname="Konsole" Ziel="SYSTEM_OUT">
            <!--Die Konsole gibt nur Informationen der Ebene und höher aus (onMatch) und lehnt andere Informationen direkt ab (onMismatch)-->
            <ThresholdFilter level="info" onMatch="AKZEPTIEREN" onMismatch="ABLEHNEN"/>
            <!-- Ausgabeprotokollformat -->
            <PatternLayout-Muster="${LOG_PATTERN}"/>
        </Konsole>

        <!--Dies ist die Konfiguration für die Ausgabe von Protokollen in Dateien. Jedes Mal, wenn die Größe die Größe überschreitet, werden die Protokolle dieser Größe automatisch in dem von Jahr-Monat erstellten Ordner gespeichert und als Archive komprimiert. -->
        <RollingFile name="RollingFile" fileName="${LOG_HOME}\app_${date:yyyy-MM-dd}.log"
                     Dateimuster="${LOG_HOME}\${date:yyyy-MM}\app_%d{yyyy-MM-dd}_%i.log">
            <ThresholdFilter level="info" onMatch="AKZEPTIEREN" onMismatch="ABLEHNEN"/>
            <!-- Ausgabeprotokollformat -->
            <PatternLayout-Muster="${LOG_PATTERN}"/>
            <!-- Größe der Protokolldatei -->
            <SizeBasedTriggeringPolicy Größe="20MB"/>
            <!-- Maximale Anzahl der aufzubewahrenden Dateien -->
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>

        <!--Ausgabe an den Logstash-Appender-->
        <Socketname="Socket" Host="192.168.86.128" Port="4560" Protokoll="TCP">
            <!--Ausgabe im Protokollformat nach Logstash-->
            <PatternLayout-Muster="${LOG_PATTERN}"/>
        </Socket>
    </Anhänge>

    <!--Dann definieren Sie Logger. Appender wird nur wirksam, wenn Logger definiert und eingeführt ist. Die Ebene in Root konfiguriert die Protokollebene, und andere Ebenen können konfiguriert werden -->
    <Logger>
        <Root-Ebene="info">
            <AppenderRef ref="Konsole"/>
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="Socket"/>
        </Wurzel>
    </Logger>

</Konfiguration>

Der rote Hauptteil oben muss die IP-Adresse des Logstash-Dienstes und den Port für die Protokollaufzeichnung angeben.

3) Erstellen Sie eine neue Testmethode in der Testklasse

importiere org.apache.logging.log4j.LogManager;
importiere org.apache.logging.log4j.Logger;
importiere org.junit.jupiter.api.Test;
importiere org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
öffentliche Klasse AppTest {

    //Protokollobjekt erstellen Logger logger = LogManager.getLogger(this.getClass());

    ...

    @Prüfen
    öffentliche Leere test2() {
        logger.info("Ich bin die Protokollinformationen von log4j2");
        logger.error("Ich bin die Fehlermeldung von log4j2");
    }
}

4) Starten Sie die Testmethode und zeigen Sie die Protokollinformationen von Kibana an

Beim Anzeigen von Informationen wird empfohlen, „Nachrichten“-Informationen in den verfügbaren Feldern auf der linken Seite herauszufiltern. Das Feld „Threadname“ ist optional. Die gefilterten Felder sind auch auf der linken Seite zu sehen, und die Informationen auf der rechten Seite sind klarer, einschließlich der Zeit des Protokolls selbst. Dies ist die Konfiguration der Protokollkonfiguration.

Dies ist das Ende dieses Artikels über die Verwendung von Docker Compose zur schnellen Bereitstellung von ELK (getestet und effektiv). Weitere Informationen zur Docker Compose-Bereitstellung von ELK finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Implementierung der ELK-Bereitstellungsmethode mit einem Klick in Docker Compose
  • So verwenden Sie Docker-Compose zum Erstellen eines ELK-Clusters
  • Beispielcode zum Bereitstellen von ELK mit Docker-Compose
  • So erstellen Sie ein Elk-System mit Docker Compose

<<:  svg+css oder js zum Erstellen eines Tick-Animationseffekts

>>:  Beschreibung des MySQL-Optimierungsparameters query_cache_limit

Artikel empfehlen

MySQL Master-Slave-Replikationsprinzip und zu beachtende Punkte

Vorne geschrieben Ich habe kürzlich ein spezielle...

So verwenden Sie Docker zum lokalen Verpacken und Bereitstellen von Images

Erste Verwendung von Docker zum lokalen Verpacken...

Javascript, um den Effekt des Schließens von Anzeigen zu erzielen

Hier ist eine Fallstudie zu Ihrer Information, wi...

Tomcat Server Erste Schritte Super ausführliches Tutorial

Inhaltsverzeichnis 1. Einige Konzepte von Tomcat ...

Blog-Design Webdesign-Debüt

Die erste Webseite, die ich entworfen habe, sieht...

JS implementiert Städtelisteneffekt basierend auf VUE-Komponente

In diesem Artikelbeispiel wird der spezifische Co...

JavaScript-Beispielcode zum Ermitteln, ob eine Datei vorhanden ist

1. Geschäftsszenario Ich habe kürzlich Entwicklun...