So installieren Sie ELK in Docker und implementieren die Protokollanalyse im JSON-Format

So installieren Sie ELK in Docker und implementieren die Protokollanalyse im JSON-Format

Was ist ELK?

ELK ist ein vollständiger Satz von Lösungen zur Protokollsammlung und Front-End-Anzeige, die von Elastic bereitgestellt werden. Es ist die Abkürzung für drei Produkte, nämlich ElasticSearch, Logstash und Kibana.

Logstash ist für die Protokollverarbeitung, etwa Protokollfilterung und Protokollformatierung, zuständig; ElasticSearch verfügt über leistungsstarke Textsuchfunktionen und dient daher als Protokollspeichercontainer; und Kibana ist für die Front-End-Anzeige zuständig.

Die ELK-Architektur ist wie folgt:

Filebeat wird hinzugefügt, um Protokolle von verschiedenen Clients zu sammeln und sie dann zur einheitlichen Verarbeitung an Logstash weiterzuleiten.

ELK-Bau

Da ELK aus drei Produkten besteht, können Sie diese drei Produkte nacheinander installieren.

Hier entscheiden wir uns, ELk mit Docker zu installieren.

Bei der Docker-Installation von ELk können die Images dieser drei Produkte auch separat heruntergeladen und ausgeführt werden. Dieses Mal verwenden wir jedoch das Drei-in-Eins-Image von Elk, um es direkt zu installieren.

Daher müssen Sie zunächst sicherstellen, dass Sie über eine Docker-Betriebsumgebung verfügen. Informationen zum Erstellen einer Docker-Betriebsumgebung finden Sie unter: https://blog.csdn.net/qq13112...

Ziehen Sie das Bild

Nachdem Sie die Docker-Umgebung erstellt haben, führen Sie den Befehl auf dem Server aus:

docker pull sebp/elk

Dieser Befehl lädt das Elk-Three-in-One-Image aus dem Docker-Repository herunter. Die Gesamtgröße beträgt mehr als 2 GB. Wenn Sie feststellen, dass die Downloadgeschwindigkeit zu langsam ist, können Sie die Quelladresse des Docker-Repositorys durch die inländische Quelladresse ersetzen.

Nachdem der Download abgeschlossen ist, überprüfen Sie das Bild:

docker images

Logstash-Konfiguration

Erstellen Sie eine neue beats-input.conf im Verzeichnis /usr/config/logstash für die Protokolleingabe:

Eingabe {
 schlägt {
  Port => 5044
 }
}

Erstellen Sie eine neue output.conf zum Ausgeben von Protokollen von Logstash an ElasticSearch:

Ausgabe {
 elastische Suche
  Hosts => ["lokaler Host"]
  manage_template => falsch
  index => "%{[@metadata][beat]}"
 }
}

index hier ist index nach der Ausgabe an ElasticSearch.

Ausführen des Containers

Nachdem Sie das Image haben, können Sie es direkt starten:

docker run -d -p 5044:5044 -p 5601:5601 -p 9203:9200 -p 9303:9300 -v /var/data/elk:/var/lib/elasticsearch -v /usr/config/logstash:/etc/logstash/conf.d --name=elk sebp/elk

-d bedeutet, den Container im Hintergrund auszuführen;

-p bedeutet Host-Port: Container-Port, also die Zuordnung des im Container verwendeten Ports zu einem Port auf dem Host. Die Standardports von ElasticSearch sind 9200 und 9300. Da auf meinem Rechner bereits 3 ElasticSearch-Instanzen laufen, wird hier der Zuordnungsport geändert.

-v bedeutet Hostdatei|Ordner:Containerdatei|Ordner. Hier werden die Elasticsearch-Daten im Container in /var/data/elk des Hosts gemountet, um Datenverlust nach dem Neustart des Containers zu verhindern; und die Logstash-Konfigurationsdatei wird in das Verzeichnis /usr/config/logstash des Hosts gemountet.

--name bedeutet, den Container zu benennen. Die Benennung soll die spätere Bedienung des Containers erleichtern.

