Passer au contenu

Pourquoi l’agent CloudWatch unifié ne transmet-il pas mes métriques ou ne journalise-t-il pas les événements dans CloudWatch ?

Lecture de 7 minute(s)
0

J’ai configuré l’agent Amazon CloudWatch unifié sur mon instance Amazon Elastic Compute Cloud (Amazon EC2) pour publier des métriques et des journaux sur Amazon CloudWatch. Cependant, je ne peux pas voir mes métriques ni journaliser les événements dans la console CloudWatch.

Brève description

L'agent CloudWatch unifié peut ne pas transmettre de métriques ou de journaux à CloudWatch en cas de problèmes de connectivité ou d'autorisation. Lorsque vous consultez les journaux unifiés de l’agent CloudWatch, l’une des erreurs suivantes peut s’afficher :

  • Erreur du journal de l’agent : Aucune connectivité au point de terminaison
  • Erreur du journal de l’agent : Autorisations insuffisantes

Résolution

Pour résoudre les problèmes liés à l'agent CloudWatch unifié, procédez comme suit :

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Consulter les journaux unifiés de l’agent CloudWatch

Vous pouvez utiliser le fichier journal de l’agent pour résoudre les problèmes que vous rencontrez avec le package d’agent CloudWatch unifié.

Vous pouvez rencontrer l’un des problèmes suivants :

L’une de ces erreurs peut s’afficher dans les journaux suivants.

Erreur du journal de l’agent : Aucune connectivité au point de terminaison

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.

Erreur du journal de l’agent : Autorisations insuffisantes

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

Confirmez la connectivité aux points de terminaison CloudWatch

Si le trafic vers CloudWatch ne passe pas par l’Internet public, vous pouvez utiliser les points de terminaison Amazon VPC. Si vous utilisez des points de terminaison Amazon VPC, vérifiez les paramètres suivants :

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

Pour confirmer la connectivité aux points de terminaison CloudWatch, procédez comme suit :

  1. Pour vérifier la connectivité au point de terminaison des métriques, exécutez la commande suivante :

    $ 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. Pour vérifier la connectivité au point de terminaison des journaux, exécutez la commande suivante :

    $ 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. Pour vérifier que le point de terminaison Amazon VPC est résolu en adresses IP privées, exécutez la commande suivante :

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

Vérifier la configuration unifiée de l’agent CloudWatch

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

Vérifiez que l’hôte est autorisé à publier des métriques et des journaux

Les politiques gérées par AWS CloudWatchAgentServerPolicy et CloudWatchAgentAdminPolicy peuvent vous aider à déployer l’agent CloudWatch unifié. Les politiques peuvent également vous aider à 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.

Les sorties de l’interface de ligne de commande AWS présentées dans ces exemples indiquent des autorisations insuffisantes.

La commande de configuration de l’interface de ligne de commande AWS suivante indique que le rôle Gestion des identités et des accès AWS (AWS IAM) attaché à l’instance EC2 est manquant :

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

La commande de configuration de l’interface de ligne de commande AWS suivante indique que le rôle IAM associé à l’instance EC2 est incorrect :

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

La commande get-caller-identity suivante 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érifiez que l’agent démarre correctement

Vous pouvez utiliser l’interface de ligne de commande AWS avec le fichier de configuration transmis en argument pour démarrer l’agent. Pour démarrer l’agent, exécutez les commandes de démarrage valides suivantes.

Pour Linux, exécutez les commandes suivantes :

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

Pour Windows, exécutez les commandes suivantes :

- `& "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 de Windows.

Vérifiez que l’agent s’exécute

Pour publier des métriques et des journaux, l’agent doit être actif. Pour vérifier que l'agent CloudWatch est actif, exécutez la commande suivante :

$ 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 la configuration de l’agent

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, vous devez utiliser la commande suivante pour redémarrer l’agent :

$ 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 puis-je installer et configurer l’agent CloudWatch unifié pour envoyer les métriques et les journaux de mon instance EC2 à CloudWatch ?

AWS OFFICIELA mis à jour il y a 6 mois