Por que o agente unificado do CloudWatch não envia minhas métricas nem registra eventos para o CloudWatch?

7 minuto de leitura
0

Configurei o agente unificado do Amazon 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. Quero ver minhas métricas e registrar eventos no CloudWatch

Breve descrição

Pode haver vários motivos pelos quais o agente unificado do CloudWatch não envia suas métricas ou logs para o CloudWatch. Por exemplo, você pode ter um erro de permissão ou conectividade que impede o agente de publicar suas métricas. Quando você revisa os logs unificados do agente CloudWatch, um dos seguintes erros pode aparecer:

  • Erro de log do agente: Sem conectividade com o endpoint
  • 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), consulte Solucionar erros da AWS CLI. Além disso, verifique se está usando a versão mais recente da AWS CLI.

Analisar os logs unificados do agente do CloudWatch

Você pode usar o arquivo de log do agente para ajudar a solucionar problemas que encontra com o pacote unificado de agentes do CloudWatch.

Você pode enfrentar um dos seguintes problemas:

Você pode ver um desses erros nos logs a seguir.

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.

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

Se o tráfego para o CloudWatch não passar pela Internet pública, você poderá usar os endpoints do Amazon VPC. Se usa endpoints do Amazon VPC, verifique os seguintes parâmetros:

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

Para confirmar a conectividade com os endpoints do CloudWatch, conclua as seguintes etapas:

  1. Para verificar a conectividade com o endpoint de métricas, execute o seguinte 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 verificar a conectividade com o endpoint de logs, execute o seguinte 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 verificar se o endpoint do Amazon VPC está resolvido para endereços IP privados, execute o seguinte comando:

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

Analisar a configuração unificada do agente CloudWatch

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

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

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

Os resultados da AWS CLI nesses exemplos mostram permissões insuficientes.

O comando config da CLI da AWS a seguir mostra que a função AWS Identity and Access Management (IAM) anexada à instância do EC2 está ausente:

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

O comando config da CLI da AWS a seguir 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!

O comando get-caller-identity a seguir retorna o usuário ou a função do IAM que está 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

Você pode usar o AWS CLI com o arquivo de configuração passado como argumento para iniciar o agente. Para iniciar o agente, execute os seguintes comandos de inicialização válidos.

Para Linux, use o seguinte comando:

- `$ 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, execute os seguintes 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: Não inicie o agente a partir do Painel de Controle do Windows.

Confirmar se o agente está em execução

Para publicar métricas e logs, o agente deve estar ativo. Para confirmar se o agente está ativo, execute o seguinte 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 o agente depois de atualizar a configuração do agente

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, você deverá usar o seguinte comando para reiniciar o 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"
}

Informações relacionadas

Como instalo e configuro o agente unificado do CloudWatch para enviar métricas e logs da minha instância do EC2 para o CloudWatch?

AWS OFICIAL
AWS OFICIALAtualizada há 4 meses