Warum überträgt der einheitliche CloudWatch-Agent meine Metriken oder Log-Ereignisse nicht an CloudWatch?

Letzte Aktualisierung: 26.04.2022

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:

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"
}