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.