TheElastic Stack kann eine Vielzahl von Daten überwachen, die von Docker-Containern generiert werden. In diesem Leitfaden richten Sie Linode ein, um Containerprotokolle und -metriken mit Tools wie Kibana, Beats und Elasticsearch zu analysieren und zu visualisieren. Sobald Sie fertig sind, können Sie Ihr System so konfigurieren, dass Daten für zusätzliche Container automatisch erfasst werden.
Bevor Sie beginnen
-
Wenn Sie dies noch nicht getan haben, erstellen Sie ein Linode-Konto und eine Compute-Instanz. Sehen Sie sich unsere Leitfäden Erste Schritte mit Linode und Erstellen einer Compute-Instanz an.
-
Folgen Sie unserem Leitfaden zum Einrichten und Sichern einer Compute-Instanz, um Ihr System zu aktualisieren. Möglicherweise möchten Sie auch die Zeitzone festlegen, Ihren Hostnamen konfigurieren, ein eingeschränktes Benutzerkonto erstellen und den SSH-Zugriff sichern.
-
Folgen Sie unserem UFW-Leitfaden, um eine Firewall (UFW) auf Ihrem Ubuntu- oder Debian-basierten System zu installieren und zu konfigurieren, oder unserem FirewallD-Leitfaden für RPM- oder CentOS-basierte Systeme. Stellen Sie nach dem Konfigurieren der Firewall sicher, dass die erforderlichen Ports geöffnet sind, um für den Rest dieses Handbuchs mit Verbindungen über SSH fortzufahren:
sudo ufw allow ssh
-
Installieren Sie Docker auf Ihrem Linode, indem Sie der Installationsanleitung des Docker-Projekts folgen.
Hinweis Die Dienste in diesem Handbuch sind nur an localhost gebunden, was bedeutet, dass sie außerhalb von Linode nicht von entfernten Hosts aus zugänglich sind. Dadurch wird sichergestellt, dass die REST-API von Elasticsearch für localhost privat bleibt und nicht aus der Ferne über das Internet zugänglich ist. Wenn Sie Schritte über diese Anleitung hinaus unternehmen, um Elasticsearch und zugehörige Komponenten weiter zu konfigurieren, stellen Sie sicher, dass Ihre Firewall vorhanden ist und den Datenverkehr zu den Elasticsearch- und Kibana-Knoten aus dem Internet korrekt blockiert (Ports 9200 und 9300 für Elasticsearch und 5601 für Kibana), um sie zu behalten richtig gesichert.
Installieren Sie Elastic Stack-Komponenten
Bevor Sie Ihr System zur Überwachung laufender Container konfigurieren, installieren Sie zunächst die Komponenten, die zum Sammeln und Senden von Protokollen und Metriken an Elasticsearch erforderlich sind.
Debian-basierte Distributionen
Konfigurieren Sie das Elastic apt
Repository und installieren Sie die erforderlichen Pakete und ihre Abhängigkeiten.
-
Installieren Sie den offiziellen Signaturschlüssel für das Elastic APT-Paket:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
-
Installieren Sie
apt-transport-https
Paket, das zum Abrufen vondeb
erforderlich ist Pakete, die über HTTPS bereitgestellt werden:sudo apt-get install apt-transport-https
-
Fügen Sie die APT-Repository-Informationen zur Quellenliste Ihres Servers hinzu:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
-
Aktualisieren Sie die Liste der verfügbaren Pakete:
sudo apt-get update
-
Vor der Installation von Elasticsearch muss die Java-Laufzeitumgebung vorhanden sein. Verwenden Sie auf Systemen wie Ubuntu 18.04 LTS den
default-jre-headless
Paket installiert eine kompatible Java-Laufzeitumgebung:sudo apt-get install default-jre-headless
-
Installieren Sie Elasticsearch, Kibana, Filebeat und Metricbeat:
sudo apt-get install elasticsearch kibana filebeat metricbeat
Redhat-basierte Distributionen
Konfigurieren Sie die rpm
Repository für yum
und zugehörige Verpackungswerkzeuge.
-
Vertrauen Sie dem Elastic-Signaturschlüssel:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
Erstellen Sie eine Yum-Repository-Konfiguration, um das Elastic Yum-Repository zu verwenden:
- Datei:/ etc/yum.repos.d/elasticsearch.repo
1 2 3 4 5 6 7 8 9
[elasticsearch-6.x] name=Elastic repository for 6.x packages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
-
Aktualisieren Sie
yum
zwischenspeichern, um sicherzustellen, dass neue Pakete verfügbar werden:sudo yum update
-
Vor der Installation von Elasticsearch muss die Java-Laufzeitumgebung vorhanden sein. Unter CentOS kann beispielsweise eine kompatible Java-Laufzeitumgebung mithilfe eines Headless-OpenJDK-Pakets installiert werden:
sudo yum install java-11-openjdk-headless
-
Installieren Sie Elasticsearch, Kibana, Filebeat und Metricbeat:
sudo yum install elasticsearch kibana filebeat metricbeat
Konfigurieren Sie den Elastic Stack
Um Containermetriken richtig zu erkennen und zu erfassen, sollte jede Komponente des Elastic-Stacks konfiguriert werden.
Elasticsearch
In der Datei /etc/elasticsearch/jvm.options
zwei Werte, die mit -Xm
beginnen sollte unkommentiert sein. Diese Einstellungen weisen die JVM an, eine bestimmte Speichermenge zuzuweisen. Der empfohlene Wert für diese Einstellungen beträgt 50 % des verfügbaren System-RAM. Auf einem System mit 1 GB RAM sollten diese Einstellungen beispielsweise wie folgt lauten:
- Datei:/ etc/elasticsearch/jvm.options
1 2
-Xms512m -Xmx512m
-
Bevor Sie Elasticsearch starten, installieren Sie einige notwendige Plugins, um GeoIP- und User-Agent-Daten zu verarbeiten.
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
-
Starten Sie mit diesen Einstellungen die
elasticsearch
Dienst.sudo systemctl start elasticsearch
-
Warten Sie kurz, bis Elasticsearch gestartet ist, und überprüfen Sie dann, ob Elasticsearch über die REST-API antwortet:
curl http://localhost:9200
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
{ "name" : "iQEk_-M", "cluster_name" : "elasticsearch", "cluster_uuid" : "tQeLgbKrTNOp2AoqdmTItw", "version" : { "number" : "6.5.4", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "d2ef93d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
Elasticsearch ist bereit, Dokumente zu indizieren.
Kibana
Die meisten Standardeinstellungen von Kibana sind für die Zwecke dieses Handbuchs geeignet. Es sind keine Konfigurationsänderungen erforderlich; Starten Sie das kibana
Dienst.
sudo systemctl start kibana
Filebeat
Verwenden Sie den docker
Eingabe, damit Filebeat gestartete Container dynamisch erfassen kann. Dadurch entfällt die Notwendigkeit, Docker-Protokolldateipfade anzugeben, und stattdessen kann Filebeat Container beim Start erkennen.
-
Fügen Sie am Anfang der Filebeat-Konfigurationsdatei Folgendes hinzu, um
filebeat
anzuweisen Daemon zum Erfassen von Docker-Containerprotokollen. Diese Zeilen sind unter dem Konfigurationsschlüsselfilebeat.inputs
einzutragen :- Datei:/ etc/filebeat/filebeat.yml
1 2 3 4 5 6
filebeat.inputs: - type: docker containers.ids: - '*' processors: - add_docker_metadata: ~
-
Kommentieren Sie die folgende Zeile aus und ändern Sie ihren Wert in
true
, die es Filebeat ermöglicht, zugehörige Kibana-Dashboards für erfasste Containerprotokolle zu erstellen:- Datei:/ etc/filebeat/filebeat.yml
1
setup.dashboards.enabled: true
-
Fügen Sie abschließend die folgende
autodiscover
hinzu Konfiguration bis zum Ende derfilebeat.yml
Datei:- Datei:/ etc/filebeat/filebeat.yml
1 2 3 4
filebeat.autodiscover: providers: - type: docker hints.enabled: true
-
Aktivieren Sie
nginx
Modul, das später in diesem Tutorial verwendet wird:sudo /usr/bin/filebeat modules enable nginx
-
Der Rest der Konfigurationsdatei weist Filebeat an, Protokolle an die lokal ausgeführte Elasticsearch-Instanz zu senden, die unverändert bleiben kann. Filebeat starten:
sudo systemctl start filebeat
Metricbeat
Konfigurieren Sie Metricbeat ähnlich wie Filebeat, um laufende Container zur Überwachung dynamisch zu erkennen.
-
Metricbeat verwendet ein Modul zum Sammeln von Containermetriken. Geben Sie den folgenden Befehl aus, um
docker
zu aktivieren undnginx
Module:sudo /usr/bin/metricbeat modules enable docker sudo /usr/bin/metricbeat modules enable nginx
-
Kommentieren Sie die folgende Zeile aus und ändern Sie ihren Wert in
true
, was es Metricbeat ermöglicht, zugehörige Kibana-Dashboards für erfasste Containerprotokolle zu erstellen:- Datei:/ etc/metricbeat/metricbeat.yml
1
setup.dashboards.enabled: true
-
Der Rest der Konfigurationsdatei weist Metricbeat an, Protokolle an die lokal ausgeführte Elasticsearch-Instanz zu senden, die unverändert bleiben kann. Metricbeat kann jetzt gestartet werden:
sudo systemctl start metricbeat
Visualisierung von Containerprotokollen und -metriken
Das folgende Beispiel zeigt, wie Filebeat und Metricbeat automatisch Containerdaten erfassen, auf die in Kibana zugegriffen werden kann.
-
Führen Sie zunächst einen einfachen Nginx-Docker-Container auf Ihrem Linode aus.
sudo docker run --name nginx -P -d --label co.elastic.logs/module=nginx nginx
- Dieser Befehl führt den Webserver im Hintergrund aus und stellt den lauschenden HTTP-Dienst unter einer zufälligen Portnummer bereit.
- Das
--label
Das Argument ist ein Hinweis darauf, dass Filebeat automatisch das Protokollformat bestimmter Containertypen parst, in diesem Fall nginx.
-
Um eine sichere Verbindung zu Kibana herzustellen, öffnen Sie einen SSH-Tunnel zu Port 5601 auf Ihrem Linode.
ssh -L 5601:localhost:5601 <[email protected]>
- Ersetzen Sie
<[email protected]>
mit dem Benutzernamen und der IP-Adresse Ihres Linode. - Dies leitet Port 5601 lokal an Port 5601 auf Ihrem Linode weiter.
- Eine umfassende Anleitung zur Verwendung von SSH-Tunneln auf einer Vielzahl von Plattformen finden Sie in unserem Leitfaden zum Erstellen eines SSH-Tunnels für MySQL.
- Ersetzen Sie
-
Navigieren Sie zu
http://localhost:5601
in Ihrem Browser, der die folgende Einstiegsseite für Kibana anzeigt. -
Klicken Sie auf Verwaltung Link in der unteren linken Seitenleiste. Die folgende Seite wird angezeigt. Klicken Sie dann auf Indexmuster , um die Konfigurationsseite für das Indexmuster aufzurufen.
-
Indexmuster bestimmen, wie Kibana Indizes versteht, die in Elasticsearch vorhanden sind. Damit einige Visualisierungen richtig angezeigt werden, muss zunächst ein Standardindexmuster konfiguriert werden. Wählen Sie filebeat-* aus links auf der Seite, um das Indexmuster filebeat-* zu konfigurieren.
-
Klicken Sie auf das Sternsymbol in der oberen rechten Ecke der Seite, um dieses Indexmuster als Standard in Kibana festzulegen.
Kibana ist jetzt ordnungsgemäß mit einem Standardindexmuster konfiguriert.
-
Filebeat und Metricbeat sind so eingerichtet, dass sie Elasticsearch und Kibana automatisch konfigurieren, sodass Dashboards und Indexmuster geladen und einsatzbereit sind. Klicken Sie auf Dashboard in der linken Seitenleiste, die die folgende Seite anzeigt.
-
Geben Sie in der Suchleiste „Container“ ein, um vorab ausgefüllte Dashboards für Systemcontainer anzuzeigen. Klicken Sie auf die [Metricbeat Docker]-Übersicht verlinken.
-
Die [Metricbeat Docker]-Übersicht Dashboard wird geladen, das verschiedene Aspekte der aktuell ausgeführten Containermetriken zeigt. Das Dashboard zeigt eine Liste der ausgeführten Container, die Gesamtzahl der ausgeführten, angehaltenen und gestoppten Container sowie Metriken zum Container-Ressourcenverbrauch an.
Wenn Sie weiter nach unten scrollen, werden auch Diagramme angezeigt, die die Container-Ressourcennutzung im Laufe der Zeit anzeigen, einschließlich CPU-, Arbeitsspeicher- und Netzwerkaktivität.
-
Bevor Sie zu anderen Kibana-Visualisierungen übergehen, generieren Sie einige Protokollaktivitäten von nginx, indem Sie HTTP-Anforderungen an den lauschenden Container senden. Finden Sie zuerst mit dem
docker
heraus, auf welchem Port der Container auf Anfragen lauscht Befehl:docker ps
Sie sollten eine Ausgabe ähnlich der folgenden sehen:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f0c6d284f1f nginx "nginx -g 'daemon of…" 23 minutes ago Up 23 minutes 0.0.0.0:32769->80/tcp nginx
Aus dieser Ausgabe wissen wir, dass der HTTP-Server erreicht werden kann, indem Anfragen an Port 32769 gesendet werden, der an Port 80 im Container weitergeleitet wird. Der Port auf Ihrem System kann ein anderer sein.
-
Senden Sie mit
curl
mehrere Anfragen an diesen Port Befehl, wobei<port>
ersetzt wird mit der im vorherigen Schritt gefundenen Nummer:for i in $(seq 1 10) ; do curl localhost:<port> ; done
-
Jetzt sind in Kibana eine Reihe von Protokollen für diesen Container vorhanden. Klicken Sie auf Entdecken in der linken Seitenleiste in Kibana. Es zeigt den folgenden Bildschirm an.
- Das Histogramm oben auf der Seite zeigt die Gesamtzahl der Containerprotokolle im Laufe der Zeit an.
- Die Tabelle unterhalb des Diagramms enthält die Inhalte der einzelnen Protokollinhalte.
- Durch Klicken auf die Pfeile links neben dem Zeitstempel jedes Protokolls werden die Informationen für jedes erfasste Protokoll angezeigt.
-
Versuchen Sie, den vorherigen
for ...
erneut auszugeben Befehl, weitere zehncurl
zu senden Anfragen an den Container und beobachten Sie, wie sich das Protokollhistogramm ändert, um die neuen Protokolle widerzuspiegeln. -
Klicken Sie auf Dashboard in der linken Seitenleiste und klicken Sie dann ein zweites Mal darauf, um den Dashboard-Auswahlbildschirm aufzurufen. Suchen Sie in der Suchleiste nach „nginx“.
-
Klicken Sie auf die [Filebeat Nginx] Zugriffs- und Fehlerprotokolle Link, der ein Dashboard mit einer Reihe von Visualisierungen bezüglich der Nginx-Aktivität anzeigt.
Zusätzliche Module
Dieses Tutorial hat gezeigt, wie Filebeat und Metricbeat Container-Metriken und Protokolle automatisch erfassen können, ohne Protokolldateipfade oder -konfigurationen explizit konfigurieren zu müssen. Zusätzlich zu den hier vorgestellten nginx-Beispielen führen die unten bereitgestellten zusätzlichen Links weitere Module auf, die für andere Dienste in Filebeat und Metricbeat geladen werden können.
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- Filebeat-Module
- Metricbeat-Module
- Überwachung elastischer Behälter
- Docker-Befehlszeilenreferenz