統合 CloudWatch エージェントがメトリクスやログイベントを CloudWatch にプッシュしないのはなぜですか?

所要時間4分
0

統合 Amazon CloudWatch エージェントを Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで設定して、Amazon CloudWatch にメトリクスとログを投稿しました。しかし、CloudWatch コンソールにメトリクスやログが表示されません。CloudWatch でメトリクスとログイベントを確認したいと考えています。

簡単な説明

統合 CloudWatch エージェントがメトリクスやログを CloudWatch にプッシュしない理由はいくつかあります。例えば、アクセス許可や接続に問題があるためにエージェントがメトリクスを発行できない、ということが考えられます。統合 CloudWatch エージェントのログを確認すると、次のエラーのいずれかが表示されることがあります。

  • エージェントログエラー: エンドポイントに接続できません
  • エージェントログエラー: アクセス許可が不十分です

解決策

**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。

統合 CloudWatch エージェントログを確認する

エージェントログファイルを使用すると、統合 CloudWatch エージェントパッケージで発生した問題をトラブルシューティングしやすくなります。

発生する可能性のある問題は、次のとおりです。

次のログにこれらのエラーのいずれかが表示される場合があります。

エージェントログエラー: エンドポイントに接続できません

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.

エージェントログエラー: アクセス許可が不十分です

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 へのトラフィックがパブリックインターネットを経由しない場合、Amazon VPC エンドポイントを使用できます。Amazon VPC エンドポイントを使用する場合は、次のパラメータを確認します。

  • プライベートネームサーバーを使用している場合は、DNS 解決によって正確な応答が得られたことを確認します。
  • CloudWatch エンドポイントがプライベート IP アドレスに解決されることを確認します。
  • ホストからのインバウンドトラフィックを許可する、Amazon VPC エンドポイントに関連付けられているセキュリティグループを確認します。

CloudWatch エンドポイントへの接続を確認するには、次の手順を実行します。

  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. Amazon VPC エンドポイントがプライベート IP アドレスに解決されることを確認するには、次のコマンドを実行します。

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

統合 CloudWatch エージェントの設定を確認する

エージェント設定ファイルには、CloudWatch に発行されるメトリクスとログの詳細が記載されています。エージェント設定ファイルを確認して、発行するログとメトリクスが含まれていることを確認します。

メトリクスとログを発行するためのアクセス許可がホストにあることを確認する

AWS 管理ポリシーの CloudWatchAgentServerPolicy および CloudWatchAgentAdminPolicy は統合 CloudWatch エージェントをデプロイするのに役立ちます。これらのポリシーは、正しいアクセス許可があることを確認するのにも役立ちます。これらのポリシーを参考として活用し、ホストに正しいアクセス許可があることを確認します。

ここでの例の AWS CLI 出力では、アクセス許可が不十分であることが示されています。

次の AWS CLI config コマンドは、EC2 インスタンスにアタッチされた AWS Identity and Access Management (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!

次の AWS CLI 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!

次の get-caller-identity コマンドは、インスタンスに関連付けられている 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"
}

関連情報

EC2 インスタンスから CloudWatch にメトリクスとログをプッシュするには、統合 CloudWatch エージェントをどのようにインストールして設定すればいいですか?

AWS公式
AWS公式更新しました 10ヶ月前
コメントはありません

関連するコンテンツ