Verwalten Ihres Kubernetes-Clusters mit Elastic Observability

Als Operations Engineer (SRE, IT-Manager, DevOps) haben Sie ständig damit zu tun, den Technologie- und Datenwildwuchs in den Griff zu bekommen. Die Verbreitung von Kubernetes nimmt immer mehr zu und die meisten dieser Implementierungen erfolgen in Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE) oder Azure Kubernetes Service (AKS). Einige von Ihnen nutzen vielleicht nur eine Cloud, während andere Cluster auf mehreren Kubernetes-Cloud-Diensten verwalten müssen. Zusätzlich zur Komplexität des Umgangs mit mehreren Cloud-Anbietern müssen Sie auch Hunderte von bereitgestellten Diensten verwalten, die ständig neue Observability- und Telemetriedaten erzeugen.

Die größte Herausforderung besteht wahrscheinlich darin, anhand der Logs, Metriken und Traces, die Ihre Kubernetes-Cluster und die darauf ausgeführten Anwendungen erzeugen, deren Status und Zustand zu verstehen. Während Sie als Operations Engineer all diese wichtigen Daten benötigen, um Probleme verhindern, vorhersagen und beheben zu können, ist ihre schiere Menge viel zu groß, wenn es darum geht, Kubernetes-Telemetriedaten für die Fehlersuche und ‑behebung und für Support-Zwecke zu visualisieren und zu analysieren.

Elastic Observability hilft dabei, den Wildwuchs an Kubernetes-Metriken und -Logs in den Griff zu bekommen, indem es umfassende und zentralisierte Observability-Funktionen bietet, die über das reine Logging hinausgehen, für das wir bekannt sind. Sie erhalten mit Elastic Observability detaillierte Einblicke in das Verhalten Ihrer Kubernetes-Cluster und der auf ihnen ausgeführten Anwendungen, weil alle Metriken, Logs und Traces über OpenTelemetry- und APM-Agents zusammengeführt werden.

Elastic Observability macht das Kubernetes-Monitoring einfach – gleich, ob auf EKS, GKE, AKS oder selbstverwaltet und unabhängig von der Anwendung. Es führt sämtliche Node-, Pod-, Container-, Anwendungs- und Infrastrukturmetriken (AWS, GCP, Azure), alle Infrastruktur- und Anwendungsprotokolle und alle Anwendungs-Traces an einem zentralen Ort zusammen.

In diesem Blogpost zeigen wir, …

  • … wie Elastic Cloud Metriken und Logdaten über den Elastic Agent (der einfach als DaemonSet auf Ihrem Cluster bereitgestellt werden kann) aggregieren und ingestieren kann, um Logdaten und Metriken vom Host (Systemmetriken, Containerstatistiken) sowie Logdaten von allen auf Kubernetes laufenden Diensten abzurufen.
  • … wie Elastic Observability ein konsistentes Telemetrie-Nutzungserlebnis (Logdaten, Metriken, Traces) über alle Ihre Kubernetes-Cluster-Komponenten (Pods, Nodes, Dienste, Namespaces usw.) hinweg bieten kann.
Elastic Agent mit Kubernetes-Integration
Elastic Agent mit Kubernetes-Integration

Voraussetzungen und Konfiguration

Wenn Sie die in diesem Blogpost beschriebenen Schritte für sich nachvollziehen möchten, sollten Sie Folgendes beachten:

  • Sie benötigen ein Konto auf Elastic Cloud und ein entsprechendes Stack-Deployment (eine Anleitung finden Sie hier).
  • In unserem Beispiel befindet sich das Kubernetes-Cluster auf GKE, Ihr Kubernetes-Cluster kann sich aber auch an jedem anderen Ort befinden.
  • Wir haben eine Variante der beliebten HipsterShop-Demoanwendung verwendet. Sie wurde ursprünglich von Google geschrieben, um Kubernetes für eine Vielzahl von Varianten zu präsentieren, wie z. B. die Demoanwendung für OpenTelemetry. Um die App zu verwenden, rufen Sie diese Seite auf und befolgen Sie die Bereitstellungsanleitung. Die Bereitstellung von otelcollector ist für das Ingestieren von Kubernetes-Metriken nicht unbedingt notwendig – dazu später mehr.
  • Elastic unterstützt zwar das native Ingestieren aus Prometheus und FluentD, aber in diesem Blogpost zeigen wir, wie Sie das direkte Ingestieren aus dem Kubernetes-Cluster über Elastic Agent einrichten können. In einem künftigen Blogpost wird es dann darum gehen, wie Elastic auch Telemetrie-Daten aus Prometheus oder FluentD/bit abrufen kann.

