Implementierung der ELK-Bereitstellungsmethode mit einem Klick in Docker Compose

Implementierung der ELK-Bereitstellungsmethode mit einem Klick in Docker Compose

Installieren

Filebeat hat Logstash-Forwarder vollständig ersetzt und stellt die neue Generation von Protokollsammlern dar, da es leichter und sicherer ist. Das auf Filebeat + ELK basierende Architekturdiagramm der Bereitstellungslösung sieht wie folgt aus:

Softwareversion:

Aufschlag Version veranschaulichen
CentOS 7.6
Docker 18.09.5
Docker Compose 1.25.0
ELCH 7.5.1
Filebeat 7.5.1

Docker-Compose-Datei

Version: "3"
Leistungen:
 es-master:
  Containername: es-master
  Hostname: es-master
  Bild: elasticsearch:7.5.1
  Neustart: immer
  Häfen:
   9200:9200
   9300:9300
  Bände:
   - ./elasticsearch/master/conf/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/master/data:/usr/share/elasticsearch/data
   - ./elasticsearch/master/logs:/usr/share/elasticsearch/logs
  Umfeld:
   – „ES_JAVA_OPTS=-Xms512m -Xmx512m“

 es-slave1:
  Containername: es-slave1
  Bild: elasticsearch:7.5.1
  Neustart: immer
  Häfen:
   9201:9200
   - 9301:9300
  Bände:
   - ./elasticsearch/slave1/conf/es-slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/slave1/data:/usr/share/elasticsearch/data
   - ./elasticsearch/slave1/logs:/usr/share/elasticsearch/logs
  Umfeld:
   – „ES_JAVA_OPTS=-Xms512m -Xmx512m“

 es-slave2:
  Containername: es-slave2
  Bild: elasticsearch:7.5.1
  Neustart: immer
  Häfen:
   - 9202:9200
   - 9302:9300
  Bände:
   - ./elasticsearch/slave2/conf/es-slave2.yml:/usr/share/elasticsearch/config/elasticsearch.yml
   - ./elasticsearch/slave2/data:/usr/share/elasticsearch/data
   - ./elasticsearch/slave2/logs:/usr/share/elasticsearch/logs
  Umfeld:
   – „ES_JAVA_OPTS=-Xms512m -Xmx512m“

 kibana:
  Containername: Kibana
  Hostname: Kibana
  Bild: kibana:7.5.1
  Neustart: immer
  Häfen:
   -5601:5601
  Bände:
   - ./kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
  Umfeld:
   - elasticsearch.hosts=http://es-master:9200
  hängt ab von:
   -es-master
   -es-slave1
   -es-slave2

 # Dateibeat:
 # # Containername # container_name: filebeat
 # # Hostname # Hostname: Filebeat
 # # Bild: docker.elastic.co/beats/filebeat:7.5.1
 # # Neustartmechanismus# Neustart: immer
 # # Dauerhafte Einbindungen # Datenträger:
 # - ./filebeat/conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
 ## Dem Container zugeordnet [als Datenquelle]
 # - ./logs:/home/projekt/spring-boot-elasticsearch/logs
 # - ./filebeat/logs:/usr/share/filebeat/logs
 # - ./filebeat/data:/usr/share/filebeat/data
 # # Verbinden Sie den angegebenen Container mit der aktuellen Verbindung. Sie können einen Alias ​​festlegen, um zu vermeiden, dass der Container aufgrund dynamischer Änderungen der IP-Adresse nicht verbunden werden kann. # Links:
 # - Logstash
 # # Abhängigkeitsdienst [optional]
 # hängt ab von:
 # - es-master
 # - es-slave1
 # - es-slave2

 Protokollspeicher:
  Containername: Logstash
  Hostname: logstash
  Bild: logstash:7.5.1
  Befehl: logstash -f ./conf/logstash-filebeat.conf
  Neustart: immer
  Bände:
   # Zuordnung zum Container - ./logstash/conf/logstash-filebeat.conf:/usr/share/logstash/conf/logstash-filebeat.conf
   - ./logstash/ssl:/usr/share/logstash/ssl
  Umfeld:
   - elasticsearch.hosts=http://es-master:9200
   # Beheben Sie den Verbindungsfehler beim Logstash-Monitoring – xpack.monitoring.elasticsearch.hosts=http://es-master:9200
  Häfen:
   -5044:5044
  hängt ab von:
   -es-master
   -es-slave1
   -es-slave2

Filebeat ist hier auskommentiert und es ist geplant, Filebeat auf jedem Server, der Protokolle erfassen muss, separat bereitzustellen.

Denken Sie daran, chmod 777 für Elasticsearch-Daten und -Protokolle festzulegen

es-master.yml

# 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:
 -es-master
 -es-slave1
 -es-slave2
