¿Por qué el agente unificado de CloudWatch no envía mis métricas ni eventos de registro a CloudWatch?

Actualización más reciente: 26-04-2022

He configurado el agente de CloudWatch unificado en mi instancia de Amazon Elastic Compute Cloud (EC2) para publicar métricas y registros en Amazon CloudWatch. Sin embargo, no puedo ver mis métricas ni registros en la consola de CloudWatch. ¿Por qué el agente unificado de CloudWatch no está enviando mis métricas y registros a CloudWatch?

Descripción corta

Hay varias razones por las que el agente unificado de CloudWatch podría no enviar sus métricas o registros a CloudWatch. Por ejemplo, es posible que tenga un error de permisos o conectividad que impide que el agente publique sus métricas. Al revisar los registros del agente de CloudWatch unificados, es posible que vea un error como el siguiente:

  • Agent Log Error: No Connectivity to Endpoint (Error de registro de agente: no hay conectividad con el punto de conexión)
  • Agent Log Error: Insufficient Permissions (Error de registro de agente: permisos insuficientes)

Resolución

Nota: si se producen errores al ejecutar los comandos de AWS Command Line Interface (AWS CLI), asegúrese de estar usando la versión más reciente de AWS CLI.

Revisar los registros de agentes de CloudWatch unificados

Utilice el archivo de registro del agente como ayuda para solucionar los problemas que encuentre con el paquete de agente unificado de CloudWatch. Es posible que esté experimentando uno de estos problemas comunes:

Es posible que vea uno de estos errores en los registros:

Agent Log Error: No Connectivity to Endpoint (Error de registro de agente: no hay conectividad con el punto de conexión)

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 (Error de registro de agente: permisos insuficientes)

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

Confirmar la conectividad con los puntos de conexión de CloudWatch

Cuando el tráfico a CloudWatch no debe transitar por la Internet pública, puede usar puntos de conexión de VPC en su lugar. Si utiliza puntos de conexión de VPC, compruebe lo siguiente:

  • Si utiliza servidores de nombres privados, confirme que la resolución de DNS proporcionó respuestas precisas.
  • Confirme que los puntos de conexión de CloudWatch se resuelven en direcciones IP privadas.
  • Confirme que el grupo de seguridad asociado con el punto de conexión de VPC permite el tráfico entrante desde el host.

1.    Compruebe la conectividad con el punto de conexión de las métricas:

$ 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.    Compruebe la conectividad con el punto de conexión de los registros:

$ 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.    Compruebe que el punto de conexión de VPC se resuelve en direcciones IP privadas:

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

Revisar la configuración del agente de CloudWatch unificado

El archivo de configuración del agente detalla las métricas y los registros que se publican en CloudWatch. Revise el archivo de configuración del agente para confirmar que se incluyen los registros y las métricas que desea publicar.

Confirme que el host tiene permisos para publicar métricas y registros

Las políticas gestionadas de AWS CloudWatchAgentServerPolicy y CloudWatchAgentAdminPolicy pueden ayudarlo a implementar el agente de CloudWatch unificado y comprobar que tiene los permisos correctos. Utilice estas políticas como referencia para asegurarse de que su host tiene los permisos correctos.

Los resultados de la CLI de AWS de estos ejemplos muestran permisos insuficientes.

El resultado del comando de inicio del agente muestra que no hay ningún rol de IAM asociado a la instancia de 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!

El resultado del comando de inicio del agente muestra que el rol de IAM incorrecto está asociado a la instancia de 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!

En algunos casos, es posible que un usuario de IAM esté en la línea de comandos. El comando obtain user/role (obtener usuario/rol) devuelve el usuario o rol de IAM asociado a la instancia:

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

Confirmar que el agente se inicia correctamente

El agente está diseñado para iniciarse mediante la CLI de AWS con el archivo de configuración transferido como argumento. Utilice estos comandos de inicio válidos.

Comandos de 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`

Comandos de 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`

Importante: no inicie el agente desde el Panel de control de Windows.

Confirmar que el agente se está ejecutando

Para publicar métricas y registros, el agente debe estar en ejecución. Ejecute este comando para confirmar que el agente está activo.

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

Reiniciar el agente después de actualizar la configuración del agente

El agente no registra automáticamente los cambios en el archivo de configuración. Si la configuración del agente se actualiza para incluir métricas y registros nuevos o diferentes, reinicie el agente con este comando:

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