Amazon CloudWatch のクエリを自然言語で生成できるようになりました (プレビュー) #AWSreInvent

手早く分析したい、でもクエリを一から書くのは大変という時に役立ちそう
2023.11.27

どんなクエリを投げれば良いのか分からない

こんにちは、のんピ(@non____97)です。

皆さんはCloudWatch Logs InsightsやCloudWatch Metrics Insightsにどんなクエリを投げれば良いのか分からないなと思ったことはありますか? 私はあります。

CloudWatch Metrics Insightsにはビルダー機能は存在しますが、それでも慣れていない方からするとハードルは高いように思えます。

今回、アップデートによりCloudWatch Logs InsightsやCloudWatch Metrics Insightsにて自然言語でクエリ生成ができるようになりました。 (2023/11/26時点ではプレビューです)

AWS Blogsも公開されています。

Use natural language to query Amazon CloudWatch logs and metrics (preview) | AWS News Blog

現時点ではus-east-1とus-west-2でのみ使用できるようです。

これにより、「こんな結果を得たい場合は、どんなクエリを投げれば良いんだっけ...」と頭を悩ます時間を減らすことができそうです。

実際に触ってみたので紹介します。

触ってみた

CloudWatch Logs Insights

CloudWatch Logs Insightsの自然言語クエリ生成から試します。

CloudWatch Logs Insightsのコンソールを開くとQuery generatorと記載されていますね。

CloudWatch_Logs_Insights

Prompt横の情報をクリックすると以下のような記載が表示されました。

Query generator

CloudWatch Logs Insights は、生成系 AI テクノロジーである Amazon Bedrock を使用する自然言語クエリ生成をサポートしています。これにより、CloudWatch Logs Insights のクエリを手動で編集しなくてもクエリを作成できます。次のプロンプト例は、この機能を使用して作成できるクエリの種類を示しています。

良いプロンプトの例

  1. このプロンプトでは、過去 1 時間のすべてのクライアントの例外を一覧表示するクエリを生成できます。
List all client exceptions from the last 1 hour in my exception logs
  1. このプロンプトでは、最新の 5 つのログパターンを一覧表示するクエリを生成できます。
List the 5 most frequent patterns in my exception logs
  1. このプロンプトでは、請求額が最も高い Lambda 呼び出しの上位 100 件を検索するクエリを生成できます。
Return the top 100 highest billed lambda invocations
  1. このプロンプトでは、IAM ロールまたはポリシーが変更された最新の CloudTrail イベントを検索するクエリを生成できます。
Return the most recent events with changes to IAM role or policy events
  1. このプロンプトでは、仮想プライベートクラウドログ内の最新の 20 件の TCP リクエストを返すクエリを生成できます。
What are the 20 most recent TCP requests?

この機能は AI を利用しているため、お客様の使用には AWS の責任ある AI ポリシーと AWS サービス規約が適用されます。

AWS Responsible AI Policy

例が書いてあるのはありがたいですね。

試しにロググループを選択した上でOutput logs of the last 3 logs INFOをプロンプトに入力して、新しいクエリの生成をクリックします。

すると、以下のクエリが生成されました。

fields @timestamp, @message 
| filter @message like /INFO/ 
| sort @timestamp desc 
| limit 3

生成されたクエリを実行すると、確かにINFOログの直近3件が出力されました。

Output logs of the last 3 logs INFOのクエリ結果の確認

日本語で直近3件のINFOログを出力するとした場合も全く同じクエリが生成されました。

日本語でも指示できるのは、かなりありがたいのではないでしょうか。

直近3件のINFOログを出力する

CloudWatch Metrics Insights

CloudWatch Metrics Insightsも試してみます。

CloudWatch Metrics Insightsのクエリビルダーを表示すると、CloudWatch Logs Insightsと同様にQuery generatorがありました。

CloudWatch Metrics Insights

クエリ例として以下が紹介されていました。

適切なプロンプトの例

このプロンプトは、消費された読み取りキャパシティユニットごとにソートされた 10 個の DynamoDB テーブルのリストを返すクエリを生成できます。

[bashh] 消費された読み取りキャパシティユニットの順に上位 10 個の DynamoDB テーブルを検索する [/bash]

このプロンプトは、エラー数が最も多い 10 個の DynamoDB テーブルのリストを返すクエリを生成できます。

トランザクション競合エラーの数が最も多い上位 10 個の DynamoDB テーブルを検索する

このプロンプトは、書き込み数でランク付けされた 10 個の RDS クラスターのリストを返すクエリを生成できます。

書き込み順で上位 10 個の RDS クラスターを検索する

このプロンプトは、ダウンロードされたバイト数の順に整理された上位 10 個の S3 バケットのリストを返すクエリを生成できます。

ダウンロードされたバイト数の順で上位 10 個の S3 バケットを検索する

このプロンプトは、どの AWS サービスの使用率が最も高いかを示すクエリを生成できます。

自分のアカウントで最も多く使用されている AWS サービスを検索する

例文が日本語になっちゃっていますね。

そのまま自分のアカウントで最も多く使用されている AWS サービスを検索すると入力して、クエリを生成します。

すると、良い感じのクエリが生成されました。

自分のアカウントで最も多く使用されている_AWS_サービスを検索する

エディターで表示したものは以下のようになります。

SELECT SUM("CallCount")
FROM SCHEMA("AWS/Usage", Service, Resource, Type, Class)
GROUP BY Service
ORDER BY SUM() DESC
LIMIT 1

クエリの実行結果は以下のとおりです。EventBridgeを一番使っていたようです。

自分のアカウントで最も多く使用されている_AWS_サービスを検索する_クエリ実行結果

手早く分析したい、でもクエリを一から書くのは大変という時に役立ちそう

Amazon CloudWatch のクエリを自然言語で生成ができるようになったアップデートを紹介しました。

「手早く分析したい、でもクエリを一から書くのは大変」という時に役立ちそうですね。早くGAして欲しいです。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!