Cloud Watch Logs Insightsの簡単な使い方
経緯
顧客のSQL Server on RDSのデータを変換して DynamoDBに入れ直すということをしている。
大体上記のようなアーキテクチャでやっており。
- cronジョブでLambdaを5分おきに起動。
- RDSの最新の変更をクエリ
- DynamoDBに入るように変換
- DynamoDBからはDynamoDB Triggerで別のLambdaを起動(構成図上は省略)
- ElasticsearchにHTTP POSTしてdocmentを投入する
という作業をしている。
ある日朝起きてみると DynamoDB = 47万件 Elasticsearch = 42万件
「うわぁ、5万件落ちてる。」 「多分ESのmappingsとDDB Triggerから投入したデータがあってないんだわ。」
そして、cloudwatchをみると。。。 47万件の成否が入り混じったログが大量放出されている。
ログストリームを一つ一つ開いて、 [ERROR]接頭辞がついたログをみるのは面倒だ。
ということで調べてみるとログストリーム跨ぎで独自のクエリ構文でログ検索をできるCloudwatch Logs Insightsなるサービスがあるようではないか。
使ってみた
いつものcloudwachの左ペイン Cloudwach Logsの「ログ」メニューのすぐ下の「インサイト」があるではないか。
で、大体添付のようなイメージで処理が可能 ドキュメントはこちら
- fields ... 読んで時の如くフィールドを指すようだ。(SELECT のあとのフィールド指定に近い?)
- filter ... 正規表現を使用してフィルターができる。詳細はこちら
- stats ... 計数処理ができる
- sort ... 並び替えが可能。右ペインをみると使用可能なフィールドが列挙されている模様
- limit ... デフォルトで1,000件。1 ~ 10,000件まで選択可能なようだ。
という感じで少しSQLを触ったことがあればすぐになれて使えそうです。
まとめ
Lambdaなんかでは何もせずともCloudwatchにログがでます。
私は従来、単発のエラーのログを探すようなことが多かったので、ロググループから目グレップしていました。
もう少し広範囲で曖昧な検索をしたい場合は、Cloudwatch Logs Insightsは大いに役立ちそうです。