# 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:
 -es-master
# Unterstützt domänenübergreifenden Zugriff http.cors.enabled: true
http.cors.allow-origin: "*"
# Sicherheitsauthentifizierung xpack.security.enabled: false
#http.cors.allow-headers: "Autorisierung"

es-slave1.yml

# 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:
 -es-master
 -es-slave1
 -es-slave2
# 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:
 -es-master
# Unterstützt domänenübergreifenden Zugriff http.cors.enabled: true
http.cors.allow-origin: "*"
# Sicherheitsauthentifizierung xpack.security.enabled: false
#http.cors.allow-headers: "Autorisierung"

es-slave2.yml

# Clustername cluster.name: es-cluster
#KnotennameKnoten.name: es-slave2
# 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: 9202
# Stellen Sie den TCP-Port für die Kommunikation zwischen Knoten ein #transport.port: 9302
# Cluster-Erkennung discovery.seed_hosts:
 -es-master
 -es-slave1
 -es-slave2
# 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:
 -es-master
# Unterstützt domänenübergreifenden Zugriff http.cors.enabled: true
http.cors.allow-origin: "*"
# Sicherheitsauthentifizierung xpack.security.enabled: false
#http.cors.allow-headers: "Autorisierung"

logstash-filebeat.conf

Eingabe {
  # Quellbeats
  schlägt {
    # Port-Port => "5044"
    ssl_certificate_authorities => ["/usr/share/logstash/ssl/ca.crt"]
    ssl_certificate => "/usr/share/logstash/ssl/server.crt"
    ssl_key => "/usr/share/logstash/ssl/server.key"
    ssl_verify_mode => "Peer_erzwingen"
  }
}
# Analyse- und Filter-Plugins, mehrere Filter sind möglich {
  grok {
    Übereinstimmung => { "Nachricht" => "%{COMBINEDAPACHELOG}"}
  }
  geoip
    Quelle => "ClientTip"
  }
}
Ausgabe {
  # Elasticsearch auswählen
  elastische Suche
    Hosts => ["http://es-master:9200"]
    index => "%{[Felder][Dienst]}-%{[@Metadaten][Version]}-%{+JJJJ.MM.tt}"
  }
}

filebeat.yml