Was können Sie mit Elastic beobachten und analysieren?

Bevor wir uns die einzelnen Schritte ansehen, mit denen Elastic für das Ingestieren und Visualisieren von Metriken und Logdaten aus einem Kubernetes-Cluster eingerichtet werden kann, werfen wir noch einen kurzen Blick auf die Dashboards von Elastic.

Wie erwähnt haben wir eine Variante von HipsterShop auf GKE ausgeführt und Elastic Agent mit Kubernetes-Integration als DaemonSet auf dem GKE-Cluster bereitgestellt. Nach dem Bereitstellen der Agents beginnt Elastic mit dem Ingestieren von Metriken aus dem Kubernetes-Cluster (insbesondere von kube-state-metrics) und zusätzlich holt sich Elastic alle Loginformationen vom Cluster.

Visualisieren von Kubernetes-Metriken in Elastic Observability

Im Folgenden finden Sie ein paar Kubernetes-Dashboards, die in Elastic Observability standardmäßig enthalten sind:

Elastic-Kubernetes-Überblicks-Dashboard mit HipsterShop-Cluster-Metriken
Elastic-Kubernetes-Überblicks-Dashboard mit HipsterShop-Cluster-Metriken
Pod-Dashboard in Elastic Observability mit HipsterShop-Standard-Namespace-Daten
Pod-Dashboard in Elastic Observability mit HipsterShop-Standard-Namespace-Daten

Neben dem Cluster-Überblicks-Dashboard und dem Pod-Dashboard bietet Elastic weitere nützliche Dashboards out of the box:

  • Kubernetes-Überblicks-Dashboard (siehe oben)
  • Kubernetes-Pod-Dashboard (siehe oben)
  • Kubernetes-Nodes-Dashboard
  • Kubernetes-Deployments-Dashboard
  • Kubernetes-DaemonSets-Dashboard
  • Kubernetes-StatefulSets-Dashboards
  • Kubernetes-CronJob- und Jobs-Dashboards
  • Kubernetes-Dienste-Dashboards
  • Weitere werden im Laufe der Zeit hinzukommen

Diese Dashboards können Sie an Ihre Bedürfnisse anpassen und Sie können auch eigene Dashboards erstellen.

Arbeiten mit Logdaten in Elastic Observability

Kubernetes-Container- und Elastic Agent-Logdaten
Kubernetes-Container- und Elastic Agent-Logdaten

Wie die Screenshots oben zeigen, kann ich nicht nur Kubernetes-Cluster-Metriken abrufen, sondern auch alle Kubernetes-Logdaten, indem ich einfach in meinem Kubernetes-Cluster den Elastic Agent nutze.

Vermeiden, Vorhersagen und Beheben von Problemen

Elastic kann aber nicht nur helfen, Metriken und Logdaten zu verwalten, sondern auch dazu verwendet werden, Anomalien in Ihrer Cluster-Telemetrie zu erkennen und vorherzusagen. Wenden Sie dazu einfach das Machine Learning von Elastic auf Ihre Daten an und beobachten Sie, wie Elastic Ihnen hilft, Ihre Analysearbeit zu verbessern. Wie Sie unten sehen können, ist Elastic nicht nur ein zentraler Observability-Speicherort für die Logdaten und Metriken aus Ihrem Kubernetes-Cluster, sondern es bietet auch umfangreiche echte Machine-Learning-Funktionen zur Verbesserung Ihrer Analyse und Verwaltung.

Erkennen von Anomalien in Logdaten in Elastic Observability
Erkennen von Anomalien in Logdaten in Elastic Observability
Analysieren von Problemen in einem Kubernetes-Pod mit Elastic Observability
Analysieren von Problemen in einem Kubernetes-Pod mit Elastic Observability

Im oberen Diagramm sehen Sie die Anomalieerkennung in Logdaten in Aktion. Dem Diagramm ist zu entnehmen, dass im Zeitraum vom 21. bis 23. September möglicherweise etwas nicht gestimmt hat. Näheres dazu erfahren wir im unteren Diagramm, indem wir eine einzelne „kubernetes.pod.cpu.usage.node“-Metrik analysieren und so erfahren, dass es Anfang September und dann noch einmal später in diesem Monat Probleme gab. Mit Machine Learning können Sie noch umfangreichere Analysen an Ihren Cluster-Telemetriedaten vornehmen, indem Sie nicht nur eine einzelne Metrik, wie oben, sondern mehrere Metriken analysieren sowie mit Populationsanalysen arbeiten.

