Einrichtung des CloudWatch-Agenten zur Sammlung von Cluster-Metriken
Wichtig
Wenn Sie Container Insights auf einem Amazon-EKS-Cluster installieren, empfehlen wir, das Add-on Amazon CloudWatch Observability EKS für die Installation zu verwenden, anstatt die Anweisungen in diesem Abschnitt zu verwenden. Weitere Informationen und Anweisungen finden Sie unter Schnellstart mit dem EKS-Add-On Amazon CloudWatch Observability.
Um Container Insights zum Sammeln von Metriken einzurichten, können Sie die Schritte unter Schnellstarteinrichtung für Container Insights auf Amazon EKS und Kubernetes oder die Schritte in diesem Abschnitt befolgen. In den folgenden Schritten richten Sie den CloudWatch-Agenten so ein, dass er Metriken aus Ihren Clustern sammeln kann.
Wenn Sie in einem Amazon-EKS-Cluster installieren und die Anweisungen in diesem Abschnitt am oder nach dem 6. November 2023 verwenden, installieren Sie Container Insights mit erweiterter Beobachtbarkeit für Amazon EKS in diesem Cluster.
Schritt 1: Erstellen eines Namespace für CloudWatch
Führen Sie den folgenden Schritt aus, um einen Kubernetes-Namespace mit dem Namen amazon-cloudwatch für CloudWatch zu erstellen. Sie können diesen Schritt überspringen, wenn Sie diesen Namespace bereits erstellt haben.
Erstellen eines Namespace für CloudWatch
-
Geben Sie den folgenden Befehl ein.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cloudwatch-namespace.yaml
Schritt 2: Erstellen eines Servicekontos im Cluster
Führen Sie eine der folgenden Methoden aus, um ein Servicekonto für den CloudWatch-Agenten zu erstellen, sofern noch nicht geschehen.
-
Verwenden von
kubectl -
Über eine
kubeconfig-Datei.
kubectl zur Authentifizierung nutzen
So nutzen Sie kubectl zum Erstellen eines Servicekontos für den CloudWatch-Agenten
-
Geben Sie den folgenden Befehl ein.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-serviceaccount.yaml
Wenn Sie die vorherigen Schritte nicht ausgeführt haben, da Sie für den CloudWatch-Agenten ein bereits vorhandenes Servicekonto verwenden möchten, müssen die folgenden Regeln dafür gelten. Außerdem müssen Sie in der restlichen Schritten der Container Insights-Installation statt cloudwatch-agent den Namen des betreffenden Servicekontos verwenden.
rules: - apiGroups: [""] resources: ["pods", "nodes", "endpoints"] verbs: ["list", "watch"] - apiGroups: [ "" ] resources: [ "services" ] verbs: [ "list", "watch" ] - apiGroups: ["apps"] resources: ["replicasets", "daemonsets", "deployments", "statefulsets"] verbs: ["list", "watch"] - apiGroups: ["batch"] resources: ["jobs"] verbs: ["list", "watch"] - apiGroups: [""] resources: ["nodes/proxy"] verbs: ["get"] - apiGroups: [""] resources: ["nodes/stats", "configmaps", "events"] verbs: ["create", "get"] - apiGroups: [""] resources: ["configmaps"] resourceNames: ["cwagent-clusterleader"] verbs: ["get","update"] - nonResourceURLs: ["/metrics"] verbs: ["get", "list", "watch"] - apiGroups: [ "discovery.k8s.io" ] resources: [ "endpointslices" ] verbs: [ "list", "watch", "get" ]
kubeconfig zur Authentifizierung nutzen
Alternativ können Sie für die Authentifizierung eine kubeconfig-Datei verwenden. Mit dieser Methode können Sie die Notwendigkeit eines Servicekontos umgehen, indem Sie den kubeconfig-Pfad direkt in Ihrer CloudWatch-Agentenkonfiguration angeben. Außerdem können Sie damit die Abhängigkeit von der Kubernetes-Steuerebenen-API für die Authentifizierung entfernen, die Einrichtung optimieren und möglicherweise die Sicherheit erhöhen, indem Sie die Authentifizierung über die kubeconfig-Datei verwalten.
Für diese Methode aktualisieren Sie Ihre CloudWatch-Agent-Konfigurationsdatei, um den Pfad zu Ihrer kubeconfig-Datei anzugeben, wie im folgenden Beispiel.
{ "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "YOUR_CLUSTER_NAME", "enhanced_container_insights": false, "accelerated_compute_metrics": false, "tag_service": false, "kube_config_path": "/path/to/your/kubeconfig" "host_ip": "HOSTIP" } } } }
Für das Erstellen einer kubeconfig-Datei, erstellen Sie einen Certificate Signing Request (CSR) für den admin/{create_your_own_user}-Benutzer mit der system:masters-Kubernetes-Rolle. Signieren Sie dann bei der Zertifizierungsstelle (CA) des Kubernetes-Clusters und erstellen Sie die Datei kubeconfig.
Schritt 3: Erstellen Sie eine ConfigMap für den CloudWatch-Agenten
Gehen Sie zum Erstellen einer ConfigMap für den CloudWatch-Agenten wie folgt vor.
So erstellen Sie eine ConfigMap für den CloudWatch-Agenten
-
Laden Sie die ConfigMap-YAML auf Ihren
kubectl-Client-Host herunter, indem Sie den folgenden Befehl ausführen:curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-configmap-enhanced.yaml -
Bearbeiten Sie die heruntergeladene YAML-Datei wie folgt:
-
cluster_name – Ersetzen Sie im Abschnitt
kubernetesden Platzhalter{{cluster_name}}durch den Namen Ihres Clusters. Entfernen Sie die Zeichen{{}}. Wenn Sie einen Amazon-EKS-Cluster verwenden, können Sie das Feld"cluster_name"und den Wert löschen. In diesem Fall erkennt der CloudWatch-Agent den Cluster-Namen aus den Amazon-EC2-Tags.
-
-
(Optional) Nehmen Sie wie folgt weitere Änderungen an der ConfigMap basierend auf Ihren Überwachungsanforderungen vor:
-
metrics_collection_interval – Im Abschnitt
kuberneteskönnen Sie angeben, wie oft der Agent Metriken sammelt. Standardmäßig ist ein Zeitraum von 60 Sekunden festgelegt. Das standardmäßige cadvisor-Erfassungsintervall in Kubelet beträgt 15 Sekunden. Stellen Sie für diesen Wert also nicht weniger als 15 Sekunden ein. -
endpoint_override – Im Abschnitt
logskönnen Sie den CloudWatch-Logs-Endpunkt angeben, wenn Sie den Standardendpunkt überschreiben möchten. Dies ist sinnvoll, wenn Sie aus einem Cluster in einer VPC veröffentlichen und die Daten zu einem VPC-Endpunkt weiterleiten möchten. -
force_flush_interval – Im Abschnitt
logskönnen Sie das Intervall für die Stapelverarbeitung von Protokollereignissen angeben, bevor sie in CloudWatch Logs veröffentlicht werden. Standardmäßig ist ein Zeitraum von 5 Sekunden festgelegt. -
Region – Standardmäßig veröffentlicht der Agent Metriken in der Region, in der sich der Workerknoten befindet. Um diese Einstellung zu überschreiben, können Sie ein
region-Feld zum Abschnittagenthinzufügen. Beispiel:"region":"us-west-2". -
statsd-Abschnitt – Wenn Sie möchten, dass der CloudWatch-Logs-Agent in jedem Worker-Knoten Ihres Clusters auch als StatsD-Listener ausgeführt wird, können Sie wie im folgenden Beispiel einen
statsd-Abschnitt zum Abschnittmetricshinzufügen. Weitere Informationen zu anderen StatsD-Optionen für diesen Abschnitt finden Sie unter Abrufen benutzerdefinierter Metriken mit StatsD."metrics": { "metrics_collected": { "statsd": { "service_address":":8125" } } }Ein vollständiges Beispiel für den JSON-Abschnitt lautet wie folgt. Wenn Sie eine
kubeconfig-Datei für die Authentifizierung nutzen, fügen Sie denkube_config_path-Parameter hinzu, um den Pfad zu Ihrer kubeconfig-Datei anzugeben.{ "agent": { "region": "us-east-1" }, "logs": { "metrics_collected": { "kubernetes": { "cluster_name": "MyCluster", "metrics_collection_interval": 60, "kube_config_path": "/path/to/your/kubeconfig" //if using kubeconfig for authentication } }, "force_flush_interval": 5, "endpoint_override": "logs.us-east-1.amazonaws.com" }, "metrics": { "metrics_collected": { "statsd": { "service_address": ":8125" } } } }
-
-
Erstellen Sie die ConfigMap im Cluster, indem Sie den folgenden Befehl ausführen.
kubectl apply -f cwagent-configmap-enhanced.yaml
Schritt 4: Bereitstellen des CloudWatch-Agenten als DaemonSet
Um die Installation des CloudWatch-Agenten abzuschließen und mit dem Sammeln von Container-Metriken zu beginnen, führen Sie die folgenden Schritte durch.
So stellen Sie den CloudWatch-Agenten als DaemonSet bereit
-
-
Wenn Sie StatsD nicht auf dem Cluster verwenden möchten, geben Sie den folgenden Befehl ein.
kubectl apply -f https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml -
Wenn Sie StatsD verwenden möchten, führen Sie die folgenden Schritte aus:
-
Laden Sie die DaemonSet-YAML auf Ihren
kubectl-Client-Host herunter, indem Sie den folgenden Befehl ausführen.curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/daemonset/container-insights-monitoring/cwagent/cwagent-daemonset.yaml -
Heben Sie die Kommentierung des
port-Abschnitts in dercwagent-daemonset.yaml-Datei wie folgt auf:ports: - containerPort: 8125 hostPort: 8125 protocol: UDP -
Stellen Sie den CloudWatch-Agenten in Ihrem Cluster bereit, indem Sie den folgenden Befehl ausführen.
kubectl apply -f cwagent-daemonset.yaml -
Stellen Sie den CloudWatch-Agenten auf Windows-Knoten in Ihrem Cluster bereit, indem Sie den folgenden Befehl ausführen. Der StatsD-Listener wird auf dem CloudWatch-Agenten unter Windows nicht unterstützt.
kubectl apply -f cwagent-daemonset-windows.yaml
-
-
-
Überprüfen Sie, ob der Agent bereitgestellt wird, indem Sie den folgenden Befehl ausführen.
kubectl get pods -n amazon-cloudwatch
Wenn dieser Vorgang abgeschlossen ist, erstellt der CloudWatch-Agent eine Protokollgruppe mit dem Namen /aws/containerinsights/ und sendet die Performance-Protokollereignisse an diese Protokollgruppe. Wenn Sie den Agenten als auch StatsD-Listener einrichten, überwacht der Agent Port 8125 mit der IP-Adresse des Knotens, auf dem der Anwendung-Pod geplant ist, auch auf StatsD-Metriken.Cluster_Name/performance
Fehlersuche
Wenn der Agent nicht korrekt bereitgestellt wird, führen Sie die folgenden Schritte aus:
-
Führen Sie den folgenden Befehl aus, um die Liste der Pods zu erhalten.
kubectl get pods -n amazon-cloudwatch -
Führen Sie den folgenden Befehl aus und überprüfen Sie die Ereignisse am unteren Rand der Ausgabe.
kubectl describe podpod-name-n amazon-cloudwatch -
Führen Sie den folgenden Befehl aus, um die Protokolle zu überprüfen.
kubectl logspod-name-n amazon-cloudwatch