Wenn Sie ElasticSearch schon einmal erstellt haben, werden Sie feststellen, dass während des Erstellungsprozesses verschiedene Fehler auftreten. Beim Erstellen von Elk mit Docker treten diese Fehler jedoch nicht auf.

Überprüfen Sie den Container nach der Ausführung von:

docker ps

Zeigen Sie die Containerprotokolle an:

docker logs -f elk

Geben Sie den Container ein:

docker exec -it elk /bin/bash

Starten Sie den Container nach der Änderung der Konfiguration neu:

docker restart elk

Kinaba anzeigen

Geben Sie http://my_host:5601/ in Ihren Browser ein
Sie können die Kinaba-Schnittstelle sehen. Derzeit sind in ElasticSearch keine Daten vorhanden und Filebeat muss installiert werden, um Daten in Elk zu sammeln.

Filebeat-Einrichtung

Filebeat wird verwendet, um Daten zu sammeln und an Logstash oder ElasticSearch zu melden. Laden Sie Filebeat auf den Server herunter, auf dem Protokolle gesammelt werden müssen, und entpacken Sie es zur Verwendung.

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.1-linux-x86_64.tar.gz

tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz

Ändern der Konfigurationsdatei

Geben Sie Filebeat ein und ändern Sie Filebeat.yml.

Dateibeat.prospectors:
- Typ: Protokoll
 #Muss auf true gesetzt werden, damit die Konfiguration wirksam wirdenabled: true
 Weg:
  #Konfigurieren Sie den zu erfassenden Protokollpfad - /var/log/*.log
 #Sie können ein Tag hinzufügen und es später zur Klassifizierung verwenden: ["my_tag"]
 #Entspricht dem ElasticSearch-Typ
 Dokumenttyp: mein_Typ
setup.kibana:
 #Hier ist die IP und der Port von Kibana, d. h. kibana:5601
 Gastgeber: ""
Ausgabe.logstash:
 #Hier ist die IP und der Port von Logstash, d. h. logstash:5044
 Gastgeber: [""]
 #Muss auf true gesetzt werden, sonst wird es nicht wirksam aktiviert: true
#Wenn Sie Daten direkt von Filebeat zu ElasticSearch sammeln möchten, können Sie die entsprechende Konfiguration von output.elasticsearch konfigurieren

Führen Sie Filebeat aus

laufen:

./filebeat -e -c filebeat.yml -d "publish"

An diesem Punkt können Sie sehen, dass Filebeat die Protokolle unter dem konfigurierten Pfad an Logstash sendet. Anschließend sendet Logstash die Daten nach der Verarbeitung an ElasticSearch. Wir möchten jedoch eine Datenanalyse über Elk durchführen, daher müssen die in ElasticSearch importierten Daten im JSON-Format vorliegen.

Dies ist das Format meines vorherigen Einzelprotokolls:

 2019-10-22 10:44:03.441 INFO rmjk.interceptors.IPInterceptor Zeile:248 - {"clientType":"1","deCode":"0fbd93a286533d071","eaType":2,"eaid":191970823383420928,"ip":"xx.xx.xx.xx","model":"HONOR STF-AL10","osType":"9","path":"/applicationEnter","result":5,"session":"ef0a5c4bca424194b29e2ff31632ee5c","timestamp":1571712242326,"uid":"130605789659402240","v":"2.2.4"}

Da die Analyse nach dem Import schwierig war, dachte ich daran, die Protokolle mit Grok im Logstash-Filter in das JSON-Format zu verarbeiten und sie dann in ElasticSearch zu importieren. Da die Parameter in meinen Protokollen jedoch nicht festgelegt waren, fand ich das zu schwierig. Also wechselte ich zu Logback, das die Protokolle direkt in JSON formatierte und sie dann per Filebeat sendete.

Logback-Konfiguration

Mein Projekt ist Spring Boot. Fügen Sie dem Projekt Abhängigkeiten hinzu:

<Abhängigkeit>
 <groupId>net.logstash.logback</groupId>
 <artifactId>logstash-logback-encoder</artifactId>
 <version>5.2</version>
</Abhängigkeit>