Elastic bietet Ihnen bessere Machine-Learning-Funktionen, mit denen sich die Telemetriedaten aus Ihrem Kubernetes-Cluster besser analysieren lassen. Im nächsten Abschnitt beschäftigen wir uns damit, wie einfach es ist, Telemetriedaten in Elastic zu importieren.

Einrichtung

Sehen wir uns genauer an, was Sie tun müssen, um Metriken, Logdaten und Traces aus einer auf GKE bereitgestellten HipsterShop-Anwendung in Elastic zu importieren.

Wählen Sie als Erstes Ihre Lieblingsversion von Hipstershop aus. Wir haben, wie oben erwähnt, eine Variante der OpenTelemetry-Demo verwendet, weil sie bereits mit OTel ausgestattet ist. Für diesen Blogpost haben wir das Ganze aber etwas schlanker gemacht (weniger Dienste mit ein paar verschiedenen Sprachen).

Schritt 0: Konto auf Elastic Cloud erstellen

Befolgen Sie die Anleitung zum Einstieg in Elastic Cloud.

Schritt 1: Kubernetes-Cluster einrichten und Ihre Kubernetes-App in Ihren Cluster laden

Stellen Sie Ihre Anwendung in einem Kubernetes-Cluster in einem Cloud-Dienst Ihrer Wahl oder auf einer lokalen Kubernetes-Plattform bereit. Sobald Ihre Anwendung auf Kubernetes läuft, sollten im Namespace default die folgenden Pods (oder Varianten davon) ausgeführt werden.

NAME                                    READY   STATUS    RESTARTS   AGE
adservice-8694798b7b-jbfxt              1/1     Running   0          4d3h
cartservice-67b598697c-hfsxv            1/1     Running   0          4d3h
checkoutservice-994ddc4c4-p9p2s         1/1     Running   0          4d3h
currencyservice-574f65d7f8-zc4bn        1/1     Running   0          4d3h
emailservice-6db78645b5-ppmdk           1/1     Running   0          4d3h
frontend-5778bfc56d-jjfxg               1/1     Running   0          4d3h
jaeger-686c775fbd-7d45d                 1/1     Running   0          4d3h
loadgenerator-c8f76d8db-gvrp7           1/1     Running   0          4d3h
otelcollector-5b87f4f484-4wbwn          1/1     Running   0          4d3h
paymentservice-6888bb469c-nblqj         1/1     Running   0          4d3h
productcatalogservice-66478c4b4-ff5qm   1/1     Running   0          4d3h
recommendationservice-648978746-8bzxc   1/1     Running   0          4d3h
redis-cart-96d48485f-gpgxd              1/1     Running   0          4d3h
shippingservice-67fddb767f-cq97d        1/1     Running   0          4d3h

Schritt 2: kube-state-metrics aktivieren

Als Nächstes müssen Sie kube-state-metrics aktivieren.

Geben Sie als Erstes Folgendes ein:

git clone https://github.com/kubernetes/kube-state-metrics.git

Wenden Sie dann auf das Verzeichnis „kube-state-metrics“ unter dem Verzeichnis „examples“ einfach die Standardkonfiguration an.

kubectl apply -f ./standard

Dadurch wird kube-state-metrics aktiviert und Sie müssten einen Pod ähnlich dem folgenden sehen, der im Namespace kube-system ausgeführt wird.

kube-state-metrics-5f9dc77c66-qjprz                    1/1     Running   0          4d4h

Schritt 3: Mit der Kubernetes-Integration den Elastic Agent installieren

Fügen Sie die Kubernetes-Integration hinzu:

  1. Gehen Sie in Elastic zu den Integrationen, wählen Sie die Kubernetes-Integration aus und wählen Sie dann „Add Kubernetes“.
  2. Legen Sie einen Namen für die Kubernetes-Integration fest.
  3. Aktivieren Sie im Konfigurationsbildschirm kube-state-metrics.
  4. Geben Sie im Textfeld new-agent-policy-name einen Namen für die Konfiguration ein.
  5. Speichern Sie die Konfiguration. Damit ist die Integration mit einer Richtlinie erstellt.

