Sammeln und Weiterleiten von DigitalOcean Kubernetes (DOKS) Logs an DigitalOcean Managed OpenSearch

Einführung

Dieses Tutorial zeigt Ihnen, wie Sie Logs von einem DigitalOcean Kubernetes (DOKS)-Cluster in ein DigitalOcean Managed OpenSearch-Instanz mit AxoSyslog, einem skalierbaren Sicherheitsdatenprozessor, übertragen und weiterleiten können. Indem Sie dieses Handbuch befolgen, lernen Sie, wie Sie ein solides Logging-System einrichten können, das Logs Ihrer Kubernetes-Anwendungen aufnimmt und analysiert, was die Überwachung, Fehlerbehebung und die Sicherheit Ihrer Infrastruktur erleichtert.

In diesem Tutorial verwenden Sie AxoSyslog, um Logs von einem Kubernetes-Cluster in OpenSearch weiterzuleiten.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllt haben:

  1. Sie benötigen Zugriff auf ein DigitalOcean Cloud-Konto, um Ihre Kubernetes- und OpenSearch-Ressourcen zu erstellten und zu verwalten.
  2. Das DigitalOcean Command Line Interface (CLI)-Werkzeug, doctl, sollte auf Ihrem lokalen Rechner installiert und konfiguriert sein.
  3. Ein laufendes DigitalOcean Kubernetes (DOKS)-Cluster.
  4. Der Kubernetes-Paketmanager Helm, der zur Verwaltung von Kubernetes-Anwendungen installiert werden sollte.
  5. Vertrautheit mit Kubernetes, Helm und den von DigitalOcean verwalteten Dienstleistungen.

Anwendungsfall

Dieses Projekt ist ideal für Szenarien, in denen Sie eine zentralisierte Protokollierungslösung benötigen, um Protokolle von verschiedenen Anwendungen, die in einem Kubernetes-Cluster laufen, zu überwachen und analysieren. Egal, ob Sie ein kleines Set von Anwendungen oder eine großskalige Infrastruktur verwalten, die Sammlung und Weiterleitung von Protokollen zu einem dedizierten OpenSearch-Cluster hilft bei:

  • Sicherheitsüberwachung: Erkennen und reagieren Sie auf Sicherheitsincidenten durch die Analyse von Protokollen in Echtzeit.
  • Fehlerbehebung: Identifizieren und lösen Sie schnell Probleme in Ihren Kubernetes-Anwendungen, indem Sie detaillierte Protokolle einsehen.
  • Compliance: Halten Sie eine Protokollierung von Ereignissen für die Einhaltung von Branchenregelungen auf.

Durch die Integration von AxoSyslog mit DigitalOcean Managed OpenSearch können Sie effizient große Mengen an Protokollen verarbeiten und speichern, was die Extraktion wertvoller Insights und die Wartung der Gesundheit und Sicherheit Ihrer Systeme erleichtert.

Schritt 1 – Erstellen eines OpenSearch-Clusters

In diesem Schritt wird Sie der Kernkomponente Ihres Protokollsystems, dem OpenSearch-Cluster, einrichten. OpenSearch wird das Ziel aller Protokolle sein, die Sie von Ihrem Kubernetes-Cluster sammeln. Sie erstellen eine neue OpenSearch-Instanz in Ihrer gewünschten Region auf DigitalOcean, indem Sie den folgenden Befehl ausführen.

doctl databases create opensearch-doks --engine opensearch --region lon1 --size db-s-1vcpu-2gb --num-nodes 1

Ersetzen Sie lon1 mit Ihrer gewünschten Region. Um verfügbare Größen Slugs zu listen, besuchen Sie unsere API-Referenzdokumentation.

Schritt 2 – Generieren Sie einige zufällige Logs

Bevor Sie Logs an OpenSearch weiterleiten, müssen Sie zuerst einige Logs haben, mit denen Sie arbeiten können. Wenn Sie keine Anwendung haben, die bereits Logs innerhalb Ihres Kubernetes-Clusters generiert, zeigt dieser Schritt Ihnen, wie Sie ein Loggenerator deployieren können. Dieser Loggenerator wird eine ständige Stream von Beispiel-Logs produzieren, die zum Testen und Demonstrieren Ihrer Logging-Pipeline verwendet werden können.

Erstellen Sie zunächst das Repository für den Loggenerator Helm und installieren Sie den Loggenerator:

helm repo add kube-logging https://kube-logging.github.io/helm-charts
helm repo update

Installieren Sie anschließend den Loggenerator mit Helm:

helm install --generate-name --wait kube-logging/log-generator

Sie können überprüfen, ob der Loggenerator funktioniert, indem Sie die von ihm erzeugten Logs anschauen:

kubectl logs -l app.kubernetes.io/name=log-generator

Schritt 3 – AxoSyslog Collector für die Installation vorbereiten

In diesem Schritt werden Sie den AxoSyslog Collector konfigurieren, der für die Sammlung von Logs aus Ihrem Kubernetes-Cluster und deren Weiterleitung an OpenSearch verantwortlich ist. Dies umfasst das Bereitstellen der korrekten Verbindungsdetails für Ihren OpenSearch-Cluster (Hostname, Benutzer und Passwort).

Wir werden helm verwenden, um den AxoSyslog Collector zu installieren und benutzerdefinierte Werte übergeben.

Um den AxoSyslog-Collector mit der richtigen Adresse, dem Benutzer und dem Passwort für Ihre OpenSearch-Datenbank zu konfigurieren, folgen Sie diesen Schritten:

