from 30

30歳からwebエンジニアになったけど、思ったよりも苦しいので、その苦闘の記録をば

Cloud Watch Logs Insightsの簡単な使い方

経緯

f:id:kohski:20201118001708p:plain
構成図

顧客のSQL Server on RDSのデータを変換して DynamoDBに入れ直すということをしている。

大体上記のようなアーキテクチャでやっており。

  1. cronジョブでLambdaを5分おきに起動。
  2. RDSの最新の変更をクエリ
  3. DynamoDBに入るように変換
  4. DynamoDBからはDynamoDB Triggerで別のLambdaを起動(構成図上は省略)
  5. ElasticsearchにHTTP POSTしてdocmentを投入する

という作業をしている。

ある日朝起きてみると DynamoDB = 47万件 Elasticsearch = 42万件

「うわぁ、5万件落ちてる。」 「多分ESのmappingsとDDB Triggerから投入したデータがあってないんだわ。」

そして、cloudwatchをみると。。。 47万件の成否が入り混じったログが大量放出されている。 f:id:kohski:20201118003614p:plain

ログストリームを一つ一つ開いて、 [ERROR]接頭辞がついたログをみるのは面倒だ。

ということで調べてみるとログストリーム跨ぎで独自のクエリ構文でログ検索をできるCloudwatch Logs Insightsなるサービスがあるようではないか。

使ってみた

いつものcloudwachの左ペイン Cloudwach Logsの「ログ」メニューのすぐ下の「インサイト」があるではないか。

f:id:kohski:20201118003651p:plain

で、大体添付のようなイメージで処理が可能 ドキュメントはこちら

  • fields ... 読んで時の如くフィールドを指すようだ。(SELECT のあとのフィールド指定に近い?)
  • filter ... 正規表現を使用してフィルターができる。詳細はこちら
  • stats ... 計数処理ができる
  • sort ... 並び替えが可能。右ペインをみると使用可能なフィールドが列挙されている模様
  • limit ... デフォルトで1,000件。1 ~ 10,000件まで選択可能なようだ。

という感じで少しSQLを触ったことがあればすぐになれて使えそうです。

まとめ

Lambdaなんかでは何もせずともCloudwatchにログがでます。

私は従来、単発のエラーのログを探すようなことが多かったので、ロググループから目グレップしていました。

もう少し広範囲で曖昧な検索をしたい場合は、Cloudwatch Logs Insightsは大いに役立ちそうです。