Direkt zum Inhalt

Warum überträgt der vereinheitlichte CloudWatch-Agent meine Metriken oder Protokollereignisse nicht an CloudWatch?

Lesedauer: 7 Minute
0

Ich habe den vereinheitlichten Amazon CloudWatch-Agent auf meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance so konfiguriert, dass Metriken und Protokolle an Amazon CloudWatch gesendet werden. Ich kann meine Metriken oder Protokollereignisse jedoch nicht in der CloudWatch-Konsole sehen.

Kurzbeschreibung

Der vereinheitlichte CloudWatch-Agent überträgt möglicherweise keine Metriken oder Protokolle an CloudWatch mithilfe von Push, wenn es Konnektivitäts- oder Berechtigungsprobleme gibt. Wenn du die vereinheitlichten CloudWatch-Agent-Protokolle überprüfst, kann einer der folgenden Fehler auftreten:

  • Agentenprotokollfehler: Keine Konnektivität zum Endpunkt
  • Agentenprotokollfehler: Unzureichende Berechtigungen

Lösung

Gehe wie folgt vor, um Probleme mit dem vereinheitlichten CloudWatch-Agent zu beheben:

Hinweis: Wenn du beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehlermeldungen erhältst, findest du weitere Informationen dazu unter Problembehandlung bei AWS CLI-Fehlern. Stelle außerdem sicher, dass du die neueste Version der AWS CLI verwendest.

Überprüfen der vereinheitlichten CloudWatch-Agent-Protokolle

Du kannst die Agent-Protokolldatei verwenden, um Probleme zu beheben, die mit dem vereinheitlichten CloudWatch-Agent-Paket auftreten.

Möglicherweise tritt eines der folgenden Probleme auf:

Möglicherweise wird einer dieser Fehler in den folgenden Protokollen angezeigt.

Agentenprotokollfehler: Keine Konnektivität 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.

Agentenprotokollfehler: Ungenügende 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ätige die Konnektivität zu den CloudWatch-Endpunkten

Wenn der Datenverkehr zu CloudWatch nicht über das öffentliche Internet erfolgt, kannst du Amazon VPC-Endpunkte verwenden. Wenn du Amazon VPC-Endpunkte verwendest, überprüfe die folgenden Parameter:

  • Wenn du private Nameserver verwendest, stelle sicher, dass die DNS-Auflösung korrekte Antworten geliefert hat.
  • Vergewissere dich, dass die CloudWatch-Endpunkte in private IP-Adressen aufgelöst werden.
  • Bestätige, dass die Sicherheitsgruppe, die dem Amazon VPC-Endpunkt zugeordnet ist, eingehenden Datenverkehr vom Host zulässt.

Gehe wie folgt vor, um die Konnektivität zu den CloudWatch-Endpunkten zu bestätigen:

  1. Führe den folgenden Befehl aus, um die Konnektivität zum Metrikenendpunkt zu überprüfen:

    $ 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. Führe den folgenden Befehl aus, um die Konnektivität zum Logs-Endpunkt zu überprüfen:

    $ 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. Um zu überprüfen, ob der Amazon VPC-Endpunkt in private IP-Adressen aufgelöst wird, führe den folgenden Befehl aus:

    $ dig monitoring.us-east-1.amazonaws.com
    +short172.31.11.121
    172.31.0.13

Überprüfe die einheitliche CloudWatch-Agent-Konfiguration

Die CloudWatch-Agent-Konfigurationsdatei beschreibt die Metriken und Protokolle, die auf CloudWatch veröffentlicht werden. Überprüfe die Agent-Konfigurationsdatei, um sicherzustellen, dass die Protokolle und Metriken, die du veröffentlichen möchtest, enthalten sind.

Vergewissere dich, dass der Host berechtigt ist, Metriken und Logs zu veröffentlichen

Die von AWS verwalteten Richtlinien CloudWatchAgentServerPolicy und CloudWatchAgentAdminPolicy können dir bei der Bereitstellung des einheitlichen CloudWatch-Agenten helfen. Mithilfe der Richtlinien kannst du auch überprüfen, ob du über die richtigen Berechtigungen verfügst. Verwende diese Richtlinien als Referenz, um sicherzustellen, dass dein Gastgeber über die richtigen Berechtigungen verfügt.

Die AWS-CLI-Ausgaben in diesen Beispielen zeigen unzureichende Berechtigungen.

Der folgende AWS CLI config-Befehl zeigt, dass die der EC2-Instance zugeordnete AWS Identity and Access Management (IAM, identitäts- und Zugriffsmanagement)-Rolle Folgendes fehlt:

$ /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!

Der folgende AWS CLI config-Befehl zeigt, dass die falsche IAM-Rolle an die EC2-Instance angefügt 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!

Der folgende get-caller-identity-Befehl gibt den IAM-Benutzer oder die IAM-Rolle zurück, der/die der Instance zugeordnet ist:

$ aws sts get-caller-identity
{
    "UserId": "AROA123456789012ABCDE:i-0744de7c842d2c2ba",
    "Account": "123456789012",
    "Arn": "arn:aws:sts::123456789012:assumed-role/CloudWatchAgentServerRole/i-0744de7c842d2c2ba"
}

Bestätige, dass der Agent korrekt gestartet wird

Du kannst AWS CLI mit der als Argument übergebenen Konfigurationsdatei verwenden, um den Agent zu starten. Führe die folgenden gültigen Startbefehle aus, um den Agent zu starten.

Führe unter Linux die folgenden Befehle aus:

- `$ 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`

Führe unter Windows die folgenden Befehle aus:

- `& "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: Starte den Agent nicht über die Windows-Systemsteuerung.

Bestätige, dass der Agent ausgeführt wird

Um Metriken und Protokolle zu veröffentlichen, muss der Agent aktiv sein. Führe den folgenden Befehl aus, um zu überprüfen, ob der CloudWatch-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"
}

Neustart des Agent, nachdem du die Agent-Konfiguration aktualisiert hast

Der Agent registriert Änderungen an der Konfigurationsdatei nicht automatisch. Wenn die Agentenkonfiguration aktualisiert wird und neue oder andere Metriken und Logs enthält, musst du den folgenden Befehl verwenden, um den Agenten neu zu starten:

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

Ähnliche Informationen

Wie installiere und konfiguriere ich den vereinheitlichten CloudWatch-Agent, um Metriken und Protokolle von einer EC2-Instance an CloudWatch zu senden?