Best Practices für die Bereitstellung des ELK7.3.0-Protokollsammlungsdienstes mit Docker

Best Practices für die Bereitstellung des ELK7.3.0-Protokollsammlungsdienstes mit Docker

Schreiben Sie am Anfang

Dieser Artikel behandelt nur die Bereitstellung von ELK 7.3.0!

Bereitstellungsumgebung:

System CentOS 7
Docker Docker-Version 19.03.5
CPU 2 Kerne
Erinnerung 2,5 G
Scheibe 30 G (empfohlene Einstellung, unzureichender Speicherplatz kann dazu führen, dass ES einen Fehler meldet)
Filebeat v7.3.0, Einzelknoten
ElasticSearch v7.3.0, zwei Kopien
Kibana v7.3.0, Einzelknoten
Logstash v7.3.1, einzelner Knoten

ELK-Lösung zur verteilten Clusterbereitstellung

ELK-Lösung zur verteilten Clusterbereitstellung

Die Speicherberechtigung des elasticsearch-Benutzers unter Linux ist zu gering. Es werden mindestens 262144 benötigt. Es wird eine Fehlermeldung angezeigt (max virtual memory areas vm.max_map_count [65530] is too low, increase to minimum [262144]). Ändern Sie daher zunächst die Systemkonfiguration.

# Ändern Sie die Konfiguration sysctl.conf
vi /etc/sysctl.conf
# Fügen Sie die folgende Konfiguration hinzu:
vm.max_map_count=262144
# Neu laden:
sysctl -p
# Starten Sie Elasticsearch abschließend neu, damit es erfolgreich startet.

Die Umgebung wird mit Docker bereitgestellt. Um Docker-Befehle bequemer verwenden zu können, installieren wir das Autovervollständigungs-Plugin bash-completion:

# Installieren Sie das abhängige Tool bash-complete
yum install -y Bash-Vervollständigung
Quelle /usr/share/bash-completion/completions/docker
Quelle /usr/share/bash-completion/bash_completion

Bereitstellungsreihenfolge: ES --> Kibana --> Logstash --> Filebeat

Bereitstellung von ElasticSearch 7.3.0

Bereitstellung des Masterknotens

Erstellen Sie Konfigurationsdateien und Datenspeicherverzeichnisse

mkdir -p {/mnt/es1/master/data,/mnt/es1/master/logs}
vim /mnt/es1/master/conf/es-master.yml

es-master.yml-Konfiguration

# Clustername cluster.name: es-cluster
#KnotennameKnoten.name: es-master
# Ob es ein Masterknoten werden kann.ode.master: true
# Ob dem Knoten das Speichern von Daten erlaubt werden soll, standardmäßig aktiviert node.data: false
# Netzwerkbindung network.host: 0.0.0.0
# Legen Sie den HTTP-Port für externe Dienste fest http.port: 9200
# Stellen Sie den TCP-Port für die Kommunikation zwischen Knoten ein transport.port: 9300
# Cluster-Erkennung discovery.seed_hosts:
 – 172.17.0.2:9300
 – 172.17.0.3:9301
# Geben Sie manuell den Namen oder die IP-Adresse aller Knoten an, die Masterknoten werden können. Diese Konfigurationen werden bei der ersten Wahl cluster.initial_master_nodes berechnet:
 – 172.17.0.2
# Unterstützt domänenübergreifenden Zugriff http.cors.enabled: true
http.cors.allow-origin: "*"
# Sicherheitsauthentifizierung xpack.security.enabled: false
#http.cors.allow-headers: "Autorisierung"
bootstrap.memory_lock: falsch
bootstrap.system_call_filter: falsch

#Domänenübergreifende Probleme lösen#http.cors.enabled: true
#http.cors.allow-origin: "*"
#http.cors.allow-methods: OPTIONEN, HEAD, GET, POST, PUT, LÖSCHEN
#http.cors.allow-headers: "X-Angefordert-Mit, Inhaltstyp, Inhaltslänge, X-Benutzer"

Das Abrufen des Bildes wird etwas langsam sein, also haben Sie Geduld!

# Ziehen Sie das Image. Sie können den Container direkt erstellen und diesen Schritt ignorieren. docker pull elasticsearch:7.3.0

