11月26日~11月30日にかけてラスベガスで開催された『AWS re:Invent 2018』で発表された機能のひとつ、CloudWatch Logs Insightsを使ってみました。
前提
前提として、apacheのcombinedアクセスログをCloudWatch Logsにロググループ"/var/log/httpd/access_log"として蓄積できているものとします。
クエリを実行してみよう
コンソールからCloudWatchを開くと、左のメニューにログ
があります。その下階層にインサイト
が追加されました。これをクリックして、インサイトの画面を開きます。
- 対象のロググループを選んで
- 必要があればタイムスタンプの範囲を指定して
- クエリを書いて実行します。
試しにこんな簡単なクエリを実行してみました。
parse '* - * [*] "* * *" * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes
|filter statusCode=500
apacheのログはparseクエリで一時的なフィールドとして取り出す必要があります。「クエリのヘルプ」のparseにマウスオーバーするとapacheのcombinedログにそのまま使えるparseが書いてあります。あとはひっかけたい条件をfilterで書いてやればよいです。
使ってみた感想
CluodWatch LogsをS3に置いてAthenaに読み込ませて…よりは、はるかに簡単なステップでログにクエリを実行できます。しかし、
必要最低限
のクエリしかありません。私がやりたかったのは、Splunkの置き換えなんですが、さすがにそこまでできてしまうとSplunkの存在意義がなくなってしまいます。
具体的にはrexで正規表現にひっかけた結果をGROUP BYして、だったのですがいまのところは無理でした。
パイプラインで結合してstatsとかは、かなりSplunkを意識しているようなんですけどね。
今後の機能充実に期待です。