Amazon CloudWatch Logsの監視をおこなう

公式チェックプラグイン集の check-aws-cloudwatch-logs を使うと、Amazon CloudWatch Logsのログデータの監視をおこなうことができます。公式チェックプラグイン集のインストールは、チェック監視に公式チェックプラグイン集を使う をごらんください。

check-aws-cloudwatch-logs の使い方

check-aws-cloudwatch-logsを使ってCloudWatch Logsの監視をおこなうためには、例えば以下のように mackerel-agent.conf に記述し、mackerel-agentを再起動します。

[plugin.checks.aws-cloudwatch-logs-sample]
command = """
/path/to/check-aws-cloudwatch-logs \
  --log-group-name /aws/lambda/sample_log_group \
  --pattern "Error" \
  --critical-over 5 \
  --warning-over 3 \
"""
env = { AWS_REGION = "ap-northeast-1" }

以下のオプションを指定できます。

  • --log-group-name (必須): ロググループ名を指定します。
  • --log-stream-name-prefix: ストリーム名をプレフィックスで絞り込みます。
  • --pattern (必須): 監視を行うための検索文字列。フィルタとパターンの構文を参照してください。
  • --warning-over: 設定値より多くのメッセージが検出された場合にwarningにする。
  • --critical-over: 設定値より多くのメッセージが検出された場合にcriticalにする。
  • --return: 検出したメッセージをMackerelに送信します。秘匿情報が含まれないよう注意してください。メッセージの量が大きい場合は表示が切り詰められることがあります。

その他のオプションに関しては check-aws-cloudwatch-logs --help をご確認ください。

認証と必要なポリシーについて

EC2のインスタンスから監視する場合、インスタンスプロファイルが認証に使われます。プラグインの実行のためには logs:FilterLogEvents アクションが必要なので、ポリシーをアタッチしてください。 インスタンスプロファイルを用いる以外の方法としては、AWS_PROFILEを設定する方法と、AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを設定する方法があります。プラグインの設定のenvにて指定してください。

--patternの設定値について

ログメッセージを絞り込むための--patternオプションには、Amazon CloudWatch Logsのフィルタとパターンの構文に記述されている構文を指定することができます。正規表現ではないこと、複数指定することはできないことに注意してください。

Unknown: command timed out について

流量の多いログストリームや、ストリーム数の多いロググループでは、プラグインの実行がタイムアウトすることがあります。

プラグインの設定で timeout_seconds を指定することで、プラグインの実行のタイムアウトを伸ばすことができます。ただし、実行間隔 (デフォルトでは60秒) を超えないように指定する必要があります。詳しくはチェック監視項目を追加するを参照してください。

ログの量が多い場合、定期実行しているプラグインがログを収集しきれないのは構造上避けられない状況です。ログの量を減らしたり、サンプリングするなどの対策が考えられます。

ソースコードについて

check-aws-cloudwatch-logsのソースコードは以下に公開されています。

https://github.com/mackerelio/go-check-plugins/tree/master/check-aws-cloudwatch-logs