# Container erstellen## Ordnen Sie 5601 dem für Kibanadocker reservierten Port zu. run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-p 9200:9200 -p 9300:9300 -p 5601:5601 \
-v /mnt/es1/master/conf/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mnt/es1/master/data:/usr/share/elasticsearch/data \
-v /mnt/es1/master/logs:/usr/share/elasticsearch/logs \
-v /etc/lokaleZeit:/etc/lokaleZeit \
--name es-master elasticsearch:7.3.0

/etc/localtime:/etc/localtime: Die Host- und Containerzeit sind synchronisiert.

Bereitstellen vom Knoten aus

Erstellen Sie Konfigurationsdateien und Datenspeicherverzeichnisse

mkdir -p {/mnt/es1/slave1/data,/mnt/es1/slave1/logs}
vim /mnt/es1/slave1/conf/es-slave1.yml

es-slave1.yml-Konfiguration

# Clustername cluster.name: es-cluster
#KnotennameKnoten.name: es-slave1
# Ob es ein Masterknoten werden kann.ode.master: true
# Ob dem Knoten das Speichern von Daten erlaubt werden soll, standardmäßig aktiviert node.data: true
# Netzwerkbindung network.host: 0.0.0.0
# Legen Sie den HTTP-Port für externe Dienste fest http.port: 9201
# Stellen Sie den TCP-Port für die Kommunikation zwischen Knoten ein transport.port: 9301
# Cluster-Erkennung discovery.seed_hosts:
 – 172.17.0.2:9300
 – 172.17.0.3:9301
# Geben Sie manuell den Namen oder die IP-Adresse aller Knoten an, die Masterknoten werden können. Diese Konfigurationen werden bei der ersten Wahl cluster.initial_master_nodes berechnet:
 – 172.17.0.2
# Unterstützt domänenübergreifenden Zugriff http.cors.enabled: true
http.cors.allow-origin: "*"
# Sicherheitsauthentifizierung xpack.security.enabled: false
#http.cors.allow-headers: "Autorisierung"
bootstrap.memory_lock: falsch
bootstrap.system_call_filter: falsch

Das Abrufen des Bildes wird etwas langsam sein, also haben Sie Geduld!

# Ziehen Sie das Image. Sie können den Container direkt erstellen und diesen Schritt ignorieren. docker pull elasticsearch:7.3.0

# Container erstellen docker run -d -e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-p 9201:9200 -p 9301:9300 \
-v /mnt/es1/slave1/conf/es-slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /mnt/es1/slave1/data:/usr/share/elasticsearch/data \
-v /mnt/es1/slave1/logs:/usr/share/elasticsearch/logs \
-v /etc/lokaleZeit:/etc/lokaleZeit \
--name es-slave1 elasticsearch:7.3.0

Ändern Sie die Konfiguration und starten Sie den Container neu

# Zeigen Sie die IP des Master- und Slave-Containers an
Docker-Inspektion ES-Master
Docker inspizieren es-Slave1 

Ändern Sie die discovery.seed_hosts und cluster.initial_master_nodes in den ES-Konfigurationsdateien es-master.yml und es-slave1.yml auf die entsprechende IP! Starten Sie den Container neu:

Docker startet ES-Master neu

Docker startet es-Slave1 neu

# ES-Protokolle anzeigen docker logs -f --tail 100f es-master

Besuchen Sie http://IP:9200/_cat/nodes, um die ES-Clusterinformationen zu überprüfen. Sie können sehen, dass die Master- und Slave-Knoten erfolgreich bereitgestellt wurden:

Häufig verwendete APIs für die Knotenbereitstellung:

API Funktion
http://IP:9200 Informationen zur ES-Version anzeigen
http://IP:9200/_cat/nodes

Alle Shards anzeigen

http://IP:9200/_cat/indices Alle Indizes anzeigen

Bereitstellung von Kibana 7.3.0

Erstellen Sie eine Kibana-Konfigurationsdatei

vim /mnt/kibana.yml
#
## ** DIES IST EINE AUTOMATISCH GENERIERTE DATEI **
##
#
## Standard-Kibana-Konfiguration für Docker-Ziel
Servername: Kibana
#Konfigurieren Sie den Remote-Zugriffsserver von Kibana.host: "0.0.0.0"
#Konfigurieren Sie die Zugriffsadresse elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
#Chinesische Schnittstelle i18n.locale: „zh-CN“

#xpack.monitoring.ui.container.elasticsearch.enabled: wahr

Zeigen Sie die es-master-Container-ID an

docker ps | grep es-master 

Bereitstellen von Kibana

Beachten Sie, dass Sie im Befehl 40eff5876ffd in die es-Master-Container-ID ändern, das Image abrufen und geduldig warten müssen !

