Verwenden des CloudWatch-Agenten zum Senden von Protokollen im eingebetteten Metrikformat
In diesem Abschnitt wird die Installation und Nutzung des CloudWatch-Agenten beschrieben Im ersten Teil dieses Abschnitts wird die Installation des CloudWatch-Agenten beschrieben Im zweiten Teil dieses Abschnitts wird die Nutzung des CloudWatch-Agenten beschrieben, um Protokolle im eingebetteten Metrikformat zu senden. Wenn Sie diese Methode nutzen möchten, müssen Sie den CloudWatch-Agenten für die AWS-Services installieren, von denen Sie Protokolle im eingebetteten Metrikformat senden möchten. Danach können Sie Ereignisse senden. Der CloudWatch-Agent muss Version 1.230621.0 oder höher sein.
Anmerkung
Sie müssen den CloudWatch-Agenten nicht installieren, um Protokolle von Lambda-Funktionen zu senden.
Lambda-Funktionstimeouts werden nicht automatisch behandelt. Dies bedeutet, dass die Metriken für diesen Aufruf nicht erfasst werden, wenn für Ihre Funktion eine Zeitüberschreitung auftritt, bevor die Metriken übertragen werden.
Installieren des CloudWatch-Agenten
Installieren Sie den CloudWatch-Agenten für jeden Service, der Protokolle im eingebetteten Metrikformat senden soll.
Installieren des CloudWatch-Agenten auf EC2
Installieren Sie zunächst den CloudWatch-Agenten auf der Instance. Weitere Informationen finden Sie unter Installieren des CloudWatch-Agenten.
Nachdem Sie den Agenten installiert haben, konfigurieren Sie den Agenten so, dass er einen UDP- oder TCP-Port auf die Protokolle im eingebetteten Metrikformat überwacht. Im Folgenden finden Sie ein Beispiel für diese Konfiguration, die den Standard-Socket tcp:25888 überwacht. Weitere Informationen zur Agentenkonfiguration finden Sie unter Manuelles Erstellen oder Bearbeiten der CloudWatch-Agent-Konfigurationsdatei
{ "logs": { "metrics_collected": { "emf": { } } } }
Installieren des CloudWatch-Agenten auf Amazon ECS
Die einfachste Möglichkeit, den CloudWatch-Agenten auf Amazon ECS bereitzustellen, besteht darin, ihn als Sidecar auszuführen und ihn in derselben Aufgabendefinition wie Ihre Anwendung zu definieren.
Erstellen der Agentenkonfigurationsdatei
Erstellen Sie Ihre Datei-Agentenkonfigurationsdatei lokal. In diesem Beispiel lautet der relative Dateipfad amazon-cloudwatch-agent.json.
Weitere Informationen zur Agentenkonfiguration finden Sie unter Manuelles Erstellen oder Bearbeiten der CloudWatch-Agent-Konfigurationsdatei
{ "logs": { "metrics_collected": { "emf": { } } } }
Übertragen der Konfiguration an den SSM-Parameterspeicher
Geben Sie den folgenden Befehl ein, um die CloudWatch-Agentenkonfigurationsdatei an den AWS Systems Manager (SSM)-Parameterspeicher zu übertragen.
aws ssm put-parameter \ --name "cwagentconfig" \ --type "String" \ --value "`cat amazon-cloudwatch-agent.json`" \ --region "{{region}}"
Konfigurieren der Aufgabendefinition
Konfigurieren Sie die Aufgabendefinition, um den CloudWatch-Agenten zu verwenden und den TCP- oder UDP-Port verfügbar zu machen. Die Beispielaufgabendefinition, die Sie verwenden sollten, hängt vom Netzwerkmodus ab.
Beachten Sie, dass die webapp die AWS_EMF_AGENT_ENDPOINT-Umgebungsvariable angibt. Diese wird von der Bibliothek verwendet und sollte auf den Endpunkt verweisen, den der Agent überwacht. Darüber hinaus gibt der cwagent den CW_CONFIG_CONTENT als „valueFrom“-Parameter an, der auf die SSM-Konfiguration verweist, die Sie im vorherigen Schritt erstellt haben.
Dieser Abschnitt enthält ein Beispiel für den Bridge-Modus und ein Beispiel für den Host- oder awsvpc-Modus. Weitere Beispiele für die Konfiguration des CloudWatch-Agenten auf Amazon ECS finden Sie im Github-Beispiel-Repository
Im Folgenden finden Sie ein Beispiel für den Bridge-Modus. Wenn das Bridge-Modus-Netzwerk aktiviert ist, muss der Agent mithilfe des links-Parameters mit Ihrer Anwendung verknüpft und mithilfe des Containernamens adressiert werden.
{ "containerDefinitions": [ { "name": "webapp", "links": [ "cwagent" ], "image": "my-org/web-app:latest", "memory": 256, "cpu": 256, "environment": [{ "name": "AWS_EMF_AGENT_ENDPOINT", "value": "tcp://cwagent:25888" }], }, { "name": "cwagent", "mountPoints": [], "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "memory": 256, "cpu": 256, "portMappings": [{ "protocol": "tcp", "containerPort": 25888 }], "environment": [{ "name": "CW_CONFIG_CONTENT", "valueFrom": "cwagentconfig" }], } ], }
Im Folgenden finden Sie ein Beispiel für den Host-Modus oder den awsvpc-Modus. Beim Ausführen auf diesen Netzwerkmodi kann der Agent über localhost angesprochen werden.
{ "containerDefinitions": [ { "name": "webapp", "image": "my-org/web-app:latest", "memory": 256, "cpu": 256, "environment": [{ "name": "AWS_EMF_AGENT_ENDPOINT", "value": "tcp://127.0.0.1:25888" }], }, { "name": "cwagent", "mountPoints": [], "image": "public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest", "memory": 256, "cpu": 256, "portMappings": [{ "protocol": "tcp", "containerPort": 25888 }], "environment": [{ "name": "CW_CONFIG_CONTENT", "valueFrom": "cwagentconfig" }], } ], }
Anmerkung
Im awsvpc-Modus müssen Sie entweder der VPC eine öffentliche IP-Adresse zuweisen (nur Fargate), ein NAT-Gateway einrichten oder einen CloudWatch-Logs-VPC-Endpunkt einrichten. Weitere Informationen zum Einrichten einer NAT finden Sie unter NAT-Gateways. Weitere Informationen zum Einrichten eines CloudWatch-Logs-VPC-Endpunkts finden Sie unter Verwenden von CloudWatch Logs mit Schnittstellen-VPC-Endpunkten.
Im Folgenden finden Sie ein Beispiel dafür, wie Sie einer Aufgabe, die den Fargate-Starttyp verwendet, eine öffentliche IP-Adresse zuweisen.
aws ecs run-task \ --cluster {{cluster-name}} \ --task-definition cwagent-fargate \ --region {{region}} \ --launch-type FARGATE \ --network-configuration "awsvpcConfiguration={subnets=[{{subnetId}}],securityGroups=[{{sgId}}],assignPublicIp=ENABLED}"
Sicherstellen der Berechtigungen
Stellen Sie sicher, dass die IAM-Rolle, die Ihre Aufgaben ausführt, über die Berechtigung zum Lesen aus dem SSM-Parameterspeicher verfügt. Sie können diese Berechtigung hinzufügen, indem Sie die AmazonSSMReadOnlyAccess-Richtlinie anhängen. Geben Sie dazu den folgenden Befehl ein.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonSSMReadOnlyAccess \ --role-name CWAgentECSExecutionRole
Installieren des CloudWatch-Agenten auf Amazon EKS
Teile dieses Prozesses können übersprungen werden, wenn Sie CloudWatch Container Insights bereits auf diesem Cluster installiert haben.
Permissions (Berechtigungen)
Wenn Sie Container Insights noch nicht installiert haben, stellen Sie zunächst sicher, dass Ihre Amazon-EKS-Knoten über die entsprechenden IAM-Berechtigungen verfügen. Sie sollten die CloudWatchAgentServerPolicy angehängt haben. Weitere Informationen finden Sie unter Überprüfen der Voraussetzungen für Container Insights in CloudWatch.
Erstellen einer ConfigMap
So erstellen Sie eine ConfigMap für den Agenten. Die ConfigMap weist den Agenten außerdem an, einen TCP- oder UDP-Port zu überwachen. Verwenden Sie die folgende ConfigMap.
# cwagent-emf-configmap.yaml apiVersion: v1 data: # Any changes here must not break the JSON format cwagentconfig.json: | { "agent": { "omit_hostname": true }, "logs": { "metrics_collected": { "emf": { } } } } kind: ConfigMap metadata: name: cwagentemfconfig namespace: default
Wenn Sie Container Insights bereits installiert haben, fügen Sie der vorhandenen ConfigMap die folgende "emf": { }-Zeile hinzu.
Anwenden der ConfigMap
Geben Sie den folgenden Befehl ein, um die ConfigMap anzuwenden.
kubectl apply -f cwagent-emf-configmap.yaml
Bereitstellen des Agenten
Um den CloudWatch-Agenten als Sidecar bereitzustellen, fügen Sie den Agenten zur Pod-Definition hinzu, wie im folgenden Beispiel gezeigt.
apiVersion: v1 kind: Pod metadata: name: myapp namespace: default spec: containers: # Your container definitions go here - name: web-app image: my-org/web-app:latest # CloudWatch Agent configuration - name: cloudwatch-agent image: public.ecr.aws/cloudwatch-agent/cloudwatch-agent:latest imagePullPolicy: Always resources: limits: cpu: 200m memory: 100Mi requests: cpu: 200m memory: 100Mi volumeMounts: - name: cwagentconfig mountPath: /etc/cwagentconfig ports: # this should match the port configured in the ConfigMap - protocol: TCP hostPort: 25888 containerPort: 25888 volumes: - name: cwagentconfig configMap: name: cwagentemfconfig
Verwenden des CloudWatch-Agenten zum Senden von Protokollen im eingebetteten Metrikformat
Sobald Sie den CloudWatch-Agenten installiert und ,ausgeführt haben, können Sie die Protokolle im eingebetteten Metrikformat über TCP oder UDP senden. Beim Senden der Protokolle über den Agenten gibt es zwei Anforderungen:
-
Die Protokolle müssen einen
LogGroupName-Schlüssel enthalten, der dem Agenten mitteilt, welche Protokollgruppe verwendet werden soll. -
Jedes Protokollereignis muss sich in einer einzigen Zeile befinden. Mit anderen Worten, ein Protokollereignis darf das Zeilenumbruchzeichen (\n) nicht enthalten.
Die Protokollereignisse müssen auch der Spezifikation für eingebettete Metrikformate entsprechen. Weitere Informationen finden Sie unter Spezifikation: Eingebettetes Metrikformat.
Wenn Sie Alarme für Metriken erstellen möchten, die im eingebetteten Metrikformat erstellt wurden, siehe Alarme für Metriken setzen, die mit dem eingebetteten Metrikformat erstellt wurden für Empfehlungen.
Im Folgenden finden Sie ein Beispiel für das manuelle Senden von Protokollereignissen aus einer Linux-Bash-Shell. Sie können stattdessen die UDP-Socket-Schnittstellen verwenden, die von Ihrer gewünschten Programmiersprache bereitgestellt werden.
echo '{"_aws":{"Timestamp":1574109732004,"LogGroupName":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}]},"Operation":"Aggregator","ProcessingLatency":100}' \ > /dev/udp/0.0.0.0/25888
Anmerkung
Mit dem eingebetteten Metrikformat können Sie die Verarbeitung Ihrer EMF-Protokolle nach Metriken verfolgen, die im AWS/Logs-Namespace Ihres Kontos veröffentlicht werden. Diese können verwendet werden, um die fehlgeschlagene Metrikgenerierung von EMF nachzuverfolgen und festzustellen, ob Fehler aufgrund der Analyse oder der Validierung auftreten. Weitere Informationen finden Sie unter Überwachen mit CloudWatch-Metriken.