2
1

Amazon CloudWatch LogsのメトリクスフィルターでLambdaの処理の統計情報を取得する

Last updated at Posted at 2023-05-21

はじめに

Lambdaを使ってアプリケーションを作っていると、カスタムメトリクスを取得したくなるケースが発生する。
しかし、FaaSでは統計情報を収集する・定期でメトリクス情報を送る仕組みがないため、コンテナとは異なるアプローチが必要になる(例えばコンテナアプリでは、定期的にPutMetricDataのAPIを呼ぶことでメトリクス情報を送ることが可能)。

Amazon CloudWatch Logsのメトリクスフィルターを使えば、ログの情報をカスタムメトリクスとして送信することができる。

今回は、この方式の統計情報作成をTerraformで自動化する。

アプリケーションのログ情報

例えば、今回のアプリケーションでは、処理中に文字列の修正を行ったかどうかを判定して統計を取りたいとする。
メトリクスを分けるために、以下のようなINFOログを出力するとしよう。

  • 修正を行わなかった場合
[2023-05-21T02:15:16.701] [INFO] default - [Metric Filter] CorrectWord: Uncorrected.
  • 修正を行った場合
[2023-05-21T02:15:16.701] [INFO] default - [Metric Filter] CorrectWord: Corrected.

メトリクスフィルタの設定

上記のログを統計する場合、以下のようなメトリクスフィルタを作れば良い。
petternの部分がフィルタ用文字列、metric_transformationの部分がメトリクスの設定だ。
今回は件数を計上したいので、1ログ1件として、value = "1"unit = "Count"を設定している。
今回はLambdaでディメンション指定は不要なので、使っていない。EC2やECSで見分けが必要な場合はディメンションを使おう。

resource "aws_cloudwatch_log_group" "lambda" {
  name              = "/aws/lambda/${local.lambda_function_name}"
}

resource "aws_cloudwatch_log_metric_filter" "example1" {
  name           = "${local.lambda_function_name}-correctword-corrected"
  pattern        = "Metric Filter Corrected"
  log_group_name = aws_cloudwatch_log_group.lambda.name

  metric_transformation {
    namespace  = "CustomMetrics/xxxxxxxx"
    name       = "CorrectedCount"
    value      = "1"
    unit       = "Count"
  }
}

resource "aws_cloudwatch_log_metric_filter" "example2" {
  name           = "${local.lambda_function_name}-correctword-uncorrected"
  pattern        = "Metric Filter Uncorrected"
  log_group_name = aws_cloudwatch_log_group.lambda.name

  metric_transformation {
    namespace  = "CustomMetrics/xxxxxxxx"
    name       = "UncorrectedCount"
    value      = "1"
    unit       = "Count"
  }
}

なお、フィルタを作ってからチェックするのは面倒なので、マネージメントコンソールでは既存のログからパターンをテストをしてから適用する方が良い。
image.png

結果確認

上記の設定を入れた後に適当にアプリを動かしてログを出力させてから、CloudWatchメトリクスのコンソールを確認しよう。

image.png

自分で作ったフィルタのメトリクス情報が出力されるようになった!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1