# Ziehen Sie das Image. Sie können den Container direkt erstellen und diesen Schritt ignorieren. docker pull docker.elastic.co/kibana/kibana:7.3.0

# Container erstellen## --network=container bedeutet gemeinsame Nutzung des Containernetzwerks docker run -it -d \
-v /mnt/kibana.yml:/usr/share/kibana/config/kibana.yml \
-v /etc/lokaleZeit:/etc/lokaleZeit \
-e ELASTICSEARCH_URL=http://172.17.0.2:9200 \
--network=container:40eff5876ffd \
--name kibana docker.elastic.co/kibana/kibana:7.3.0

Überprüfen Sie das Kibana-Containerprotokoll. Wenn Sie das in der folgenden Abbildung dargestellte Protokoll sehen, bedeutet dies, dass der Start erfolgreich war.

Docker-Protokolle -f --tail 100f Kibana 

Besuchen Sie http://IP:5601, möglicherweise erscheint 503. Warten Sie einen Moment, dann ist der Zugriff in Ordnung. Wenn Sie auf die Kibana-Konsole zugreifen können, bedeutet dies, dass Kibana erfolgreich installiert wurde und eine Verbindung mit es-master hergestellt wurde.

Bereitstellung von Logstash 7.3.1

Schreiben der Logstash-Konfigurationsdatei

vim /mnt/logstash-filebeat.conf

Eingabe {
  # Quellbeats
  schlägt {
    # Port-Port => "5044"
  }
}
# Analyse- und Filter-Plugins, mehrere Filter sind möglich {
  grok {
	# Wo Grok-Ausdrücke gespeichert sind patterns_dir => "/grok"
	
	# Grok-Ausdruck neu schreiben # match => {"message" => "%{SYSLOGBASE} %{DATA:message}"}
	
	# Löschen Sie das native Nachrichtenfeld overwrite => ["message"]

  # Definieren Sie Ihre eigene Formatübereinstimmung => {
		"Nachricht" => "%{URIPATH:Anfrage} %{IP:Clientip} %{NUMBER:Antwort:int} \"%{WORD:Quellen}\" (?:%{URI:Referrer}|-) \[%{GREEDYDATA:Agent}\] ​​​​\{%{GREEDYDATA:Params}\}"
	}
  }
 # Abfrageklassifizierungs-Plugin GeoIP {
    Quelle => "Nachricht"
  }
}
Ausgabe {
	# Elasticsearch auswählen
	elastische Suche
		# es Cluster-Hosts => ["http://172.17.0.2:9200"]
      #Benutzername => "root"
      #Passwort => "123456"

		# Indexformatindex => "omc-block-server-%{[@metadata][version]}-%{+JJJJ.MM.tt}"

		# Auf „true“ setzen, um anzugeben, dass, wenn Sie eine benutzerdefinierte Vorlage namens „logstash“ haben, Ihre benutzerdefinierte Vorlage die Standardvorlage „logstash“ überschreibt.
		template_overwrite => wahr
	}
}

Bereitstellen von Logstash

# Ziehen Sie das Image, Sie können den Container direkt erstellen und diesen Schritt ignorieren docker pull logstash:7.3.1 

# Container erstellen# xpack.monitoring.enabled aktiviert die Sicherheits- und Überwachungsdienste von X-Pack# xpack.monitoring.elasticsearch.hosts legt die ES-Adresse fest, 172.17.0.2 ist die IP des es-Master-Containers
# Docker ermöglicht Ihnen, einige Befehle auszuführen, wenn der Container gestartet wird. logsatsh -f bedeutet, logstash durch Angabe der Konfigurationsdatei auszuführen. /usr/share/logstash/config/logstash-sample.conf ist die Verzeichnisdatei im Container. docker run -p 5044:5044 -d \
-v /mnt/logstash-filebeat.conf:/usr/share/logstash/config/logstash-sample.conf \
-v /etc/lokaleZeit:/etc/lokaleZeit \
-e elasticsearch.hosts=http://172.17.0.2:9200 \
-e xpack.monitoring.enabled=true \
-e xpack.monitoring.elasticsearch.hosts=http://172.17.0.2:9200 \
--name logstash logstash:7.3.1 -f /usr/share/logstash/config/logstash-sample.conf

