Cloudwatch Logs の Subscription Filter

Published at: 2023/1/14


Cloudwatch Logs 上のログイベントに対して、リアルタイムで処理を行うためには、 subscription filter を定義してそのイベントを対象 aws リソース(Kinesis, Lambda 等)に呼ばすことになる。

Real-time processing of log data with subscriptions - Amazon CloudWatch Logs

Use CloudWatch Logs subscriptions to process log data in real-time.

docs.aws.amazon.com

上記記事によれば、 Subscription Filter の構成要素は以下の通り。

  1. 対象 Log Group
  2. filter pattern: 条件式。マッチしたログが飛ばされる。
  3. destination arn: 飛ばす先の ARN
  4. role arn: 飛ばすために Cloudwatch が利用する AWS Role
  5. distribution: Kinesis に飛ばす際に影響。

また、同様に上記記事より、 Filter Pattern について、この文法は metric filter のものが利用されていることが分かる。

Metric Filter の条件式は、具体的に利用可能な書き方という例示のみが資料には規定されていて、厳密な文法の式とその論理的な意味、というのは雰囲気で理解するしかない。 検索エンジンの検索バーのような文法をしていて、そのどれを記述してもよい形になっている。

  1. 単純な語句一致の条件
    • 例: ERROR api
      • AND 的にすべての語句を持つログイベントがマッチ
  2. JSON 条件
    • 例: { $.type = "ApiError" }
      • (おそらくトップ直下の) type フィールドが ApiError の文字列である、中身が JSON ログイベントがマッチ
  3. スペース区切り条件
    • 例: [ip = 192.*, server, bytes >= 1000,]
      • スペース区切りして、最初のフィールドが 192. で始まり、3番目が 1000 以上。

Tags: aws