スキップしてコンテンツを表示

統合 CloudWatch エージェントがログイベントを送信しない理由を教えてください。

所要時間2分
1

統合 Amazon CloudWatch エージェントがログイベントを送信しないので、この問題を解決したいと考えています。

解決策

次の解決策は、CloudWatch Container Insights には適用されません。CloudWatch Container Insights のトラブルシューティングについては、「Container Insights のトラブルシューティング」を参照してください。

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

メタデータが同期されていないと、CloudWatch エージェントに問題が発生する可能性があります。

この問題を解決するには、次の手順を実行します。

  • CloudWatch エージェントをインストールする前に、Amazon マシンイメージ (AMI) を作成して、元のインスタンスから固有の情報を取得します。
  • AWS CloudFormation、AWS Systems Manager、ユーザーデータスクリプト、またはコマンドラインを使用して、起動時に CloudWatch エージェントをインストールします。
  • Windows インスタンスの場合、AMI で作業するときは Sysprep を使用してください。

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

現在使用している CloudWatch エージェントのバージョンを確認してください。CloudWatch エージェントが古い場合は、最新バージョンの CloudWatch エージェントパッケージをダウンロードしてインストールします。最新バージョンには、問題を解決するアップデートが含まれている場合があります。

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

注: 次のコマンドでは、example-region を実際の AWS リージョンに置き換えてください。

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

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

デフォルトでは、netcat は Windows マシンにはインストールされません。代わりに、Windows PowerShell で次の Test-NetConnection コマンドを実行してください。

Test-NetConnection -ComputerName logs.example-region.amazonaws.com -Port 443

接続に失敗した場合は、次のアクションを実行してください。

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

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

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

CloudWatch エージェントのシステムデフォルトを上書きするには、次の common-config.toml ファイルの場所を使用します。

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 にログイベントを送信するために、CloudWatch エージェントは AWS Identity and Access Management (IAM) ユーザーまたは IAM ロールポリシーの認証情報を使用します。

ID ベースのポリシーに次の IAM アクセス許可が含まれていることを確認してください。

  • logs:CreateLogGroup
  • logs:CreateLogStream
  • logs:PutLogEvents
  • logs:DescribeLogStreams

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

IAM ロールまたはユーザーを作成するときはCloudWatchAgentServerPolicy、または CloudWatchAgentAdminPolicy ポリシーを使用するのがベストプラクティスです。

ロググループまたはログストリームがない場合は、CloudWatch エージェントがそれらを作成します。ログイベントを発行する前に、ロググループログストリームを作成します。

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) に関する問題が発生した場合は、次のアクションを実行してください。

タイムスタンプの問題

CloudWatch エージェントは、PutLogEvents API オペレーションを使用してログイベントを CloudWatch ロググループに発行します。ログイベントが PutLogEvents API オペレーションの制約を満たしていることを確認してください。また、インスタンスのタイムゾーンが正しく設定されていることも確認してください。

ログの状態ファイルの値が正しくない

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

  1. 状態ファイルが正しい場所にあることを確認します。<br id=hardline_break/> Linux の場合は、次のファイルの場所を使用してください。<br id=hardline_break/> /opt/aws/amazon-cloudwatch-agent/logs/state<br id=hardline_break/> Windows の場合は、次のファイルの場所を使用してください。<br id=hardline_break/> C:\ProgramData\Amazon\AmazonCloudWatchAgent\Logs\state<br id=hardline_break/> 注: CloudWatch エージェントが新しいデータを読み取って CloudWatch ロググループに発行できるように、前述の状態ファイルにログファイルと同じサイズ値が含まれていることを確認してください。

  2. 状態ファイルのサイズ値を確認します。<br id=hardline_break/> Linux の場合は、次の sudo コマンドを実行します。

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

    Windows の場合は、次の Windows PowerShell コマンドを実行します。

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

    注: 上記のコマンドの出力には、現在のオフセットの数値が含まれます。例えば、出力が 34 の場合、現在のオフセットはログファイルの 34 番目のバイトです。CloudWatch Logs は、CloudWatch エージェントがログファイルに新しいログを書き込むときに、指定されたバイト位置から読み取ります。

  3. ログファイルのサイズ値を確認します。<br id=hardline_break/> 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 エージェント設定に、モニタリングするログファイルが含まれているかどうかを確認します。
  • ログファイルのファイル形式が正しく、正しい名前と場所を使用していることを確認します。
  • 現在の設定で、データの取得先と同じロググループとログストリームにログを送信するように設定されていることを確認します。
  • インスタンスでモニタリングしているログファイルを確認します。ソースログファイルに、ロググループに発行するデータが含まれていることを確認します。

force_flush_interval 値が高い

ログサイズが最大バッファの 1 MB に達すると、CloudWatch は、設定した force_flush_interval 間隔に関係なく、すぐにログを受信します。詳細については、「CloudWatch エージェント設定ファイル: Metrics セクション」タブを参照してください。

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

関連情報

CloudWatch エージェントのトラブルシューティング

Amazon EKS のポッドステータスをトラブルシューティングする方法を教えてください

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

関連するコンテンツ