Fügen Sie dann logback.xml zum Ressourcenverzeichnis im Projekt hinzu:

<?xml version="1.0" encoding="UTF-8"?>
<Konfiguration>
  <!--
    veranschaulichen:
    1. Protokollebene und Dateiprotokolldatensätze werden hierarchisch aufgezeichnet. Die Ebene entspricht dem Protokolldateinamen. Protokollinformationen verschiedener Ebenen werden in verschiedenen Protokolldateien aufgezeichnet. Beispielsweise wird die Fehlerebene in log_error_xxx.log oder log_error.log aufgezeichnet (diese Datei ist die aktuelle Protokolldatei), und log_error_xxx.log ist ein Archivprotokoll.
      Protokolldateien werden nach Datum aufgezeichnet. Wenn die Protokolldateigröße innerhalb eines Tages gleich oder größer als 2 MB ist, wird sie in der Reihenfolge 0, 1, 2 usw. benannt. Beispiel: log-level-2013-12-21.0.log
      Das Gleiche gilt für andere Protokollierungsebenen.
    2. Wenn der Dateipfad für Entwicklung und Tests verwendet wird, führen Sie das Projekt in Eclipse aus und suchen Sie im Eclipse-Installationspfad nach dem Ordner „Logs“. Verwenden Sie dazu den relativen Pfad ../logs.
      Wenn unter Tomcat bereitgestellt, dann in der Protokolldatei unter Tomcat 3. Appender
      FILEERROR entspricht der Fehlerstufe, und der Dateiname hat die Form log-error-xxx.log. FILEWARN entspricht der Warnstufe, und der Dateiname hat die Form log-warn-xxx.log. FILEINFO entspricht der Infostufe, und der Dateiname hat die Form log-info-xxx.log. FILEDEBUG entspricht der Debugstufe, und der Dateiname hat die Form log-debug-xxx.log. stdout gibt zur Vereinfachung von Entwicklung und Test Protokollinformationen an die Steuerung aus -->
  <contextName>Dienst</contextName>
  <Eigenschaftsname="LOG_PATH" Wert="Protokolle"/>
  <!--Systemprotokollverzeichnis festlegen-->
  <Eigenschaftsname="APPDIR" Wert="Arzt"/>

  <!-- Logger, fortlaufender Datumseintrag-->
  <appender name="DATEIFEHLER" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- Der Pfad und Dateiname der aufgezeichneten Protokolldatei-->
    <Datei>${LOG_PATH}/${APPDIR}/log_error.log</Datei>
    <!-- Die Rollstrategie des Loggers, Aufzeichnung nach Datum und Größe -->
    <rollingPolicy-Klasse="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- Der Pfad der archivierten Protokolldatei. Heute ist beispielsweise das Protokoll vom 21.12.2013. Der Pfad der aktuell geschriebenen Protokolldatei wird durch den Dateiknoten angegeben. Sie können diese Datei und den durch die Datei angegebenen Dateipfad auf unterschiedliche Pfade setzen, sodass die aktuelle Protokolldatei oder die archivierte Protokolldatei in unterschiedlichen Verzeichnissen abgelegt werden.
      Die Protokolldatei für den 21.12.2013 wird durch fileNamePattern angegeben. %d{yyyy-MM-dd} gibt das Datumsformat an, %i gibt den Index an -->
      <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <!-- Zusätzlich zur Protokollierung ist die Protokolldatei so konfiguriert, dass sie 2 MB nicht überschreitet. Wenn sie 2 MB überschreitet, beginnt die Protokolldatei mit Index 0.
      Benennen Sie die Protokolldatei, zum Beispiel log-error-2013-12-21.0.log -->
      <timeBasedFileNamingAndTriggeringPolicy-Klasse="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2 MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- Protokolle anhängen -->
    <anhängen>wahr</anhängen>
    <!-- Protokolldateiformat -->
    <encoder Klasse="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Zeile:%-3L - %msg%n</pattern>
      <Zeichensatz>utf-8</Zeichensatz>
    </Encoder>
    <!-- Diese Protokolldatei zeichnet nur die Informationsebene auf -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>Fehler</level>
      <onMatch>AKZEPTIEREN</onMatch>
      <onMismatch>ABLEHNEN</onMismatch>
    </filter>
  </appender>

  <!-- Logger, fortlaufender Datumseintrag-->
  <appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- Der Pfad und Dateiname der aufgezeichneten Protokolldatei-->
    <Datei>${LOG_PATH}/${APPDIR}/log_warn.log</Datei>
    <!-- Die Rollstrategie des Loggers, Aufzeichnung nach Datum und Größe -->
    <rollingPolicy-Klasse="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- Der Pfad der archivierten Protokolldatei. Heute ist beispielsweise das Protokoll vom 21.12.2013. Der Pfad der aktuell geschriebenen Protokolldatei wird durch den Dateiknoten angegeben. Sie können diese Datei und den durch die Datei angegebenen Dateipfad auf unterschiedliche Pfade setzen, sodass die aktuelle Protokolldatei oder die archivierte Protokolldatei in unterschiedlichen Verzeichnissen abgelegt werden.
      Die Protokolldatei für den 21.12.2013 wird durch fileNamePattern angegeben. %d{yyyy-MM-dd} gibt das Datumsformat an, %i gibt den Index an -->
      <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <!-- Zusätzlich zur Protokollierung ist die Protokolldatei so konfiguriert, dass sie 2 MB nicht überschreitet. Wenn sie 2 MB überschreitet, beginnt die Protokolldatei mit Index 0.
      Benennen Sie die Protokolldatei, zum Beispiel log-error-2013-12-21.0.log -->
      <timeBasedFileNamingAndTriggeringPolicy-Klasse="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2 MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- Protokolle anhängen -->
    <anhängen>wahr</anhängen>
    <!-- Protokolldateiformat -->
    <encoder Klasse="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Zeile:%-3L - %msg%n</pattern>
      <Zeichensatz>utf-8</Zeichensatz>
    </Encoder>
    <!-- Diese Protokolldatei zeichnet nur die Informationsebene auf -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>warnen</level>
      <onMatch>AKZEPTIEREN</onMatch>
      <onMismatch>ABLEHNEN</onMismatch>
    </filter>
  </appender>

  <!-- Logger, fortlaufender Datumseintrag-->
  <appender name="DATEIINFO" Klasse="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- Der Pfad und Dateiname der aufgezeichneten Protokolldatei-->
    <Datei>${LOG_PATH}/${APPDIR}/log_info.log</Datei>
    <!-- Die Rollstrategie des Loggers, Aufzeichnung nach Datum und Größe -->
    <rollingPolicy-Klasse="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- Der Pfad der archivierten Protokolldatei. Heute ist beispielsweise das Protokoll vom 21.12.2013. Der Pfad der aktuell geschriebenen Protokolldatei wird durch den Dateiknoten angegeben. Sie können diese Datei und den durch die Datei angegebenen Dateipfad auf unterschiedliche Pfade setzen, sodass die aktuelle Protokolldatei oder die archivierte Protokolldatei in unterschiedlichen Verzeichnissen abgelegt werden.
      Die Protokolldatei für den 21.12.2013 wird durch fileNamePattern angegeben. %d{yyyy-MM-dd} gibt das Datumsformat an, %i gibt den Index an -->
      <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
      <!-- Zusätzlich zur Protokollierung ist die Protokolldatei so konfiguriert, dass sie 2 MB nicht überschreitet. Wenn sie 2 MB überschreitet, beginnt die Protokolldatei mit Index 0.
      Benennen Sie die Protokolldatei, zum Beispiel log-error-2013-12-21.0.log -->
      <timeBasedFileNamingAndTriggeringPolicy-Klasse="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <maxFileSize>2 MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <!-- Protokolle anhängen -->
    <anhängen>wahr</anhängen>
    <!-- Protokolldateiformat -->
    <encoder Klasse="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger Zeile:%-3L - %msg%n</pattern>
      <Zeichensatz>utf-8</Zeichensatz>
    </Encoder>
    <!-- Diese Protokolldatei zeichnet nur die Informationsebene auf -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>Informationen</level>
      <onMatch>AKZEPTIEREN</onMatch>
      <onMismatch>ABLEHNEN</onMismatch>
    </filter>
  </appender>

  <appender name="jsonLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- Der Pfad und Dateiname der aufgezeichneten Protokolldatei-->
    <Datei>${LOG_PATH}/${APPDIR}/log_IPInterceptor.log</Datei>
    <rollingPolicy-Klasse="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_PATH}/${APPDIR}/log_IPInterceptor.%d{jjjj-MM-tt}.log</fileNamePattern>
    </rollingPolicy>
    <Encoder-Klasse="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      <jsonFactoryDecorator-Klasse="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator">
        <Escape>
          <targetCharacterCode>10</targetCharacterCode>
          <escapeSequence>\u2028</escapeSequence>
        </escape>
      </jsonFactoryDecorator>
      <Anbieter>
        <Muster>
          <Muster>
            {
            "Zeitstempel":"%date{ISO8601}",
            "uid": "%mdc{uid}",
            "requestIp": "%mdc{ip}",
            "id": "%mdc{id}",
            "Clienttyp": "%mdc{Clienttyp}",
            "v":"%mdc{v}",
            "deCode":"%mdc{deCode}",
            "Daten-ID": "%mdc{Daten-ID}",
            "Datentyp": "%mdc{Datentyp}",
            "vid": "%mdc{vid}",
            "hat":"%mdc{hat}",
            "cid": "%mdc{cid}",
            "tagId":"%mdc{tagId}"
            }
          </Muster>
        </Muster>
      </Anbieter>
    </Encoder>
  </appender>
  <!-- Farbprotokoll -->
  <!-- Rendering-Klasse, von der Farbprotokolle abhängen -->
  <conversionRule Konvertierungswort="clr" Konverterklasse="org.springframework.boot.logging.logback.ColorConverter"/>
  <conversionRule Konvertierungswort="wex"
          converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
  <conversionRule Konvertierungswort="wEx"
          converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
  <!-- Farbprotokollformat -->
  <Eigenschaftsname="CONSOLE_LOG_PATTERN"
       Wert="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){schwach} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){schwach} %clr([%15.15t]){schwach} %clr(%-40.40logger{39}){cyan} %clr(:){schwach} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!--Die Standardkonfiguration des Encoders ist PatternLayoutEncoder-->
    <Encoder>
      <Muster>${CONSOLE_LOG_PATTERN}</Muster>
      <Zeichensatz>utf-8</Zeichensatz>
    </Encoder>
    <!--Dieser Protokoll-Appender ist für die Entwicklung bestimmt. Es ist nur die niedrigste Ebene konfiguriert. Die von der Konsole ausgegebene Protokollebene ist größer oder gleich dieser Ebene an Protokollinformationen-->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>Debuggen</level>
    </filter>
  </appender>

  <!-- Geben Sie die Protokollierungsebene für ein Paket im Projekt an, wenn ein Protokollierungsvorgangsverhalten vorliegt-->
  <!-- rmjk.dao.mappe ist das Stammpaket, d. h. alle Protokollvorgänge unter diesem Stammpaket verfügen über die Berechtigung DEBUG -->
  <!-- Die Stufen sind [von hoch nach niedrig]: FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
  <logger name="rmjk.dao.mapper" level="DEBUG"/>
  <logger name="rmjk.service" level="DEBUG"/>
  <!--Protokoll anzeigen-->
  <logger name="org.springframework.jdbc.core" additivity="false" level="DEBUG">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="DATEIINFO"/>
  </logger>
  <!-- JSON-Protokoll drucken -->
  <logger name="IPInterceptor" level="info" additivity="false">
    <appender-ref ref="jsonLog"/>
  </logger>

  <!-- Konfigurieren Sie diese Ebene in einer Produktionsumgebung auf ein geeignetes Niveau, um zu viele Protokolldateien oder eine Beeinträchtigung der Programmleistung zu vermeiden-->
  <root-Ebene="INFO">
    <appender-ref ref="DATEIFEHLER"/>
    <appender-ref ref="FILEWARN"/>
    <appender-ref ref="DATEIINFO"/>

    <!-- Bitte entfernen Sie stdout und testfile in der Produktionsumgebung -->
    <appender-ref ref="STDOUT"/>
  </Wurzel>
