Perché l'agente unificato di CloudWatch non invia i miei parametri o gli eventi di log su CloudWatch?

Ultimo aggiornamento: 26/04/2022

Ho configurato l'agente CloudWatch unificato sulla mia istanza Amazon Elastic Compute Cloud (Amazon EC2) per pubblicare parametri e log su Amazon CloudWatch ma non riesco a vedere i parametri o i log nella console di CloudWatch. Perché l'agente unificato di CloudWatch non sta inviando i miei parametri e i miei log a CloudWatch?

Breve descrizione

Esistono diversi motivi per cui l'agente CloudWatch unificato potrebbe non inviare i parametri o i log a CloudWatch. Ad esempio, potresti avere un errore di autorizzazione o connettività che impedisce all'agente di pubblicare i tuoi parametri. Quando esamini i log degli agenti CloudWatch unificati, è possibile che venga visualizzato un errore simile al seguente:

  • Errore log agente: nessuna connettività all'endpoint
  • Errore log agente: autorizzazioni insufficienti

Risoluzione

Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi di AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente di AWS CLI.

Revisione dei log dell'agente CloudWatch unificato

Utilizza il file di log dell'agente per risolvere i problemi riscontrati con il pacchetto dell'agente CloudWatch unificato. È possibile che si verifichi uno di questi problemi comuni:

Potresti vedere uno di questi errori nei log:

Errore log agente: nessuna connettività all'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.

Errore log agente: autorizzazioni insufficienti

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

Conferma della connettività agli endpoint CloudWatch

Quando il traffico verso CloudWatch non deve transitare su Internet pubblico, è possibile utilizzare invece gli endpoint VPC. Se utilizzi gli endpoint VPC, verifica quanto segue:

  • Se utilizzi server dei nomi privati, verifica che la risoluzione DNS abbia fornito risposte accurate.
  • Verifica che gli endpoint CloudWatch si risolvano in indirizzi IP privati.
  • Verifica che il gruppo di sicurezza associato all'endpoint VPC consenta il traffico in entrata dall'host.

1.    Verifica la connettività all'endpoint dei parametri:

$ 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.    Verifica la connettività all'endpoint dei log:

$ 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.    Verifica che l'endpoint VPC si risolva in indirizzi IP privati:

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

Revisione della configurazione dell'agente CloudWatch unificato

Il file di configurazione dell'agente descrive in dettaglio i parametri e i log pubblicati su CloudWatch. Esamina il file di configurazione dell'agente per confermare che i log e i parametri che si desidera pubblicare siano inclusi.

Verifica che l'host disponga delle autorizzazioni per la pubblicazione di parametri e log

Le policy gestite da AWS CloudWatchAgentServerPolicy e CloudWatchAgentAdminPolicy possono aiutarti a distribuire l'agente CloudWatch unificato e verificare di disporre delle autorizzazioni corrette. Usa queste policy come riferimento per assicurarti che il tuo host disponga delle autorizzazioni corrette.

Gli output di AWS CLI in questi esempi mostrano autorizzazioni insufficienti.

Questo output del comando di avvio dell'agente mostra che non è presente alcun ruolo IAM associato all'istanza 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!

Questo output del comando di avvio dell'agente mostra che il ruolo IAM errato è associato all'istanza 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!

In alcuni casi, un utente IAM potrebbe trovarsi sulla riga di comando. Il comando obtain user/role restituisce l'utente o il ruolo IAM associato all'istanza:

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

Verifica che l'agente venga avviato correttamente

L'agente è progettato per essere avviato tramite AWS CLI con il file di configurazione inoltrato come argomento. Usa questi comandi di avvio validi.

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

Comandi 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: non avviare l'agente dal Pannello di controllo di Windows.

Conferma che l'agente è in esecuzione

Per pubblicare parametri e log, è necessario che l'agente sia in esecuzione. Eseguire questo comando per confermare che l'agente è attivo.

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

Riavvio dell'agente dopo aver aggiornato la configurazione dell'agente

L'agente non registra automaticamente le modifiche al file di configurazione. Se la configurazione dell'agente viene aggiornata in modo da includere parametri e log nuovi o diversi, riavvia l'agente utilizzando questo 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"
}