/ Kubernetes

Kubernetes Logs verwalten mit Datadog

Warum Datadog?

Eine eigene Log-Management-Lösung zu konfigurieren und zu betreiben benötigt sowohl menschliche als auch Hardware-Ressourcen. Für die meisten Log-Tools, wie zum Beispiel Graylog oder Kibana wird ein Elasticsearch-Cluster bestehend aus mehreren Instanzen benötigt, um die erfassten Logs zu persistieren. Für kleine Unternehmen oder Freelancer kann es unverhältnismäßig hohe Kosten bedeuten.

In solchen Fällen kann eine Cloudbasierte Lösung die richtige Wahl sein. Datadog ist eine davon. Die Kosten sind fair. Sie betragen monatlich für jede Million Logs inklusive 15-tägiger Persistierung $2. Zusätzlich kommen noch Kosten von $15 für jeden Host, von dem Logs erhoben werden sollen. In diesem Fall sind es Kubernetes Nodes.

Konto anlegen

Zuerst muss die Entscheidung getroffen werden, ob die Datadog-Dienste in Europa oder USA verwendet werden sollen. In diesem Artikel wird der europäische Standort bevorzugt. Das neue Konto wird unter https://datadoghq.eu/signup angelegt. Auch ein Login mit dem eigenen Google-Konto ist möglich.

Nach Abschluss der Registrierung wird angeboten, den eigenen Stack auszuwählen. In unserem Fall ist es Kubernetes:

Im weiteren Schritt wird der erste Agent installiert. Hier wird auch "Kubernetes" ausgewählt:

Auf der Seite werden nun Installationsanweisungen angezeigt. Die Installation erfolgt mittels eines Helm Charts.

Helm Chart installieren

Die in der UI abgebildeteten Anweisungen sind ausreichend detailliert. Es gibt auch Verweise auf eine Sammlung von Beispielkonfigurationen. Für diesen Artikel werden Logs von Anwendungen innerhalb eines RKE-Clusters gesammelt.

Passende Konfiguration für einen RKE-Cluster

Nachfolgend werden Erkenntnisse der Installation der Datadog-Agents in einem mithilfe von RKE aufgebauten Kubernetes-Clusters geschildert.

Zuerst muss das sammeln von Logs aktiviert werden:

datadog:
  logs:
    enabled: true
    containerCollectAll: false
    containerCollectUsingFiles: true

In RKE-Clustern wird die Controlplane und Etcd oft auf den Worker-Nodes installiert. Die Erlaubnis der Ausführung auf Controlplane-Nodes wird mit folgenden Anweisungen in den Helm-Values erteilt:

agents:
  tolerations:
  # These tolerations are needed to run the agent on master nodes
  - effect: NoSchedule
    key: node-role.kubernetes.io/controlplane
    operator: Exists
  - effect: NoExecute
    key: node-role.kubernetes.io/etcd
    operator: Exists

Ist Pod-Security im Cluster aktiviert, dann muss die Generierung der entsprechenden Policies konfiguriert werden:

agents:
  podSecurity:
    podSecurityPolicy:
      create: true

Sofern AppArmor auf den Cluster-Nodes nicht aktiv ist, muss im Helm-Chart die Verwendung des Tools ausgeschaltet werden:

agents:
  podSecurity:
    apparmor:
      enabled: false

Das im Helm-Chart standardmäßig konfigurierte Log-Level ist "INFO". Um unnötige Logs und somit Kosten zu sparen, kann er noch in "WARN" geändert werden:

datadog:
  logLevel: WARN

Auch auf Monitoring-Funktionen kann verzichtet wird, um Kosten zu sparen. Sie können im Cluster-Agent deaktiviert werden:

clusterAgent:
  enabled: false

Im zu Beginn des Beitrags gewählten Plan "Pro" sind 10 Container inklusive. Jeder weiterer Container kostet $0,002 pro Stunde. Die Anzahl von Containern, deren Logs gesammelt werden sollen kann eingeschränkt werden um zum Beispiel im Standard-Kontingent zu bleiben. Man kann zum Beispiel einzelne Namespaces entfernen. Weitere Möglichkeiten wären "name:" oder "image:".

datadog:
  containerExclude: kube_namespace:logging kube_namespace:monitoring kube_namespace:cert-manager

Die vollständige values.yml:

datadog:
  clusterName: rke-cluster
  kubelet:
    tlsVerify: false
  logs:
    enabled: true
    containerCollectAll: true
  logLevel: WARN
  containerExclude: kube_namespace:logging kube_namespace:monitoring kube_namespace:cert-manager
clusterAgent:
  enabled: false
agents:
  podSecurity:
    apparmor:
      enabled: false
    podSecurityPolicy:
      create: true
  tolerations:
  - effect: NoSchedule
    key: node-role.kubernetes.io/controlplane
    operator: Exists
  - effect: NoExecute
    key: node-role.kubernetes.io/etcd
    operator: Exists

Logs einsehen

Das wars. Logs können unter dem Menüpunkt "Logs" eingesehen werden. Namen der Anwendungen und Hosts werden erkannt. Logs können danach gefiltert werden, visualisiert werden und vieles mehr. Die UI ist intuitiv und optisch ansprechend. Durch farbliche Hervorhebung kann man die Schwere einer Meldung schnell erkennen.

Fazit

Die Einrichtung von Datadog verlief ohne Probleme. Sowohl der Client als auch die UI scheinen ausgereift zu sein.

Die problemlose Einrichtung eines Kontos mit 14-tägiger Probezeit ohne eine Kreditkarte hinterlegen zu müssen ist ein Pluspunkt, der den Einstieg leicht macht.