</Konfiguration>

Die wichtigsten Punkte sind:

<logger name="IPInterceptor" level="info" additivity="false">
   <appender-ref ref="jsonLog"/>
</logger>

Führen Sie slf4j in die Datei ein, die gedruckt werden soll:

 privater statischer endgültiger Logger LOG = LoggerFactory.getLogger("IPInterceptor");

Tragen Sie die zu druckenden Informationen in MDC ein:

MDC.put("ip", IP-Adresse);
MDC.put("Pfad", ServletPfad);
MDC.put("uid", paramMap.get("uid") == null ? "" : paramMap.get("uid").toString());

Wenn zu diesem Zeitpunkt LOG.info("msg") verwendet wird, wird der gedruckte Inhalt in die Nachricht des Protokolls eingetragen. Das Protokollformat ist wie folgt:

Logstash-Konfiguration ändern

Ändern Sie beats-input.conf im Verzeichnis /usr/config/logstash :

Eingabe {
 schlägt {
  Port => 5044
  Codec => "json"
 }
}

Es wird nur codec => "json" hinzugefügt, aber Logstash analysiert den Eingabeinhalt entsprechend dem JSON-Format.

Da die Konfiguration geändert wurde, starten Sie elk neu:

docker restart elk

Auf diese Weise können wir unsere Protokolle nach der Generierung mit Filebeat in Elk importieren und anschließend Kibana zur Analyse der Protokolle verwenden.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung zur Verwendung von Docker zum schnellen Bereitstellen der ELK-Umgebung (neueste Version 5.5.1)
  • Beispielcode zum Bereitstellen von ELK mit Docker-Compose
  • So erstellen Sie schnell ELK basierend auf Docker
  • Beispiel für die Verwendung von Docker zum Erstellen eines ELK-Protokollsystems
  • So erstellen Sie ein Elk-System mit Docker Compose
  • Detaillierte Erläuterung zur schnellen Bereitstellung der ELK-Umgebung mit Docker (neueste Version 5.5.1)
  • Detaillierte Erläuterung der Verwendung von ELK zum Erstellen eines Docker-Containeranwendungsprotokollcenters
  • Docker erstellt ein ELK Docker-Cluster-Protokollsammlungssystem

