kdnakt blog

hello there.

Amazon CloudWatch Logs InsightsでSQLを使ってトラブルシューティングする

Amazon CloudWatch Logs InsightsでSQLを使ったクエリを実行できるようになりました。

[Logs InsightsのSQLクエリ]

公式発表はこちら。SQL以外にもOpenSearch PPL(Piped Processing Language)も利用できるようになっています。

aws.amazon.com

SQLクエリを書きやすいようにロググループの選択時に、ロググループ名をコピーしたり、クエリエディタに挿入できるようになっています。

画面に表示されているように、2024年12月時点ではStandardログクラスでしか利用できないようです。

[SQLを実行してみる]

試しに、以下のようなクエリを実行してみます。

SELECT `@timestamp`, `@message` FROM `/aws/lambda/hello-world-func`
 ORDER BY `@timestamp` DESC
 LIMIT 25

以下のように結果を取得することができます。この辺りは通常のLogs Insightsクエリと同じです。

[トラブルシューティングに利用する]

例えば、Lambda関数のログを調査する際、これまではエラーが発生しているログを見つけてLambda関数のリクエストIDを特定し(クエリ1回目)、該当のリクエストIDに関するログをすべて取得する(クエリ2回目)といった方法を取る必要がありました。

しかし、SQLが利用できるようになったことで、SQLのサブクエリを活用して、エラーの発生しているLambda関数の実行ログ全体を一発で取得できるようになりました。

以下が、エラーの発生しているLambda関数の実行ログ全体を取得するSQLの例です。

SELECT `@timestamp`, `@message`, `@logStream`, `@log` FROM `/aws/lambda/hello-world-func`
WHERE `@requestId` IN (SELECT DISTINCT `@requestId` FROM  `/aws/lambda/hello-world-func` WHERE  `@message` LIKE '%ERROR%')
ORDER BY `@timestamp` DESC
LIMIT 1000;

実行結果はこのようになります。

[まとめ]

  • Amazon CloudWatch Logs InsightsでSQLとPPLが利用できるようになりました
  • サブクエリなど標準的なSQLが利用できます
  • Lambda関数のエラー調査などで重宝しそうです