Automatisierter Skript

Um die Konfiguration zu vereinfachen, können Sie ein automatisiertes Skript verwenden, das die notwendigen OpenSearch-Verbindungsdetails holt und Ihre AxoSyslog-Konfigurationsdatei aktualisiert.

Speichern Sie das folgende Skript als update_axoflow_demo.sh:

update_axoflow_demo.sh
#!/bin/bash

# Extrahiere die Datenbank-ID für opensearch-doks
DB_ID=$(doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}')

# Hole Hostname, Benutzername und Passwort
OPENSEARCHHOSTNAME=$(doctl databases connection $DB_ID --no-header --format Host)
OPENSEARCHUSERNAME=$(doctl databases connection $DB_ID --no-header --format User)
OPENSEARCHPASSWORD=$(doctl databases connection $DB_ID --no-header --format Password)

# Aktualisiere axoflow-demo.yaml mit den extrahierten Werten mit yq
yq eval ".config.destinations.opensearch[0].address = \"$OPENSEARCHHOSTNAME\"" -i axoflow-demo.yaml
yq eval ".config.destinations.opensearch[0].user = \"$OPENSEARCHUSERNAME\"" -i axoflow-demo.yaml
yq eval ".config.destinations.opensearch[0].password = \"$OPENSEARCHPASSWORD\"" -i axoflow-demo.yaml

echo "axoflow-demo.yaml has been updated."

Stellen Sie sicher, dass Ihr Skript Ausführungsberechtigung hat, bevor Sie es ausführen:

chmod +x update_axoflow_demo.sh && ./update_axoflow_demo.sh

Dieses Skript wird die notwendigen Informationen von Ihrem DigitalOcean-Konto mit doctl holen und Ihre Datei axoflow-demo.yaml entsprechend aktualisieren.

Manuelle Schritte zur Aktualisierung von axoflow-demo.yaml

Wenn Sie die AxoSyslog-Collector-Konfiguration lieber manuell vornehmen möchten, folgen Sie diesen Schritten:

Führen Sie den folgenden Befehl aus, um die Datenbank-ID für opensearch-doks zu extrahieren:

doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}'

Um den Hostnamen, den Benutzernamen und das Passwort abzurufen, führen Sie die folgenden Befehle jeweils ein:

doctl databases connection <id> --no-header --format Host
doctl databases connection <id> --no-header --format User
doctl databases connection <id> --no-header --format Password

Nun müssen Sie die axoflow-demo.yaml Datei manuell aktualisieren:

Öffnen Sie Ihre axoflow-demo.yaml Datei in einem Texteditor und ersetzen Sie die relevanten Felder mit den extrahierten Werten:

axoflow-demo.yaml
config:
  sources:
    kubernetes:
      # Sammelt Kubernetes-Logs
      enabled: true
  destinations:
    # Sendet Logs an OpenSearch
    opensearch:
      - address: "x.k.db.ondigitalocean.com"
        index: "doks-demo"
        user: "doadmin"
        password: "AVNS_x"
        tls:
          # Validierung des Serverzertifikats wird verworfen.
          peerVerify: false
        # Sendet die syslog-Felder + die Metadaten aus .k8s.* in JSON-Format
        template: "$(format-json --scope rfc5424 --exclude DATE --key ISODATE @timestamp=${ISODATE} k8s=$(format-json .k8s.* --shift-levels 2 --exclude .k8s.log))"

Schritt 4 – Installiere AxoSyslog-collector

Nachdem die Konfiguration fertig ist, geht es zum nächsten Schritt, den AxoSyslog-Collector auf Ihrem Kubernetes-Cluster zu部署. Dies wird die Sammlung und Weiterleitung von Logs an OpenSearch ermöglichen.

Fügen Sie dem AxoSyslog Helm-Repository hinzu und installieren Sie den AxoSyslog-Collector mit Hilfe der benutzerdefinierten Konfigurationsdatei:

helm repo add AxoSyslog https://axoflow.github.io/AxoSyslog-charts
helm repo update
helm install AxoSyslog -f axoflow-demo.yaml AxoSyslog/AxoSyslog-collector --wait

Um sicherzustellen, dass die Logs an die richtige OpenSearch-Port gesendet werden, aktualisieren Sie die Konfiguration des AxoSyslog-Collectors, indem Sie Ihren configmap aktualisieren:

kubectl get configmap AxoSyslog-AxoSyslog-collector -o yaml | sed 's/9200\/_bulk/25060\/_bulk/' | kubectl apply -f -

Schließlich löschen Sie die bestehenden Pods, um die aktualisierte Konfiguration anzuwenden:

kubectl delete pods -l app=AxoSyslog-AxoSyslog-collector

Schlussfolgerung

Der Aufbau eines Protokollpipelines von DigitalOcean Kubernetes nach OpenSearch mithilfe von AxoSyslog konzentriert nicht nur Ihre Protokolle, sondern verbessert auch Ihre Fähigkeiten, Ihre Anwendungen zu überwachen, analysieren und sichern. Mit den in diesem Leitfaden dargestellten Schritten können Sie diese Lösung schnell einführen, wodurch Sie eine tiefere Sichtbarkeit in Ihrer Kubernetes-Umgebung erhalten und sicherstellen, dass Ihre Infrastruktur resilient und kompliant bleibt.

Source:
https://www.digitalocean.com/community/tutorials/collect-and-forward-kubernetes-logs-to-opensearch