Dateibeat.Eingaben:
 - Typ: Protokoll
  aktiviert: true
  Pfade:
   # Alle .log-Dateien im aktuellen Verzeichnis - /root/tmp/logs/*.log
  Felder:
   Dienst: "our31-java"
  mehrzeiliges Muster: ^\[
  multiline.negate: true
  multiline.match: nach
 - Typ: Protokoll
  aktiviert: true
  Pfade:
   # Alle .log-Dateien im aktuellen Verzeichnis - /root/tmp/log/*.log
  Felder:
   Dienst: „our31-nginx“

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

# setup.template.einstellungen:
# index.Anzahl_der_Scherben: 1

# setup.dashboards.enabled: false

# setup.kibana:
# Host: "http://localhost:5601"

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

setup.ilm.enabled: false

Ausgabe.logstash:
 Hosts: ["logstash.server.com:5044"]
 
 # Optionales SSL. Standardmäßig deaktiviert.
 # Liste der Stammzertifikate für HTTPS-Serverüberprüfungen
 ssl.Zertifikatsautoritäten: "./ssl/ca.crt"
 # Zertifikat für SSL-Client-Authentifizierung
 ssl.Zertifikat: "./ssl/client.crt"
 # Client-Zertifikatschlüssel
 ssl.key: "./ssl/client.key"

# Prozessoren:
# - Host-Metadaten hinzufügen: ~
# - add_cloud_metadata: ~

Beachten

Generieren Sie ein Zertifikat, konfigurieren Sie SSL und richten Sie SSL zwischen Filebeat und Logstash ein.

#Generieren Sie einen privaten CA-Schlüssel openssl genrsa 2048 > ca.key
 
#Verwenden Sie den privaten CA-Schlüssel, um das CA-Zertifikat zu erstellen openssl req -new -x509 -nodes -key ca.key -subj /CN=elkCA\ CA/OU=Development\ group/O=HomeIT\ SIA/DC=elk/DC=com > ca.crt
 
#Server-CSR-Zertifikatanforderungsdatei generieren openssl req -newkey rsa:2048 -nodes -keyout server.key -subj /CN=logstash.server.com/OU=Development\ group/O=Home\ SIA/DC=elk/DC=com > server.csr
 
#Verwenden Sie CA-Zertifikat und privaten Schlüssel, um Serverzertifikat auszustellen openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 > server.crt
 
#Client-CSR-Zertifikatanforderungsdatei generieren openssl req -newkey rsa:2048 -nodes -keyout client.key -subj /CN=filebeat.client.com/OU=Development\ group/O=Home\ SIA/DC=elk/DC=com > client.csr
 
#Verwenden Sie CA-Zertifikat und privaten Schlüssel, um Client-Zertifikat auszustellen openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 > client.crt

Denken Sie daran, das Zertifikat im entsprechenden Ordner abzulegen.

Der in output.logstash.hosts in Filebeat konfigurierte Domänenname muss mit dem Zertifikat übereinstimmen.

Dynamisches Generieren von Indizes basierend auf verschiedenen Servern, verschiedenen Diensten und verschiedenen Daten

Im obigen Bild werden einige benutzerdefinierte Attribute hinzugefügt. Diese Attribute werden an Logstash übergeben, das diese Attribute übernimmt und dynamisch Indizes in Elasticsearch erstellt, wie unten gezeigt:

Eine ausführliche Einführung finden Sie in der offiziellen Dokumentation, in den Metadaten und in der dynamischen Indexgenerierung.

Ursprünglich wollte ich hier Indizes dynamisch generieren, aber laut der offiziellen Konfiguration hat das nicht geklappt. Kann mir jemand sagen, warum?

Verwenden Sie die Nginx Http Basic-Autorisierung, um die Anmeldung bei Kibana zu verlangen

Verwenden Sie zunächst das Tool htpasswd um Benutzerinformationen zu generieren

$ yum -y installiere httpd-tools

Erstellen einer neuen Kennwortdatei

Erstellen einer neuen Kennwortdatei

Zusätzliche Benutzerinformationen:

Benutzerinformationen hinzufügen

Konfigurieren Sie abschließend Nginx:

Server {
  ......
  
  auth_basic "Kibana-Authentifizierung";
  auth_basic_user_file /usr/local/nginx/pwd/kibana/passwd;
  
  ......
}

So starten Sie Filebeat separat

$ nohup ./filebeat 2>&1 &

Starten Sie Docker Compose

Führen Sie es im Verzeichnis aus, in dem sich docker-compose.yml befindet:

$ docker-compose up --build -d

Dies ist das Ende dieses Artikels über die Implementierung der ELK-Bereitstellung mit einem Klick mit Docker Compose. Weitere Informationen zur ELK-Bereitstellung mit Docker Compose 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:
  • Docker-Compose-Tutorial: Installation und Schnellstart
  • Docker Compose stellt ein SpringBoot-Projekt bereit, um eine Verbindung zu MySQL herzustellen, und die dabei auftretenden Fallstricke
  • Lösen Sie das Problem der Containerverwaltung mit Docker Compose
  • Installations- und Verwendungsschritte für Docker Compose
  • Docker Compose-Übung und Zusammenfassung
  • Detaillierter Prozess für den Einstieg mit Docker Compose HelloWorld

<<:  MySQL verwendet einen abdeckenden Index, um Tabellenrückgaben zu vermeiden und die Abfrage zu optimieren

>>:  Anfänger lernen einige HTML-Tags (2)

Artikel empfehlen

Detaillierte Erklärung zur Verwendung der Linux-lseek-Funktion

Hinweis: Wenn der Artikel Fehler enthält, hinterl...

So rufen Sie die Browser-Sharing-Funktion in Vue auf

Vorwort Vue (ausgesprochen /vjuː/, ähnlich wie vi...

Eine kurze Diskussion über reguläre JS-RegExp-Objekte

Inhaltsverzeichnis 1. RegExp-Objekt 2. Grammatik ...

Implementierung der Navigationsleiste und des Dropdown-Menüs in CSS

1. CSS-Navigationsleiste (1) Funktion der Navigat...

Eine kurze Einführung in die Kernkenntnisse der VUE uni-app

Inhaltsverzeichnis Spezifikation a. Die Auslageru...

Erfahren Sie, wie nginx hohe Leistung und Skalierbarkeit erreicht.

Die Gesamtarchitektur von NGINX ist durch eine Re...

Verwendung der MySQL-Anweisung „truncate table“

Mit der Anweisung „Truncate table“ werden alle Da...

Zwei Möglichkeiten, damit IE6 Bilder im PNG-24-Format normal anzeigt

Methode 1: Bitte fügen Sie den folgenden Code nach...

Wie werden Vue-Komponenten analysiert und gerendert?

Vorwort In diesem Artikel wird erklärt, wie Vue-K...

Alibaba Cloud Centos7.3-Installation, MySQL5.7.18 RPM-Installations-Tutorial

Deinstallieren Sie MariaDB CentOS7 installiert st...

Weitere beliebte und kreative Beispiele für Webdesign mit dunklem Hintergrund

Seitendesigns im dunklen Hintergrundstil sind seh...

Vue implementiert eine kleine Countdown-Funktion

In vielen Projekten muss eine Countdown-Funktion ...