Pourquoi l'agent CloudWatch unifié ne transmet-il pas mes métriques ou mes événements de journaux vers CloudWatch ?

Lecture de 7 minute(s)
0

J'ai configuré l'agent CloudWatch unifié sur mon instance Amazon Elastic Compute Cloud (Amazon EC2) pour envoyer des métriques et des journaux à Amazon CloudWatch, mais je ne vois pas mes métriques ni mes journaux dans la console CloudWatch. Pourquoi l'agent CloudWatch unifié n'envoie-t-il pas mes métriques et mes journaux à CloudWatch ?

Brève description

Il existe un certain nombre de raisons pour lesquelles l'agent CloudWatch unifié peut ne pas transmettre vos métriques ou vos journaux à CloudWatch. Par exemple, vous pouvez rencontrer une erreur d'autorisation ou de connectivité qui empêche l'agent d'envoyer vos métriques. Lorsque vous consultez les journaux de l'agent CloudWatch unifié, vous pouvez voir apparaître une erreur semblable à ce qui suit :

  • Agent Log Error: No Connectivity to Endpoint
  • Agent Log Error: Insufficient Permissions

Solution

Remarque : si vous recevez des erreurs lorsque vous exécutez des commandes de l'AWS Command Line Interface (AWS CLI), assurez-vous d'utiliser la version la plus récente de l'AWS CLI.

Consulter les journaux de l'agent CloudWatch unifié

Utilisez le fichier journal de l'agent pour vous aider à résoudre les problèmes que vous rencontrez avec le package de l'agent CloudWatch unifié. Vous pourriez être confronté à l'un des problèmes courants suivants :

L'une des erreurs suivantes peut s'afficher dans les journaux :

Agent Log Error: No Connectivity to Endpoint

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.

Agent Log Error: Insufficient Permissions

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

Vérifier la connectivité aux points de terminaison CloudWatch

Lorsque le trafic vers CloudWatch ne doit pas transiter par l'Internet public, vous pouvez utiliser des points de terminaison de VPC à la place. Si vous utilisez des points de terminaison de VPC, vérifiez ce qui suit :

  • Si vous utilisez des serveurs de noms privés, vérifiez que la résolution DNS a fourni des réponses exactes.
  • Vérifiez que les points de terminaison CloudWatch sont résolus en adresses IP privées.
  • Vérifiez que le groupe de sécurité associé au point de terminaison de VPC autorise le trafic entrant en provenance de l'hôte.

1.    Vérifiez la connectivité au point de terminaison des métriques :

$ 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.    Vérifiez la connectivité au point de terminaison des journaux :

$ 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.    Vérifiez que le point de terminaison de VPC est résolu en adresses IP privées :

$ dig monitoring.us-east-1.amazonaws.com +short
172.31.11.121
172.31.0.13

Vérifier la configuration de l'agent CloudWatch unifié

Le fichier de configuration de l'agent détaille les métriques et les journaux publiés sur CloudWatch. Consultez le fichier de configuration de l'agent pour vérifier que les journaux et les métriques que vous souhaitez publier sont inclus.

Vérifier que l'hôte dispose des autorisations nécessaires pour publier des métriques et des journaux

Les politiques gérées AWS CloudWatchAgentServerPolicy et CloudWatchAgentAdminPolicy peuvent vous aider à déployer l'agent CloudWatch unifié et à vérifier que vous disposez des autorisations appropriées. Utilisez ces politiques comme référence pour vous assurer que votre hôte dispose des autorisations appropriées.

Dans ces exemples, les sorties de l'AWS CLI indiquent que les autorisations sont insuffisantes.

Cette sortie de commande de démarrage de l'agent indique qu'aucun rôle IAM n'est attaché à l'instance EC2 :

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

Cette sortie de commande de démarrage de l'agent indique que le mauvais rôle IAM est attaché à l'instance EC2 :

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

Dans certains cas, un utilisateur IAM peut se trouver dans la ligne de commande. La commande obtain user/role renvoie l'utilisateur ou le rôle IAM associé à l'instance :

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

Vérifier que l'agent démarre correctement

L'agent est conçu pour être démarré à l'aide de l'AWS CLI avec le fichier de configuration transmis en tant qu'argument. Utilisez ces commandes de démarrage valides.

Commandes Linux :

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

Commandes Windows :

- `& "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`

Important : ne démarrez pas l'agent depuis le panneau de configuration Windows.

Vérifier que l'agent est en cours d'exécution

Pour publier des métriques et des journaux, l'agent doit être en cours d'exécution. Exécutez cette commande pour confirmer que l'agent est actif.

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

Redémarrer l'agent après avoir mis à jour sa configuration

L'agent n'enregistre pas automatiquement les modifications apportées au fichier de configuration. Si la configuration de l'agent est mise à jour pour inclure des métriques et des journaux nouveaux ou différents, redémarrez l'agent à l'aide de cette commande :

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

Informations connexes

Comment installer et configurer l'agent CloudWatch unifié pour transférer des métriques et des journaux de mon instance EC2 vers CloudWatch ?

Dépannage de l'agent CloudWatch

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans