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

7 minutos de lectura
0

He configurado el agente de Amazon CloudWatch unificado en mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) para insertar métricas y registros en Amazon CloudWatch. Sin embargo, no puedo ver mis métricas ni mis registros en la consola de CloudWatch. Quiero ver mis métricas y eventos de registro en CloudWatch

Breve descripción

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
  • Agent Log Error: Insufficient Permissions

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulte Troubleshoot AWS CLI errors. Además, asegúrese de utilizar la versión más reciente de la AWS CLI.

Revisar los registros de agentes de CloudWatch unificados

Puede usar el archivo de registro del agente para ayudar a solucionar los problemas que encuentre con el paquete de agente unificado de CloudWatch.

Es posible que experimente uno de los siguientes problemas:

Es posible que vea uno de estos errores en los siguientes registros.

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

Confirmar la conectividad con los puntos de enlace de CloudWatch

Si el tráfico a CloudWatch no pasa por la Internet pública, puede usar los puntos de enlace de VPC de Amazon. Si usa puntos de enlace de VPC de Amazon, compruebe los siguientes parámetros:

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

Para confirmar la conectividad con los puntos de enlace de CloudWatch, siga estos pasos:

  1. Para comprobar la conectividad con el punto de enlace de las métricas, ejecute el siguiente comando:

    $ 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. Para comprobar la conectividad con el punto de enlace de los registros, ejecute el siguiente comando:

    $ 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. Para comprobar que el punto de enlace de VPC de Amazon se resuelve en direcciones IP privadas, ejecute el siguiente comando:

    $ dig monitoring.us-east-1.amazonaws.com
    +short172.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.

Confirmar 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. Las políticas también pueden ayudar a comprobar que se tienen los permisos correctos. Utilice estas políticas como referencia para asegurarse de que el host tiene los permisos correctos.

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

El siguiente comando de config de la AWS CLI muestra que falta el rol de AWS Identity and Access Management (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 siguiente comando config de la AWS CLI 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!

El siguiente comando get-caller-identity 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

Puede usar la AWS CLI con el archivo de configuración transferido como argumento para iniciar el agente. Para iniciar el agente, ejecute los siguientes comandos de inicio válidos.

Para Linux, ejecute los siguientes comandos:

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

Para Windows, ejecute los siguientes comandos:

- `& "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 activo. Para confirmar que el agente está activo, ejecute el siguiente comando:

$ 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, debe usar el siguiente comando para reiniciar el agente:

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

Información relacionada

¿Cómo puedo instalar y configurar el agente unificado de CloudWatch para insertar métricas y registros de mi instancia de EC2 en CloudWatch?

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 4 meses