Amazon CloudWatch Logs のフィルターパターンで正規表現が使えるようになったので、検証してみました。
アップデート概要
正規表現でログを抽出してみる
今回は以下のフィルターパターンとサンプルログで試してみます。
フィルターパターン
statusCodeが400番台を抽出します。
{ $.statusCode=%4[0-9]{2}% }
サンプルログ
[83078518-fcc1-4d30-9573-8b9737671438] BENCHMARK : Running Start Crawl for Crawler TestCrawler2
[83078518-fcc1-4d30-9573-8b9737671438] BENCHMARK : Classification complete, writing results to database mygluedatabase
[83078518-fcc1-4d30-9573-8b9737671438] INFO : Crawler configured with SchemaChangePolicy {"UpdateBehavior":"UPDATE_IN_DATABASE","DeleteBehavior":"DEPRECATE_IN_DATABASE"}.
{ "statusCode": "403" }
[83078518-fcc1-4d30-9573-8b9737671438] INFO : Created table gluetest in database mygluedatabase
{ "statusCode": "404" }
{ "statusCode": "500" }
[83078518-fcc1-4d30-9573-8b9737671438] BENCHMARK : Finished writing to Catalog
[83078518-fcc1-4d30-9573-8b9737671438] BENCHMARK : Crawler has finished running and is in state READY
適当なロググループとログストリームを作成します。

サンプルログを使ってログイベントを作成します。

「フィルターバー」にフィルターパターンを入力して検索してみます。
statusCodeが400番台のみ抽出され、想定通りの結果です。

サブスクリプションフィルターでも試してみます。
「サブスクリプションフィルター」→「作成」から任意のフィルターを選択します。

「サブスクリプションフィルターのパターン」にフィルターパターンを入力します。
そして、「イベントメッセージをログ記録に」サンプルログを入力し、「パターンをテスト」を押下します。
こちらもstatusCodeが400番台のみ抽出され、想定通りの結果です。

まとめ
フィルターパターンで正規表現を使うことで、ログ検索ができました。
従来、複雑な条件でログ検索したいときには、Lambdaで正規表現の処理をする方法がありました。
今回のアップデートにより、標準機能で手軽に複雑な処理を行うことができるようになったので、ぜひ活用してみてください。