Amazon CloudWatchでAIを活用した自然言語クエリ生成を試してみた

本記事は 夏休みクラウド自由研究 8/24付の記事です

皆さんこんにちは。UGです。
自分が書いた字を見て、ふと子供の頃は大人になったら自然と字って綺麗になっていくものだと思っていたなーと。
もちろん自然と綺麗になることなどなく、何なら昔の方が綺麗だったんじゃないか??と思った今日この頃。。。

さて本題ですが、以前AWS情報で見かけて気になっていながら触れられていなかった、Amazon CloudWatchでAIを活用した自然言語クエリ生成を試してみました。
CloudWatch Logs InsightsとCloudWatch Metrics Insightsにて自然言語でクエリ生成ができるとのことです。

現時点(2024/8/25時点)では、米国東部 (バージニア北部)、米国西部 (オレゴン)、アジアパシフィック (東京) でのみ使用できるようです。

はてさてどれほど便利なものなのか。

やってみる

CloudWatch Logs Insights

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

[CloudWatch] → [ログのインサイト]を開くと「Query generator」なるものが画面に表示されています。

ログのインサイト

「Query generator」をクリックして展開します。Query generator

プロンプトの横の「情報」をクリックすると、画面右側にQuery generatorの説明が表示されます。(以下に説明文からプロンプトの例のみを抜粋)

良いプロンプトの例

  1. このプロンプトでは、選択したロググループ内のさまざまなクライアントの例外を一覧表示するクエリを生成できます。

    What types of client exceptions are in my logs?

  2. このプロンプトでは、最新の 5 つのログパターンを一覧表示するクエリを生成できます。

    List the 5 most frequent patterns in my exception logs

  3. このプロンプトでは、請求額が最も高い Lambda 呼び出しの上位 100 件を検索するクエリを生成できます。

    Return the top 100 highest billed lambda invocations

  4. このプロンプトでは、IAM ロールまたはポリシーが変更された最新の CloudTrail イベントを検索するクエリを生成できます。

    Return the most recent events with changes to IAM role or policy events

  5. このプロンプトでは、仮想プライベートクラウドログ内の最新の 20 件の TCP リクエストを返すクエリを生成できます。

    What are the 20 most recent TCP requests?

上記の例のように、自然言語には英語のみが利用できます。

では実際に試してみます。

ロググループを選択し、「Show the oldest 3 logs(最も古いログを3件表示)」をプロンプトに入力して、「新しいクエリを生成」をクリックします。
そうすると画像のようなクエリ文が自動で生成されました。

自動生成クエリ
「クエリを更新」はクエリ文が記載済みの場合に、新しいプロンプトの内容からクエリを生成し更新を行います。
「クエリを更新」はクエリ文が記載されていない場合は選択ができません。
「新しいクエリを生成」はクエリ文が記載済みであろうとなかろうと選択できるので、「クエリを更新」は使わず、常に「新しいクエリを生成」を選択で良いと思います。
「クエリの実行」をクリックし、クエリを実行すると、最も古いログが3件表示されていました。
クエリ結果

CloudWatch Metrics Insights

次にCloudWatch Metrics Insightsの自然言語クエリ生成を試してみます。

[CloudWatch] → [すべてのメトリクス]から[マルチソースクエリ]タブを開くと、今回も「Query generator」なるものが画面に表示されています。

Query generator

プロンプトの横の「情報」をクリックすると、画面右側にQuery generatorの説明が表示されます。(以下に説明文からプロンプトの例のみを抜粋)

適切なプロンプトの例

  1. このプロンプトは、消費された読み取りキャパシティユニットごとにソートされた 10 個の DynamoDB テーブルのリストを返すクエリを生成できます。
    消費された読み取りキャパシティユニットの順に上位 10 個の DynamoDB テーブルを検索する
  2. このプロンプトは、エラー数が最も多い 10 個の DynamoDB テーブルのリストを返すクエリを生成できます。
    トランザクション競合エラーの数が最も多い上位 10 個の DynamoDB テーブルを検索する
  3. このプロンプトは、書き込み数でランク付けされた 10 個の RDS クラスターのリストを返すクエリを生成できます。
    書き込み順で上位 10 個の RDS クラスターを検索する
  4. このプロンプトは、ダウンロードされたバイト数の順に整理された上位 10 個の S3 バケットのリストを返すクエリを生成できます。
    ダウンロードされたバイト数の順で上位 10 個の S3 バケットを検索する
  5. このプロンプトは、どの AWS サービスの使用率が最も高いかを示すクエリを生成できます。
    自分のアカウントで最も多く使用されている AWS サービスを検索する

あれ?今回は日本語で表示されているぞ?
つまりは日本語でできるのか?と思いダメ元でチャレンジ。

エラー

怒られました…やはり日本語は対応していないようです。例文はミスかと。

では丁度良いので上の日本語例文をGoogle翻訳で英文にして自動生成を行ってみます。
翻訳:「自分のアカウントで最も多く使用されている AWS サービスを検索する」⇒「Find the most used AWS services in your account」

上記翻訳結果をプロンプトに入力して、「新しいクエリを生成」をクリックします。

そうすると画像のようなクエリ文が自動で生成されました。

クエリ自動生成

「Editor」画面ではクエリ文が以下のようになります。

クエリ自動生成(Editor版)

んん?自動生成されたクエリが明らかにおかしいなと。。。見るからにAPIのリクエスト数を調べるクエリですね…
どうやら失敗のようです。。。

100%の精度があるわけではもちろんないので仕方がないですね。

まとめ

ということでAIを活用した自然言語クエリ生成を試してみました。

クエリ言語に関する知識が少ないという方には、一からコードを書く必要がないため良い手助けになるなと思いました。
しかしその半面、少ないからこそ今回の失敗例のようなときに気づくことができない恐れもあるため、頼り切った利用は危険とも思いました。

他のAI利用でも同じですが、あくまで参考であって自分で調べて確かめることが大事だなと。

最後までお読みいただきありがとうございました!!

タイトルとURLをコピーしました