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

Lesedauer: 7 Minute
0

Ich habe den vereinheitlichten Amazon CloudWatch-Agenten auf meiner Amazon Elastic Compute Cloud (Amazon EC2)-Instance so konfiguriert, dass Metriken und Protokolle an Amazon CloudWatch gesendet werden. Aber ich kann meine Metriken oder Logs in der CloudWatch-Konsole nicht sehen. Ich möchte meine Metriken sehen und Ereignisse in CloudWatch protokollieren

Kurzbeschreibung

Es kann mehrere Gründe geben, warum der vereinheitlichte CloudWatch-Agent Ihre Metriken oder Logs nicht an CloudWatch weiterleitet. Beispielsweise liegt möglicherweise ein Berechtigungs- oder Verbindungsfehler vor, der den Agenten daran hindert, Ihre Messwerte zu veröffentlichen. Wenn Sie die vereinheitlichten CloudWatch-Agent-Protokolle überprüfen, kann einer der folgenden Fehler auftreten:

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

Behebung

Anmerkung: Wenn Sie beim Ausführen von AWS Command Line Interface (AWS CLI)-Befehlen Fehler erhalten, finden Sie weitere Informationen unter Beheben von AWS-CLI-Fehlern. Stellen Sie außerdem sicher, dass Sie die neueste AWS-CLI-Version verwenden.

Überprüfen Sie die vereinheitlichten CloudWatch-Agentenprotokolle

Sie können 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ätigen Sie die Konnektivität zu den CloudWatch-Endpunkten

Wenn der Datenverkehr zu CloudWatch nicht über das öffentliche Internet erfolgt, können Sie Amazon VPC-Endpunkte verwenden. Wenn Sie Amazon VPC-Endpunkte verwenden, überprüfen Sie die folgenden Parameter:

  • Wenn Sie private Nameserver verwenden, stellen Sie sicher, dass die DNS-Auflösung korrekte Antworten geliefert hat.
  • Vergewissern Sie sich, dass die CloudWatch-Endpunkte in private IP-Adressen aufgelöst werden.
  • Bestätigen Sie die Sicherheitsgruppe, die dem Amazon VPC-Endpunkt zugeordnet ist und eingehenden Datenverkehr vom Host zulässt.

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

  1. Führen Sie 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ühren Sie 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ühren Sie den folgenden Befehl aus:

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

Überprüfen Sie die einheitliche CloudWatch-Agent-Konfiguration

Die Agentenkonfigurationsdatei beschreibt die Metriken und Protokolle, die auf CloudWatch veröffentlicht werden. Überprüfen Sie die Agentenkonfigurationsdatei, um sicherzustellen, dass die Protokolle und Metriken, die Sie veröffentlichen möchten, enthalten sind.

Vergewissern Sie sich, dass der Host berechtigt ist, Metriken und Logs zu veröffentlichen

Die von AWS verwalteten Richtlinien CloudWatchAgentServerPolicy und CloudWatchAgentAdminPolicy können Ihnen bei der Bereitstellung des einheitlichen CloudWatch-Agenten helfen. Mithilfe der Richtlinien können Sie auch überprüfen, ob Sie über die richtigen Berechtigungen verfügen. 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)-Rolle 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 angehängt 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, 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ätigen Sie, dass der Agent korrekt gestartet wird

Sie können AWS CLI mit der als Argument übergebenen Konfigurationsdatei verwenden, um den Agenten zu starten. Führen Sie die folgenden gültigen Startbefehle aus, um den Agenten zu starten.

Führen Sie 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ühren Sie 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: Starten Sie den Agenten nicht über die Windows-Systemsteuerung.

Bestätigen Sie, dass der Agent ausgeführt wird

Um Metriken und Logs zu veröffentlichen, muss der Agent aktiv sein. Führen Sie den folgenden 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 neu, nachdem Sie die Agentenkonfiguration aktualisiert haben

Der Agent registriert Änderungen an der Konfigurationsdatei nicht automatisch. Wenn die Agentenkonfiguration aktualisiert wird und neue oder andere Metriken und Logs enthält, müssen Sie 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-Agenten, um Metriken und Logs von meiner EC2-Instance an CloudWatch zu übertragen?

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten