AWS re:Postを使用することにより、以下に同意したことになります AWS re:Post 利用規約

統合 CloudWatch エージェントがログイベントをプッシュしない問題を解決する方法を教えてください。

所要時間2分
1

統合 Amazon CloudWatch エージェントがログイベントをプッシュしない問題を解決したいです。

簡単な説明

統合 CloudWatch エージェントがログイベントをプッシュしない場合は、以下の原因が考えられます。

  • 同期していないメタデータ
  • 古いバージョンの CloudWatch エージェント
  • CloudWatch Logs エンドポイントに接続できない
  • アカウント、AWS リージョン、またはロググループの設定が正しくない
  • AWS Identity and Access Management (IAM) のアクセス許可が不十分
  • CloudWatch エージェントの実行エラー
  • タイムスタンプの問題
  • ログの状態ファイルに値が欠落している、または正しくない
  • ソースログファイルの設定が正しくない
  • PutLogEvents の制約
  • force_flush_interval 値が高い

**注:**以下の解決策は CloudWatch Container Insights には適用されません。CloudWatch Container Insights のトラブルシューティングの詳細については、Container Insights のトラブルシューティングAmazon EKS のポッドステータスのトラブルシューティングto方法を教えてくださいを参照してください。

解決方法

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

同期していないメタデータ

メタデータが同期していない場合、CloudWatch エージェントは意図したとおりに動作しません。この問題を解決するには、次のステップを実行してください。

古いバージョンの CloudWatch エージェント

CloudWatch エージェントのバージョンが古い場合は、CloudWatch エージェントパッケージのリリースノートと最新のバージョン番号をダウンロードしてください。最新バージョンには、問題を解決するアップデートが含まれている場合があります。

CloudWatch Logs エンドポイントに接続できない

以下のいずれかのコマンドを使用して、CloudWatch Logs エンドポイントへの接続をテストします。

注: **example-region ** は必要なリージョンに置き換えます。

telnet logs.<example-region>.amazonaws.com 443
nc -zv logs.<example-region>.amazonaws.com 443

接続に失敗した場合は、以下の手順を実行します。

  • セキュリティグループとネットワークアクセスコントロールリスト (ネットワーク ACL) が接続を許可していることを確認します。
  • パブリックエンドポイントの場合は、インスタンスにインターネットゲートウェイまたは NAT ゲートウェイを使用します。
  • Amazon Virtual Private Cloud (Amazon VPC) エンドポイントを使用する場合は、エンドポイントが Amazon VPC IP に解決されることを確認します。また、エンドポイントセキュリティグループがソースインスタンスからのアクセスを許可していることを確認します。

アカウント、リージョン、またはロググループの設定が正しくない

CloudWatch エージェント設定ファイルで、指定されたリージョンがコンソールのリージョンと一致することを確認します。また、ログが正しいアカウントでチェックされていることを確認します。

オプションで、次の common-config.toml ファイルを使用して、CloudWatch エージェントのシステムデフォルトを上書きします。

Linux:

/opt/aws/amazon-cloudwatch-agent/etc/common-config.toml
/etc/amazon/amazon-cloudwatch-agent/common-config.toml

Windows:

$Env:ProgramData\Amazon\AmazonCloudWatchAgent\common-config.toml

IAM アクセス許可が不十分

CloudWatch エージェントは、IAM ユーザーまたは IAM ロールポリシーからの認証情報を使用して、ログイベントを CloudWatch サービスにプッシュします。ログイベントを発行する前に、ロググループとログストリームを作成します。ロググループまたはログストリームがない場合は、CloudWatch エージェントがそれらを作成します。

ポリシーに以下の IAM アクセス許可が含まれていることを確認します。

"logs:CreateLogGroup","logs:CreateLogStream",
"logs:PutLogEvents",
"logs:DescribeLogStreams"

欠落している IAM アクセス許可をユーザーポリシーまたはロールポリシーに追加します。

注:IAM ロールとユーザーを作成する場合、Amazon が作成した CloudWatchAgentServerPolicyCloudWatchAgentAdminPolicy ポリシーを使用することがベストプラクティスです。

CloudWatch エージェントの実行エラー

CloudWatch エージェントが実行されていることを確認します 。エージェントが実行されていない場合は、ログファイルでエラーがないか確認します。