Informationen zu den Agent-Richtlinien und wie diese im Elastic Agent verwendet werden, finden Sie hier.

  1. Fügen Sie die Kubernetes-Integration hinzu.
  2. Wählen Sie die Richtlinie aus, die Sie gerade erstellt haben.
  3. Kopieren Sie im dritten Schritt der Anweisungen zum Hinzufügen eines Agents das Manifest und fügen Sie es ein oder laden Sie es herunter.
  4. Fügen Sie das Manifest zu der Shell hinzu, in der kubectl ausgeführt wird, speichern Sie es als elastic-agent-managed-kubernetes.yaml und führen Sie dann den folgenden Befehl aus:
kubectl apply -f elastic-agent-managed-kubernetes.yaml

Sie müssten jetzt im Namespace kube-system eine Reihe von Agents als Teil eines DaemonSet sehen.

NAME                                                   READY   STATUS    RESTARTS   AGE
elastic-agent-qr6hj                                    1/1     Running   0          4d7h
elastic-agent-sctmz                                    1/1     Running   0          4d7h
elastic-agent-x6zkw                                    1/1     Running   0          4d7h
elastic-agent-zc64h                                    1/1     Running   0          4d7h

In meinem Cluster habe ich vier Nodes und vier Elastic-Agents, die als Teil des DaemonSet gestartet wurden.

Schritt 4: Die standardmäßigen Elastic-Dashboards für Kubernetes-Metriken aufrufen und mit der Analyse von Kubernetes-Logdaten beginnen

Das wars! Wenn alles so läuft, wie es soll, können Sie jetzt dabei zusehen, wie all Ihre Dashboards mit Metriken versorgt werden. Falls Sie sich Logs für bestimmte Pods ansehen möchten, gehen Sie einfach in Kibana zu Discover und suchen Sie nach dem gewünschten Pod-Namen.

Elastic-Kubernetes-Überblicks-Dashboard mit HipsterShop-Cluster-Metriken
Elastic-Kubernetes-Überblicks-Dashboard mit HipsterShop-Cluster-Metriken
Pod-Dashboard in Elastic Observability mit HipsterShop-Standard-Namespace-Daten
Pod-Dashboard in Elastic Observability mit HipsterShop-Standard-Namespace-Daten

Sie können zusätzlich auch alle Pod-Logs direkt in Elastic durchforsten.

frontendService- und cartService-Logs
frontendService- und cartService-Logs

Im Beispiel oben habe ich nach frontendService- und cartService-Logs gesucht.

Schritt 5: Bonus!

Da wir eine OTel-basierte Anwendung verwenden, kann Elastic sogar Anwendungs-Traces abrufen. Das ist aber ein Thema für einen anderen Blog.

Hier mal ein kurzer Eindruck davon, wie Hipster Shop-Traces für Front-End-Transaktionen in Elastic Observability aussehen.

Trace für eine Checkout-Transaktion für HipsterShop
Trace für eine Checkout-Transaktion für HipsterShop

Fazit: Für das Kubernetes-Monitoring ist Elastic Observability geradezu genial

Ich hoffe, dass ich Ihnen vermitteln konnte, wie Elastic Observability Ihnen bei der Verwaltung von Kubernetes-Clustern und bei der Bewältigung der Komplexität der Metriken, Logdaten und Traces helfen kann, die Elastic Observability selbst bei einem einfachen Deployment generiert.

Hier noch einmal eine kurze Zusammenfassung des Gelernten:

  • Sie haben gelernt, wie Elastic Cloud Telemetriedaten aggregieren und ingestieren kann und dazu den Elastic Agent nutzt, der einfach als DaemonSet auf Ihrem Cluster bereitgestellt wird und Metriken vom Host abruft, z. B. Systemmetriken, Containerstatistiken und Metriken von allen Diensten, die auf Kubernetes aufsetzen.
  • Sie haben gesehen, wie Elastic über alle Ihre Kubernetes-Cluster-Komponenten (Pods, Nodes, Services, Namespaces usw.) hinweg ein konsistentes Telemetrie-Nutzungserlebnis (Kubernetes-Logdaten, ‑Metriken, ‑Traces) ermöglicht.
  • Sie haben die Machine-Learning-Funktionen von Elastic kennengelernt, die Ihnen dabei helfen, Ihre MTTHH (Mean Time To Happy Hour) deutlich zu verkürzen.

Bereit loszulegen? Registrieren Sie sich und probieren Sie die Funktionen aus, die ich oben vorgestellt habe.