Hier müssen Sie auf die ES-Clusteradresse achten. Hier konfigurieren wir nur die ES-Master-IP (172.17.0.2). Detaillierte Logstash-Konfiguration. Wenn Sie das folgende Protokoll sehen, war die Installation erfolgreich:

Bereitstellung von Filebeat 7.3.0

Filebeat ist keine notwendige Komponente. Wir können auch Logstash zum Übertragen von Protokollen verwenden.

Um beispielsweise alle Protokolle zusammenzuführen, die nicht mit „20“ beginnen, können Sie die folgende Logstash-Konfiguration verwenden:

Eingabe {
  # Quellbeats
  schlägt {
    # Port-Port => "5044"
  }
  Datei {
    Typ => "Serverprotokoll"
    Pfad => "/logs/*.log"
    start_position => "Anfang"
    codec=>mehrzeilig{
        // Regulärer Ausdruck, alle Protokolle mit dem Präfix „20“. Wenn Ihre Protokolle Präfixe wie „[2020-06-15“ haben, können Sie diese durch „^[“ ersetzen.
        Muster => "^20"
        // Ob die reguläre Regel negate => true negiert werden soll
        // previous bedeutet, in die vorherige Zeile einzufügen, next bedeutet, in die nächste Zeile einzufügen, was => "vorheriges"
    }

  }
}

Beachten Sie, dass Filebeat auf demselben Server wie die Anwendung bereitgestellt werden muss. Hier wird die Anwendung mithilfe von Docker bereitgestellt, und /mnt/omc-dev/logs ist das Zuordnungsverzeichnis der Anwendungsprotokolldatei. Wenn Sie den Dienst auch über Docker bereitstellen, denken Sie daran, die Protokolldatei über [-v /mnt/omc-dev/logs:/app/logs] zuzuordnen!

Erstellen einer Filebeat-Konfigurationsdatei

## /mnt/omc-dev/logs ist das Anwendungsprotokollverzeichnis. Das Anwendungsbereitstellungsverzeichnis muss zugeordnet werden. mkdir -p {/mnt/omc-dev/logs,/mnt/filebeat/logs,/mnt/filebeat/data}
vim /mnt/filebeat/filebeat.yml
Dateibeat.Eingaben:
- Typ: Protokoll
 aktiviert: true
 Pfade:
  # Alle .log-Dateien im aktuellen Verzeichnis - /home/project/spring-boot-elasticsearch/logs/*.log
 mehrzeiliges Muster: '^20'
 multiline.negate: true
 multiline.match: vorherige

Protokollierungsebene: Debug

