Por que o agente unificado do CloudWatch não está enviando minhas métricas ou eventos de log para o CloudWatch?

7 minuto de leitura
0

Eu configurei o agente unificado do CloudWatch na minha instância do Amazon Elastic Compute Cloud (Amazon EC2) para publicar métricas e logs no Amazon CloudWatch. Mas não consigo ver minhas métricas ou logs no console do CloudWatch. Por que o agente unificado do CloudWatch não está enviando minhas métricas e logs para o CloudWatch?

Breve descrição

Há vários motivos pelos quais o agente unificado do CloudWatch pode não estar enviando suas métricas ou logs para o CloudWatch. Por exemplo, você pode ter um erro de permissões ou conectividade que está impedindo o agente de publicar suas métricas. Se você analisar os logs do agente unificado do CloudWatch, poderá ver um erro como este:

  • "Agent Log Error: No Connectivity to Endpoint" (Erro de log do agente: sem conectividade com o endpoint)
  • "Agent Log Error: Insufficient Permissions" (Erro de log do agente: permissões insuficientes)

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se está usando a versão mais recente da AWS CLI.

Analisar os logs unificados do agente do CloudWatch

Use o arquivo de log do agente como auxílio para solucionar problemas encontrados com o pacote unificado do agente do CloudWatch. Talvez você esteja enfrentando um destes problemas comuns:

Talvez você veja um destes erros nos logs:

"Agent Log Error: No Connectivity to Endpoint" (Erro de log do agente: sem conectividade com o 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" (Erro de log do agente: permissões 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 a conectividade com os endpoints do CloudWatch

Quando o tráfego para o CloudWatch não deve transitar pela Internet pública, você pode usar endpoints da VPC. Se você estiver usando endpoints da VPC, verifique o seguinte:

  • Se você estiver usando servidores de nomes privados, confirme se a resolução DNS forneceu respostas precisas.
  • Confirme se os endpoints do CloudWatch são resolvidos para endereços IP privados.
  • Confirme se o grupo de segurança associado ao endpoint da VPC permite tráfego de entrada do host.

1.    Verifique a conectividade com o endpoint de 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.    Verifique a conectividade com o endpoint de logs:

$ 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.    Verifique se o endpoint da VPC é resolvido para endereços IP privados:

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

Analisar a configuração unificada do agente do CloudWatch

O arquivo de configuração do agente detalha as métricas e os logs publicados no CloudWatch. Revise o arquivo de configuração do agente para confirmar se os logs e as métricas que você deseja publicar estão incluídos.

Confirmar se o host tem permissões para publicar métricas e registros

As políticas gerenciadas pela AWS CloudWatchAgentServerPolicy e CloudWatchAgentAdminPolicy podem ajudar a implantar o agente unificado do CloudWatch e verificar se você tem as permissões corretas. Use essas políticas como referência para garantir que seu host tenha as permissões corretas.

As saídas da AWS CLI nesses exemplos mostram permissões insuficientes.

Esta saída do comando de início do agente mostra que não há nenhuma função do IAM anexada à instância do 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!

Esta saída do comando de início do agente mostra que a função incorreta do IAM está anexada à instância do 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!

Em alguns casos, um usuário do IAM pode estar na linha de comando. O comando "obtain user/role" retorna o usuário ou a função do IAM associado à instância:

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

Confirmar se o agente inicia corretamente

O agente foi projetado para ser iniciado usando a AWS CLI com o arquivo de configuração passado como argumento. Use esses comandos de início válidos.

Comandos do 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 do 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: não inicie o agente pelo Painel de Controle do Windows.

Confirmar se o agente está em execução

Para publicar métricas e logs, o agente deve estar em execução. Execute esse comando para confirmar se o agente está ativo.

$ 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 o agente depois de atualizar a configuração dele

O agente não registra automaticamente as alterações no arquivo de configuração. Se a configuração do agente for atualizada para incluir métricas e logs novos ou diferentes, reinicie o agente usando 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"
}

Informações relacionadas

How do I install and configure the unified CloudWatch agent to push metrics and logs from my EC2 instance to CloudWatch? (Como instalo e configuro o agente unificado do CloudWatch para enviar métricas e logs da minha instância do EC2 para o CloudWatch?)

Solucionar problemas do agente do CloudWatch

AWS OFICIAL
AWS OFICIALAtualizada há 2 anos