Mackerelのプラグイン check-aws-cloudwatch-logs-insights を使ってログ監視をしてみた

2021.08.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今年の6月にMackerelエージェントのチェックプラグイン check-aws-cloudwatch-logs-insights が正式にリリースされました。

check-aws-cloudwatch-logs-insights は CloudWatch Logs Insights の API を使ったログ監視のためのプラグインです。
元々 CloudWatch Logs のプラグインとして check-aws-cloudwatch-logs がありましたが、流量の多いロググループを対象とすると読み込みに時間がかかりタイムアウトが発生することがございました。 check-aws-cloudwatch-logs-insights では CloudWatch Logs Insights の API を使うことによって、流用の多いロググループであっても正常に監視できるようになっています。
本ブログでは check-aws-cloudwatch-logs-insights を使ったログ監視をやってみます。

やってみた

CloudWatch Logs に出力される Lambda のログに対して、「Errorの文字列を含むこと」を条件にログ監視してみます。

以下の通り手順を進めます。

  1. EC2 の IAM ロールにポリシー追加
  2. mackerel-agent をインストール
  3. mkr をインストール
  4. check-aws-cloudwatch-logs-insights をインストール
  5. mackerel-agent でプラグインを設定

最初に EC2 の IAM ロールを設定します。プラグインが CloudWatch Logs の API を使用するため、以下のようなポリシーをロールに付与します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "logs:GetQueryResults",
                "logs:StartQuery",
                "logs:StopQuery"
            ],
            "Resource": "*"
        }
    ]
}

続いて、EC2(Amazon Linux 2) に mackerel-agent をインストールします。API キーはオーガニゼーションのページから確認します。

$ curl -fsSL https://mackerel.io/file/script/amznlinux/setup-all-yum-v2.sh | MACKEREL_APIKEY='<APIキー>' sh

mkr をインストールします。mkr は Mackerel の CLI ツールで、プラグインをインストールするのに使用します。

$ sudo yum -y install mkr

プラグイン check-aws-cloudwatch-logs-insights をインストールします。

$ sudo mkr plugin install check-aws-cloudwatch-logs-insights

mackerel-agent の設定ファイル(/etc/mackerel-agent/mackerel-agent.conf)を開いて、プラグインを設定します。

一番下に以下を追記します。

[plugin.checks.aws-cloudwatch-logs-insights-demo]
command = ["/opt/mackerel-agent/plugins/bin/check-aws-cloudwatch-logs-insights", "--log-group-name", "
/aws/lambda/tmp-mackerel-logs-test", "--filter", "filter @message like/Error/", "--critical-over", "0", --return"]
env = { AWS_REGION = "ap-northeast-1" }

設定内容について補足します。
command で check-aws-cloudwatch-logs-insights を実行しています。check-aws-cloudwatch-logs-insights ではオプションは以下のとおりです。

  • --log-group-name:ロググループ名を指定
  • --filter:Logs Insightsのフィルター構文で対象を指定。複数の条件を指定するときは and や or の演算子を使用可能
    • 複数条件の例) filter ( @message like/Invoke Error/ or @message like /Task timed out/ )
  • --critical-over:criticalのトリガーとなる閾値
  • --return:log messagesを出力する設定

設定は以上です。

Error のログを発生させて、Mackerel から通知されることを確認します。
CloudWatch Logs で以下のようにログを出力しました。上2つのログを元に通知されれば OK です。

Mackerel のコンソールを開いてアラートを確認します。

Error のログに対して監視できていました。

さいごに

Mackerel で CloudWatch Logs 上のログを監視するプラグイン check-aws-cloudwatch-logs-insights を試してみました。 従来のログ監視プラグイン check-aws-cloudwatch-logs から Logs Insights の API を使用するよう変更され、より流用の多いログに対しても監視できるようになりました。
Mackerel でログ監視する際は、check-aws-cloudwatch-logs-insights を是非使用ください。

参考