Dateibeat.config.modules:
 Pfad: ${path.config}/modules.d/*.yml
 reload.enabled: falsch

setup.template.einstellungen:
 index.Anzahl_der_Scherben: 1

setup.dashboards.enabled: falsch

setup.kibana:
 Host: "http://172.17.0.2:5601"

# Nicht direkt an ES übertragen
#Ausgabe.elasticsearch:
# Hosts: ["http://es-master:9200"]
# index: "filebeat-%{[beat.version]}-%{+yyyy.MM.dd}"

Ausgabe.logstash:
 Gastgeber: ["172.17.0.5:5044"]

#Scanfrequenz: 1s
schließen_inaktiv: 12h
Zurückweichen: 1s
max_backoff: 1 s
Backoff-Faktor: 1
Spülzeitüberschreitung: 1 s

Prozessoren:
 - add_host_metadata: ~
 - add_cloud_metadata: ~

Beachten Sie, dass Sie die Logstash-IP und den Port ändern müssen.

# Ziehen Sie das Image, Sie können den Container direkt erstellen und diesen Schritt ignorieren docker pull docker.elastic.co/beats/filebeat:7.3.0

# Container erstellen## --link logstash Verbindet den angegebenen Container mit der aktuellen Verbindung. Sie können einen Alias ​​festlegen, um zu vermeiden, dass der Container aufgrund dynamischer Änderungen, die durch die IP-Methode verursacht werden, nicht verbunden werden kann. logstash ist der Containername. docker run -d -v /mnt/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-v /mnt/omc-dev/logs:/home/projekt/spring-boot-elasticsearch/logs \
-v /mnt/filebeat/logs:/usr/share/filebeat/logs \
-v /mnt/filebeat/data:/usr/share/filebeat/data \
-v /etc/lokaleZeit:/etc/lokaleZeit \
--link logstash --name filebeat docker.elastic.co/beats/filebeat:7.3.0

Überprüfen Sie die Protokolle. Wir haben die Protokollebene von Filebeat in der Konfigurationsdatei auf Debug gesetzt, sodass alle gesammelten Informationen angezeigt werden.

Docker-Protokolle -f --tail 100f Filebeat 

Sie können sehen, dass durch Abfragen des ES-Index drei weitere Indizes gefunden werden. Durch die von uns konfigurierte tägliche Indexsegmentierung gibt es drei OMC-Dienstindizes, da meine Umgebung seit drei Tagen ausgeführt wird (OMC ist ein Dienst für geplante Aufgaben, Sie können zum Testen auch eine einfache geplante Aufgabe schreiben).

Als nächstes erstellen wir ein Kibana-Indexmuster und führen Protokollabfragen durch:

Nachdem der Index erstellt wurde, können Sie Protokolle nach Indexmuster in der Discover- Ansicht abfragen.

Der Artikel endet hier. Wenn Sie andere Dienste haben, die eingeführt werden müssen, müssen Sie die Protokolle nur in das angegebene Verzeichnis mounten. Wenn der Dienst auf anderen Servern bereitgestellt wird, müssen Sie natürlich Filebeat auf dem Server bereitstellen und die Netzwerkkonnektivität zwischen den Servern sicherstellen~~

Und hier noch ein Open-Source-Projekt zur automatisierten ELK-Docker-Bereitstellung: https://github.com/deviantony/docker-elk.git

--------------------------------------------------------

Aktualisiert am 28. Juni 2020

Vor Kurzem ist es zu einem durch Logstash verursachten Problem mit einem physischen Speicheranstieg gekommen.

Lassen Sie mich kurz die Hauptprobleme erläutern:

Derzeit beträgt das tägliche Protokollvolumen eines einzelnen Dienstes etwa 2,2 GB. Da es in der Anfangszeit keine Begrenzung des Logstash-Speichers gab, belegt Logstash bei eingehenden großen Datenmengen den Speicher und die E/A wie verrückt.

In letzter Zeit hat der Anwendungsdienstverkehr auf demselben Server zugenommen, was letztendlich zu unzureichendem Speicher und einem OutOfMemoryError-Problem führte.

Später wurden die früheren Legacy-Probleme durch die Optimierung des JVM-Speichers (ich werde nicht ins Detail gehen, im Internet gibt es zahlreiche Informationen dazu) und das Hinzufügen der Logstash-Antwortspeicherkonfiguration behoben.

Fügen Sie abschließend Logstash zur Überwachung zu Kibana hinzu (natürlich können Sie Logstash-Protokolle auch für ES konfigurieren):

https://blog.csdn.net/QiaoRui_/article/details/97667293

Das könnte Sie auch interessieren:
  • So stellen Sie eigenständigen Pulsar und geclustertes Redis mit Docker bereit (Entwicklungsartefakt)
  • So verbinden Sie die Idee mit Docker, um eine Bereitstellung mit einem Klick zu erreichen
  • Implementierung des Deployment-War-Package-Projekts mit Docker
  • Beispiel für die Bereitstellung von MySQL 8.0 mit Docker
  • Detaillierter Prozess der Installation und Bereitstellung von OnlyOffice in Docker

<<:  Vue verwendet el-table, um Spalten und Zeilen dynamisch zusammenzuführen

>>:  Beispiele für die Verwendung temporärer Tabellen in MySQL

Artikel empfehlen

HTML Tutorial: Sammlung häufig verwendeter HTML-Tags (4)

Verwandte Artikel: Anfänger lernen einige HTML-Ta...

Einfache Verwendung des Vue Vee-Validate-Plugins

Inhaltsverzeichnis 1. Installation 2. Import 3. V...

Docker-Lösung zum Anmelden ohne Root-Rechte

Wenn Sie den Docker-Befehl zum ersten Mal verwend...

Schritte zum Aktivieren von TLS in Docker für eine sichere Konfiguration

Vorwort Ich hatte zuvor die 2375 Remote API von D...

Linux Bash: ./xxx: Fehler „Binärdatei kann nicht ausgeführt werden“

Heute habe ich einem Kunden ein kleines Tool für ...

MySQL-Parameterbezogene Konzepte und Abfrageänderungsmethoden

Vorwort: In einigen früheren Artikeln haben wir h...

Modulare CSS-Lösung

Es gibt wahrscheinlich ebenso viele modulare Lösu...

js+css zur Realisierung eines dreistufigen Navigationsmenüs

In diesem Artikelbeispiel wird der spezifische Co...