CloudWatch Logsを使用してログを抽出するとき、フィルターパターンという概念が存在することを知ったのでまとめ。
フィルターパターンの種類は数多くありますが、本記事では簡単に使える「?」「””」「-」の3種類のみ例として取り上げています!
CloudWatch Logsについて
CloudWatch Logsとは、AWS(Amazon Web Services)が提供するサービスで、アプリケーションやシステムのログデータをリアルタイムで収集、監視、管理するためのサービスです。AWSでシステムを構築した経験がある方なら知っている方も多いと思います。詳細は公式ドキュメントをご参照ください。
直面した問題
CloudWatch Logsのログの検索画面はこんな感じ。検索ボックスに文字列を入力して、それに一致するログを抽出することができるという、直感的にもわかりやすい仕様。さらに、検索範囲とする時間範囲も指定できるので、障害が起こった時刻がわかればピンポイントでログを検索することができます。
しかしながら、アプリケーションによっては毎秒たくさんのログを出しているものもあり、、、
時間範囲を絞ってもたくさんのログが出力されてしまうので地味に大変だったりします。また、アプリケーションの仕様について詳しく把握できていない時にはどんな文字列で検索をかけていいかよくわからなかったりもするんですよね。。
そんな中で上手く障害に関連するログを見つけるにはどうするか?ということで、CloudWathc Logsのフィルターパターンを使うことでログの抽出を行うことができました。
フィルターパターンについては画像のこのリンクから、公式のドキュメントを確認できます。
フィルターパターンについて
リンクを開いてみると、様々なフィルターパターンがあることがわかります。
今回は3点目の”Using filter patterns to match terms in unstructured log events”で紹介されているフィルターパターンで事足りましたので、こちらの内容を紹介していきます。
シンプルな文字列検索の場合
後述する様々なフィルターパターンとの検索結果と比較するため、シンプルに一つの文字列で検索をかけた場合を記載します。実際のロググループから”Render”という文字列を含むログだけを抽出してみましょう。
ここからフィルターパターンを駆使してログを絞り込んでみます。
AND検索
文字列Aと文字列Bを両方含むログを抽出したい時はこう検索バーに入力します。文字列A 文字列B
文字列を半角スペースで区切るだけですね。実際のロググループから、”Render”と”layouts”の文字列を含むログを検索した結果がこちらです。
確かに、いずれのログにも”Render”と”layouts”の文字列が含まれています。
OR検索
文字列Aと文字列Bのいずれかを含むログを検索する場合は次のように検索バーに入力します。?文字列A ?文字列B
検索対象の文字列の先頭に”?”をつけるわけですね。実際のロググループから、”Render”または”Complete”を含むログを検索した結果が次のとおりです。
“Render”のみで検索した結果と比較すると、”Complete”を含むログも抽出対象となっていることがわかります。
空白を含む文字列の検索
先程、AND検索では検索したい文字列を半角スペースで区切ると説明しました。では、半角スペースを含む文字列を検索したい場合にはどうすれば良いでしょうか?
このように、「””」の記号で文字列を囲んで検索すれば良いです。"文字列A 文字列B"
実際に、”Rendering layout”の文字列を含むログを検索してみた例がこちらです。
特定の文字列を含まないログの検索
例えば、ログの量が多い時には正常稼働していることを表すログを出力から除外して、エラーに関連するログのみを表示させたい場合があると思います。
この時に役立つのが、特定の文字列を含まないログを抽出する次のフィルターパターンです。文字列A -文字列B
こちらも簡単で、除外したい文字列の先頭に”-“をつければOKです。
以下の例では”Render”という文字列は含むが、”Rendering”という文字列が含まれるものを除外して検索してみました。
“Rendering”の文字列を含むログは除外されていますね。
まとめ
CloudWatch Logsで使える代表的なフィルターパターンをいくつか紹介しました。
これはほんの一部で、他にも正規表現を使ったフィルターなど便利な方法がフィルターパターンがたくさん用意されています。
いざ検索が必要な時にすぐ使えるようにしておきたいところです。
参考になれば幸いです。
コメントを残す