Warum überträgt der einheitliche CloudWatch-Agent meine Metriken oder Log-Ereignisse nicht an CloudWatch?
Ich habe den einheitlichen CloudWatch-Agenten auf meiner Amazon-Elastic-Compute-Cloud (Amazon EC2)-Instanz so konfiguriert, dass er Metriken und Protokolle auf Amazon-CloudWatch veröffentlicht. Aber ich kann meine Metriken oder Protokolle in der CloudWatch-Konsole nicht sehen. Warum übermittelt der einheitliche CloudWatch-Agent meine Metriken und Protokolle nicht an CloudWatch?
Kurzbeschreibung
Es gibt eine Reihe von Gründen, warum der einheitliche CloudWatch-Agent Ihre Metriken oder Protokolle möglicherweise nicht an CloudWatch sendet. Beispielsweise liegt möglicherweise ein Berechtigungs- oder Verbindungsfehler vor, der verhindert, dass der Agent Ihre Metriken veröffentlicht. Wenn Sie die einheitlichen CloudWatch-Agentenprotokolle überprüfen, wird möglicherweise ein Fehler, wie der folgende, angezeigt:
- Agentenprotokoll-Fehler: Keine Verbindung zum Endpunkt
- Agentenprotokoll-Fehler: Unzureichende Berechtigungen
Lösung
Hinweis: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhalten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.
Überprüfen Sie die einheitlichen CloudWatch-Agenten-Protokolle
Verwenden Sie die Agentenprotokolldatei, um Probleme zu beheben, die beim einheitlichen CloudWatch-Agentenpaket auftreten. Möglicherweise tritt eines der folgenden häufig auftretenden Probleme auf:
- Sie haben Probleme mit der Verbindung zu den erforderlichen AWS-Service-Endpunkten oder VPC-Endpunkten.
- Sie haben nicht die richtigen Genehmigungen, um Support-API-Aufrufe an CloudWatch zu tätigen.
- Die Protokolldatei ist in Ihrem lokalen Dateisystem nicht vorhanden.
Möglicherweise sehen Sie einen dieser Fehler in den Protokollen:
Agentenprotokoll-Fehler: Keine Verbindung zum Endpunkt
2021-08-30T04:07:46Z E! cloudwatch: code: RequestError, message: send request failed, original error: Post "https://monitoring.us-east-1.amazonaws.com/": dial tcp 172.31.11.121:443: i/o timeout 2021-08-30T04:07:46Z W! 210 retries, going to sleep 1m0s before retrying. 2021-08-30T04:07:46Z E! cloudwatch: code: RequestError, message: send request failed, original error: Post "https://monitoring.us-east-1.amazonaws.com/": dial tcp 172.31.11.121:443: i/o timeout 2021-08-30T04:07:46Z W! 211 retries, going to sleep 1m0s before retrying.
Agentenprotokoll-Fehler: Unzureichende Berechtigungen
2021-08-30T02:15:45Z E! cloudwatch: code: AccessDenied, message: User: arn:aws:sts::123456789012:assumed-role/cwagent/i-0744de7c842d2c2ba is not authorized to perform: cloudwatch:PutMetricData, original error: 2021-08-30T02:15:45Z W! 1 retries, going to sleep 400ms before retrying. 2021-08-30T02:15:46Z E! WriteToCloudWatch failure, err: AccessDenied: User: arn:aws:sts::123456789012:assumed-role/cwagent/i-0744de7c842d2c2ba is not authorized to perform: cloudwatch:PutMetricData status code: 403, request id: f1171fd0-05b6-4f7d-bac2-629c8594c46e
Bestätigen Sie die Verbindung zu den CloudWatch-Endpunkten
Wenn der Datenverkehr zu CloudWatch nicht über das öffentliche Internet laufen soll, können Sie stattdessen VPC-Endpunkte verwenden. Wenn Sie VPC-Endpunkte verwenden, überprüfen Sie Folgendes:
- Wenn Sie private Name-Server verwenden, überprüfen Sie, ob die DNS-Auflösung korrekte Antworten liefert.
- Bestätigen Sie, dass die CloudWatch-Endpunkte zu privaten IP-Adressen aufgelöst werden.
- Vergewissern Sie sich, dass die mit dem VPC-Endpunkt verknüpfte Sicherheitsgruppe eingehenden Datenverkehr vom Host zulässt.
1. Überprüfen Sie die Verbindung zum Metrik-Endpunkt:
$ telnet monitoring.us-east-1.amazonaws.com 443 Trying 52.46.138.115... Connected to monitoring.amazonaws.com. Escape character is '^]'. ^] telnet> quit Connection closed.
2. Überprüfen Sie die Verbindung zum Endpunkt der Protokolle:
$ telnet logs.us-east-1.amazonaws.com 443 Trying 3.236.94.218... Connected to logs.us-east-1.amazonaws.com. Escape character is '^]'. ^] telnet> quit Connection closed
3. Vergewissern Sie sich, dass der VPC-Endpunkt in private IP-Adressen aufgelöst wird:
$ dig monitoring.us-east-1.amazonaws.com +short 172.31.11.121 172.31.0.13
Überprüfen Sie die einheitliche CloudWatch-Agent-Konfiguration
In der Agentenkonfigurationsdatei werden die Metriken und Protokolle aufgeführt, die in CloudWatch veröffentlicht werden. Überprüfen Sie die Agenten-Konfigurationsdatei, um sicherzustellen, dass die Protokolle und Metriken, die Sie veröffentlichen möchten, enthalten sind.
Vergewissern Sie sich, dass der Host über Genehmigungen zum Veröffentlichen von Metriken verfügt
Die von AWS verwalteten Richtlinien CloudWatchAgentServerPolicy und CloudWatchAgentAdminPolicy können Ihnen helfen, den einheitlichen CloudWatch-Agenten bereitzustellen und zu überprüfen, ob Sie über die richtigen Genehmigungen verfügen. Verwenden Sie diese Richtlinien als Referenz, um sicherzustellen, dass Ihr Host über die richtigen Berechtigungen verfügt.
Die AWS CLI-Ausgaben in diesen Beispielen zeigen unzureichende Genehmigungen.
Diese Ausgabe des Agent-Startbefehls zeigt, dass der EC2-Instanz keine IAM-Rolle zugeordnet ist:
$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:CWT-Web-Server -s ****** processing amazon-cloudwatch-agent ****** /opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source ssm:CWT-Web-Server --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Region: us-east-1 credsConfig: map[] Error in retrieving parameter store content: NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors Fail to fetch/remove json config: NoCredentialProviders: no valid providers in chain. Deprecated. For verbose messaging see aws.Config.CredentialsChainVerboseErrors Fail to fetch the config!
Diese Ausgabe des Agent-Startbefehls zeigt, dass der EC2-Instanz die falsche IAM-Rolle zugewiesen ist:
$ /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:CWT-Web-Server -s ****** processing amazon-cloudwatch-agent ****** /opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source ssm:CWT-Web-Server --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Region: us-east-1 credsConfig: map[] Error in retrieving parameter store content: AccessDeniedException: User: arn:aws:sts::123456789012:assumed-role/cwagent/i-0744de7c842d2c2ba is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:123456789012:parameter/CWT-Web-Server status code: 400, request id: b85b0a7a-0fb1-47b4-924f-be8cf43a3b4d Fail to fetch/remove json config: AccessDeniedException: User: arn:aws:sts::123456789012:assumed-role/cwagent/i-0744de7c842d2c2ba is not authorized to perform: ssm:GetParameter on resource: arn:aws:ssm:us-east-1:123456789012:parameter/CWT-Web-Server status code: 400, request id: b85b0a7a-0fb1-47b4-924f-be8cf43a3b4d Fail to fetch the config!
In manchen Fällen kann ein IAM-Benutzer in der Befehlszeile stehen. Der Befehl „obtain user/role“ gibt den IAM-Benutzer oder die IAM-Rolle zurück, die mit der Instance verknüpft ist:
$ aws sts get-caller-identity { "UserId": "AROA123456789012ABCDE:i-0744de7c842d2c2ba", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/CloudWatchAgentServerRole/i-0744de7c842d2c2ba" }
Vergewissern Sie sich, dass der Agent korrekt startet
Der Agent ist so konzipiert, dass er über die AWS-CLI gestartet wird, wobei die Konfigurationsdatei als Argument übergeben wird. Verwenden Sie diese gültigen Startbefehle.
Linux-Befehle:
- `$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:configuration-file-path` - `$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c ssm:configuration-parameter-store-name`
Windows-Befehle:
- `& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c file:"C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json"` - `& "C:\Program Files\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1" -a fetch-config -m ec2 -s -c ssm:configuration-parameter-store-name`
Wichtig: Starten Sie den Agenten nicht über die Windows-Systemsteuerung.
Vergewissern Sie sich, dass der Agent ausgeführt wird
Um Metriken und Protokolle zu veröffentlichen, muss der Agent ausgeführt werden. Führen Sie diesen Befehl aus, um zu bestätigen, dass der Agent aktiv ist.
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status { "status": "running", "starttime": "2021-08-30T02:13:44+00:00", "configstatus": "configured", "cwoc_status": "stopped", "cwoc_starttime": "", "cwoc_configstatus": "not configured", "version": "1.247349.0b251399" }
Starten Sie den Agenten nach dem Aktualisieren der Agentenkonfiguration neu
Der Agent registriert die Änderungen an der Konfigurationsdatei nicht automatisch. Wenn die Agentenkonfiguration aktualisiert wird, sodass sie neue oder andere Metriken und Protokolle enthält, starten Sie den Agenten mit diesem Befehl neu:
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a stop ****** processing cwagent-otel-collector ****** cwagent-otel-collector has already been stopped ****** processing amazon-cloudwatch-agent ****** Redirecting to /bin/systemctl stop amazon-cloudwatch-agent.service $ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:config.json ****** processing amazon-cloudwatch-agent ****** /opt/aws/amazon-cloudwatch-agent/bin/config-downloader --output-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --download-source file:config.json --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default Successfully fetched the config and saved in /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp Start configuration validation... /opt/aws/amazon-cloudwatch-agent/bin/config-translator --input /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json --input-dir /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d --output /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml --mode ec2 --config /opt/aws/amazon-cloudwatch-agent/etc/common-config.toml --multi-config default 2021/08/31 02:45:37 Reading json config file path: /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/file_config.json.tmp ... Valid Json input schema. I! Detecting run_as_user... Configuration validation first phase succeeded /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent -schematest -config /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml Configuration validation second phase succeeded Configuration validation succeeded amazon-cloudwatch-agent has already been stopped Redirecting to /bin/systemctl restart amazon-cloudwatch-agent.service $ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status { "status": "running", "starttime": "2021-08-31T02:45:37+0000", "configstatus": "configured", "cwoc_status": "stopped", "cwoc_starttime": "", "cwoc_configstatus": "not configured", "version": "1.247349.0b251399" }
Weitere Informationen
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 2 Jahren
- AWS OFFICIALAktualisiert vor 3 Jahren