통합 CloudWatch 에이전트가 지표 또는 로그 이벤트를 CloudWatch로 푸시하지 않는 이유는 무엇입니까?

6분 분량
0

지표와 로그를 Amazon CloudWatch에 게시하도록 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 통합 CloudWatch 에이전트를 구성했습니다. 하지만 CloudWatch 콘솔에 지표 또는 로그가 표시되지 않습니다. 통합 CloudWatch 에이전트가 지표와 로그를 CloudWatch로 푸시하지 않는 이유는 무엇입니까?

간략한 설명

통합 CloudWatch 에이전트가 지표나 로그를 CloudWatch로 푸시하지 않는 데에는 여러 가지 이유가 있습니다. 예를 들어 권한 또는 연결 오류로 인해 에이전트가 지표를 게시하지 못할 수 있습니다. 통합 CloudWatch 에이전트 로그를 검토할 때 다음과 같은 오류가 표시될 수 있습니다.

  • Agent Log Error: No Connectivity to Endpoint(에이전트 로그 오류: 엔드포인트에 연결되지 않음)
  • Agent Log Error: Insufficient Permissions(에이전트 로그 오류: 권한 부족)

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

통합 CloudWatch 에이전트 로그 검토

에이전트 로그 파일을 사용하여 통합 CloudWatch 에이전트 패키지에서 발생하는 문제를 해결할 수 있습니다. 다음과 같은 일반적인 문제 중 하나가 발생할 수 있습니다.

로그에 다음 오류 중 하나가 표시될 수 있습니다.

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

CloudWatch 엔드포인트에 대한 연결 확인

CloudWatch로 전송되는 트래픽이 퍼블릭 인터넷을 통과하지 않아야 하는 경우 VPC 엔드포인트를 대신 사용할 수 있습니다. VPC 엔드포인트를 사용하는 경우 다음을 확인합니다.

  • 프라이빗 네임 서버를 사용하는 경우 DNS 확인에서 정확한 응답이 제공되었는지 확인합니다.
  • CloudWatch 엔드포인트가 프라이빗 IP 주소로 확인되는지 확인합니다.
  • VPC 엔드포인트와 연결된 보안 그룹이 호스트로부터의 인바운드 트래픽을 허용하는지 확인합니다.

1.    지표 엔드포인트에 대한 연결을 확인합니다.

$ 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.    로그 엔드포인트에 대한 연결을 확인합니다.

$ 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.    VPC 엔드포인트가 프라이빗 IP 주소로 확인되는지 확인합니다.

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

통합 CloudWatch 에이전트 구성 검토

에이전트 구성 파일에서는 CloudWatch에 게시된 지표와 로그를 자세히 설명합니다. 에이전트 구성 파일을 검토하여 게시하려는 로그와 지표가 포함되어 있는지 확인합니다.

호스트에 지표와 로그를 게시할 권한이 있는지 확인

AWS 관리형 정책 CloudWatchAgentServerPolicyCloudWatchAgentAdminPolicy를 사용하면 통합 CloudWatch 에이전트를 배포하고 올바른 권한이 있는지 확인할 수 있습니다. 이러한 정책을 참조로 사용하여 호스트에 올바른 권한이 있는지 확인합니다.

이 예제의 AWS CLI 출력에는 권한이 부족한 것으로 표시됩니다.

이 에이전트 시작 명령 출력은 EC2 인스턴스에 연결된 IAM 역할이 없음을 보여줍니다.

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

이 에이전트 시작 명령 출력은 잘못된 IAM 역할이 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!

경우에 따라 IAM 사용자가 명령줄에서 작업 중일 수 있습니다. obtain user/role 명령은 인스턴스와 연결된 IAM 사용자 또는 역할을 반환합니다.

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

에이전트가 정상적으로 시작되는지 확인

에이전트는 인수로 전달된 구성 파일과 함께 AWS CLI를 사용하여 시작하도록 설계되었습니다. 유효한 시작 명령을 사용합니다.

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`

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`

중요: Windows 제어판에서 에이전트를 시작하지 마세요.

에이전트가 실행 중인지 확인

지표 및 로그를 게시하려면 에이전트가 실행 중이어야 합니다. 이 명령을 실행하여 에이전트가 활성 상태인지 확인합니다.

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

에이전트 구성 업데이트 후 에이전트 다시 시작

에이전트는 구성 파일에 변경 내용을 자동으로 등록하지 않습니다. 새 지표 및 로그나 다른 지표 및 로그를 포함하도록 에이전트 구성이 업데이트되면 다음 명령을 사용하여 에이전트를 다시 시작합니다.

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

관련 정보

통합된 CloudWatch 에이전트를 설치하여 EC2 인스턴스에서 CloudWatch로 지표 및 로그를 푸시하도록 구성하려면 어떻게 해야 합니까?

CloudWatch 에이전트 문제 해결

AWS 공식
AWS 공식업데이트됨 2년 전