Salta al contenuto

Perché l'agente CloudWatch unificato non invia metriche o eventi del log su CloudWatch?

7 minuti di lettura
0

Ho configurato l'agente Amazon CloudWatch unificato sulla mia istanza Amazon Elastic Compute Cloud (Amazon EC2) per pubblicare metriche e log su Amazon CloudWatch. Tuttavia, non riesco a vedere le mie metriche o i miei eventi del log nella console CloudWatch.

Breve descrizione

L'agente CloudWatch unificato potrebbe non inviare metriche o log a CloudWatch per problemi di connettività o di autorizzazione. Esaminando i log dell'agente CloudWatch unificato, potresti riscontrare uno dei seguenti errori:

  • Agent Log Error: No Connectivity to Endpoint
  • Agent Log Error: Insufficient Permissions

Risoluzione

Per risolvere i problemi relativi all'agente CloudWatch unificato, completa i seguenti passaggi:

Nota: se ricevi errori quando esegui i comandi dell'Interfaccia della linea di comando AWS (AWS CLI), consulta Risoluzione degli errori relativi ad AWS CLI. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.

Esamina i log dell'agente CloudWatch unificato

È possibile utilizzare il file di log dell'agente per risolvere i problemi riscontrati con il pacchetto agente CloudWatch unificato.

Potresti riscontrare uno dei seguenti errori:

Potresti visualizzare uno di questi errori nei seguenti log.

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

Confermare la connettività agli endpoint CloudWatch

Se il traffico verso CloudWatch non passa attraverso la rete internet pubblica, puoi utilizzare gli endpoint Amazon VPC. Se utilizzi endpoint Amazon VPC, controlla i seguenti parametri:

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

Per verificare la connettività agli endpoint di CloudWatch, completa i seguenti passaggi:

  1. Per verificare la connettività all'endpoint delle metriche, esegui il comando seguente:

    $ 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. Per verificare la connettività all'endpoint dei log, esegui il comando seguente:

    $ 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. Per verificare che l'endpoint Amazon VPC si risolva in indirizzi IP privati, esegui il comando seguente:

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

Esamina la configurazione dell'agente CloudWatch unificato

Il file di configurazione dell'agente CloudWatch descrive in dettaglio le metriche e i log pubblicati su CloudWatch. Esamina il file di configurazione dell'agente per verificare che i log e le metriche che desideri pubblicare siano inclusi.

Verificare che l'host disponga delle autorizzazioni per pubblicare metriche e log

Le policy gestite da AWS, ovvero CloudWatchAgentServerPolicy e CloudWatchAgentAdminPolicy possono aiutarti a distribuire l'agente CloudWatch unificato. Le policy possono anche aiutarti a verificare che tu disponga delle autorizzazioni corrette. Usa queste policy come riferimento per assicurarti che l'host disponga delle autorizzazioni corrette.

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

Il seguente comando AWS CLI config mostra che manca il ruolo AWS Identity and Access Management (AWS IAM) collegato 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!

Il seguente comando AWS CLI config mostra che all'istanza EC2 è collegato il ruolo IAM errato:

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

Il seguente comando get-caller-identity 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"
}

Confermare che l'agente si avvia correttamente

Puoi utilizzare AWS CLI con il file di configurazione passato come argomento per avviare l'agente. Per avviare l'agente, esegui questi comandi di avvio validi.

Per Linux, esegui questi comandi:

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

Per Windows, esegui questi comandi:

- `& "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.

Confermare che l'agente è in esecuzione

Per pubblicare metriche e log, l'agente deve essere attivo. Per verificare che l'agente CloudWatch sia attivo, esegui questo 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"
}

Riavvia l'agente dopo averne aggiornato la configurazione

L'agente non registra automaticamente le modifiche al file di configurazione. Se la configurazione dell'agente viene aggiornata per includere metriche e log nuovi o diversi, è necessario utilizzare il comando seguente per riavviare l'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"
}

Informazioni correlate

Come posso installare e configurare l'agente CloudWatch unificato per inviare metriche e log dalla mia istanza EC2 a CloudWatch?