CloudWatch には、アクセスログやアプリ側で追跡に使うログなどを流していますが、CloudWatch の画面上部にあるフィルタでハマったので備忘録として残しておきます。
ハマったと言っても、複雑なフィルタリングをしようとしたわけではなく、単純な文字列検索がしたかっただけなのですけどね・・・。
今回は、ログに特定の文字列が含まれているログを抽出してみたいと思います。
文字列検索
最初、指定の文字列をそのまま検索窓に入力していたのですが、まったくヒットしてくれませんでした。

パターンマッチの構文ミスのようなエラーですね。
neko:
どうやら、コロンが含まれていたことが原因のようです。
文字列をピンポイントで検索する場合はダブルクォーテーションで囲む必要があったようです。
“neko:”
JSONの項目ごとの検索
JSON で出力しているログの場合は、項目指定もできるようです。
1 2 3 4 | { "name": "tama", "color": "white" } |
この場合は、以下のような構文で「name」の値が「tama」になっているログを抽出できます。
{ $.name = “tama” }
もっと複雑なこともできますが、まずは運用ですぐに必要そうな基本的なパターンを覚えたいですね。
まとめ
CloudWatch のログ以外にも、Elasticsearch や DataDog のクエリ検索など、この手の検索を効率よく使いこなせればもっと運用は楽になりそうです。
大昔は、複数の EC2 上のアクセスログやアプリログを ssh を使いつつ grep や awk で引っ掛けていたこともありましたが、Auto Scaling や ECS(Fargate)などを利用しているとそんなわけにもいきません。
Fluentd などのエージェントのデータ連携もかなり増えていますし、問い合わせや調査が効率よくできる仕組みと、それを使いこなす技術を身に付けたいものです。
AWS の無料枠が有るうちはいいのですが、1 年が経過し対象から外れると、個人であれこれ試すには従量課金と言えども躊躇してしまう場面もあります。
チャンスが有る時に運用ノウハウを詰め込んでおきたいですね。