<<:  Beispieloperation für die Summe des Mysql-Varchar-Typs

>>:  Mehrere Lösungen zum Vergessen des MySQL-Passworts

Artikel empfehlen

MySQL: Praktische Erfahrung mit der Verwendung der Insert-Anweisung

Inhaltsverzeichnis 1. Mehrere Syntaxen von Insert...

MySQL 8.0.20 Installations- und Konfigurations-Tutorial unter Docker

Docker installiert MySQL Version 8.0.20 zu Ihrer ...

Entwickeln Sie eine Vue-Komponente, die Iframe kapselt

Inhaltsverzeichnis 1. Komponenteneinführung 2. In...

mysqldump-Parameter, die Sie möglicherweise nicht kennen

Im vorherigen Artikel wurde erwähnt, dass die in ...

React-Konfiguration px-Konvertierung rem-Methode

Installieren Sie zugehörige Abhängigkeiten npm ic...

Einführung in den Installationsprozess von MySQL 8.0 in einer Linux-Umgebung

Inhaltsverzeichnis Vorwort 1. Linux ändert die Yu...

Webdesign: Skriptmaterialien rekonstruieren das Benutzererlebnis

<br />Originaltext: http://blog.rexsong.com/...

Die große Rolle von HTML-Meta

Es gibt zwei Metaattribute: Name und http-equiv. D...

MySQL-Hochverfügbarkeitslösung MMM (MySQL Multi-Master-Replikationsmanager)

1. Einführung in MMM: MMM steht für Multi-Master ...