Linux:

/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log

Windows:

$Env:ProgramData\Amazon\AmazonCloudWatchAgent\Logs\amazon-cloudwatch-agent.log

注:ログは、カスタムログファイルの場所で指定される場合があります。エージェント設定ファイルを確認して、カスタムログの場所を確認します。

debug パラメーターを使用して、設定ファイルの詳細なデバッグログ記録を有効にします。run\ _as\ _user パラメーターを使用する場合は、ユーザーがログの場所に対するアクセス許可を持っていることを確認します。必要なアクセス許可がないと、CloudWatch はその場所にログを書き込むことができません。

CloudWatch エージェントを起動したときに IMDS 関連の問題が発生した場合は、次の手順を実行します。

タイムスタンプの問題

ログイベントのタイムスタンプが 14 日を経過しているか、または今後 2 時間を超える時間が経過した後の時点になっているかを確認します。PutLogEvents コマンドは、どちらの時間枠でもログバッチを許可しません。また、インスタンスのシステムタイムサービスが正しく設定されていることを確認します。詳細については、「Linux インスタンスの時間を設定する」 または「Windows インスタンスの時間を設定する」を参照してください。

ログの状態ファイルに値が欠落している、または正しくない

ログの状態ファイルの欠落した値または正しくない値を解決するには、次の手順を実行します。

  1. 状態ファイルが正しい場所にあることを確認します。
    Linux:

    /opt/aws/amazon-cloudwatch-agent/logs/state
    

    Windows:

    C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs\state

    **注:**上記の状態ファイルに、ログファイルと同じサイズ値が含まれていることを確認します。これにより、新しいデータを読み込んで CloudWatch に発行することができます。

  2. 状態ファイルのサイズ値を確認します。
    Linux:

    sudo cat /opt/aws/amazon-cloudwatch-agent/logs/state/_var_log_httpd_access_log
    

    Windows:

    gc 'C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs\state\C__Program_Files_log.log'
    

    **注:**上記のコマンドの出力は、現在のオフセットの数値です。たとえば、出力が 34 の場合、現在のオフセットはログファイルの 34 番目のバイトです。新しいログがログファイルに書き込まれると、このバイトでログが読み取られます。

  3. ログファイルのサイズ値を確認します。
    Linux:

    stat /var/log/httpd/access_log | grep Size | awk '{print $2}'
    

    Windows:

    Get-Item 'C:\Program Files\log.log' | Format-List | findstr Length
  4. 前のステップ 2 と 3 の出力が同じであることを確認します。

ソースログファイルの設定が正しくない

ソースログファイルの設定が正しくないことによる問題を解決するには、次の手順を実行します。

  • CloudWatch エージェント設定に、モニタリングするログファイルが含まれているかどうかを確認します。
  • ログファイルのファイル形式が正しく、正しい名前と場所が使用されていることを確認します。
  • 現在の設定から、データを取得したい同じロググループとログストリームにログがプッシュされていることを確認します。
  • インスタンスでモニタリングしているログファイルを確認します。ソースログファイルに、ロググループに発行するデータが含まれていることを確認します。

PutLogEvents の制約

CloudWatch エージェントは、PutLogEvents API を使用してログイベントを CloudWatch ロググループに発行します。この API の制約に準拠していることを確認します。詳細については、PutLogEvents を参照してください。

force_flush_interval 値が高い

force\ _flush\ _interval は、ログがサーバーに送信される前にメモリバッファに保持される最大時間を指定します。ログのサイズが最大バッファの 1 MB に達すると、ログは直ちに CloudWatch に発行されます。ログは force\ _flush\ _interval で設定された間隔に関係なく CloudWatch に発行されます。

間隔を高い値に設定してもログサイズが 1 MB に達しない場合、ログはバッファに残ります。ログは、バッファがいっぱいになるか、間隔が経過するまでバッファに残ります。この間、ログは CloudWatch で利用できません。間隔の値が正しいサイズに設定されていることを確認します。発行したいログサイズと間隔に基づいて間隔値を設定することがベストプラクティスです。

関連情報

Troubleshooting the CloudWatch agent

AWS公式
AWS公式更新しました 9ヶ月前