Amazon Web Services ブログ

自然言語を使用して Amazon CloudWatch のログとメトリクスをクエリする (プレビュー)

運用データの操作を容易にするために、Amazon CloudWatch は11月26日、Logs および Metrics Insights 用の自然言語クエリ生成を導入します。生成系人工知能 (AI) を活用したこの機能を使用すると、求めているインサイトの説明を英語で記述でき、Logs または Metrics Insights のクエリが自動的に生成されます。

この機能は、CloudWatch Logs と Metrics Insights 用に 3 つの主要な機能を提供します。

  • 簡単に開始するのに役立つよう、説明または質問から新しいクエリを生成します。
  • より高度な機能を含む言語の学習に役立つクエリの説明。
  • ガイド付きのイテレーションを使用して既存のクエリを改良します。

いくつかの例を使用して、これらが実際にどのように機能するかを見てみましょう。最初にログについて説明し、その後にメトリクスについて説明します。

自然言語を使用して CloudWatch Logs Insights クエリを生成する
CloudWatch コンソール[ログ] セクションで、[Log Insights] を選択します。その後、調査する AWS Lambda 関数のロググループを選択します。

[クエリジェネレーター] ボタンを選択して、新しい [プロンプト] フィールドを開き、自然言語を使用して必要な情報を入力します。

Tell me the duration of the 10 slowest invocations

その後、[新しいクエリを生成] を選択します。次の Log Insights クエリが自動的に生成されます。

fields @timestamp, @requestId, @message, @logStream, @duration 
| filter @type = "REPORT" and @duration > 1000
| sort @duration desc
| limit 10

コンソールのスクリーンショット。

[クエリを実行] を選択して結果を確認します。

コンソールのスクリーンショット。

出力に含まれる情報が多すぎることがわかりました。必要なデータのみを表示したいので、[プロンプト] に次の文を入力し、[クエリを更新] を選択します。

Show only timestamps and latency

クエリは入力に基づいて更新され、タイムスタンプと期間のみが返されます。

fields @timestamp, @duration 
| filter @type = "REPORT" and @duration > 1000
| sort @duration desc
| limit 10

更新されたクエリを実行すると、読みやすい結果を得ることができました。

コンソールのスクリーンショット。

次に、ログにエラーが含まれているかどうかを確認したいと思います。次の文を [プロンプト] に入力し、新しいクエリを生成します。

Count the number of ERROR messages

リクエストに応じて、生成されたクエリは、ERROR 文字列を含むメッセージをカウントします。

fields @message
| filter @message like /ERROR/
| stats count()

クエリを実行すると、想定よりも多くのエラーがあることがわかりました。さらに詳しい情報が必要です。

コンソールのスクリーンショット。

このプロンプトを使用してクエリを更新し、エラーをより適切に分散させます。

Show the errors per hour

更新されたクエリは、bin() 関数を使用して、結果を 1 時間ごとの間隔でグループ化します。

fields @timestamp, @message
| filter @message like /ERROR/
| stats count(*) by bin(1h)

メモリの使用状況に関するより高度なクエリを見てみましょう。いくつかの Lambda 関数のロググループを選択し、次のように入力します。

Show invocations with the most over-provisioned memory grouped by log stream

クエリを生成する前に、歯車アイコンを選択して、プロンプトと説明をコメントとして含めるオプションを切り替えてオンにします。結果は次のとおりです (読みやすくするために説明を複数行に分割しています)。

# 最も過剰にプロビジョニングされたメモリを持つ呼び出しを、ログストリームごとにグループ化して表示します

fields @logStream, @memorySize/1000/1000 as memoryMB, @maxMemoryUsed/1000/1000 as maxMemoryUsedMB, (@memorySize/1000/1000 - @maxMemoryUsed/1000/1000) as overProvisionedMB 
| stats max(overProvisionedMB) as maxOverProvisionedMB by @logStream 
| sort maxOverProvisionedMB desc

# このクエリは、プロビジョニングされたメモリと使用された最大メモリの差を計算することにより、
# 各ログストリームについて、過剰にプロビジョニングされたメモリの量を検索します。
# その後、結果をログストリームごとにグループ化し、各ログストリームについて、
# 過剰にプロビジョニングされた最大メモリを計算します。最後に、
# 過剰にプロビジョニングされた最大メモリで降順に結果を並べ替えて、
# 最も過剰にプロビジョニングされたメモリを含むログストリームを表示します。

これで、これらのエラーを理解するために必要な情報が得られました。一方で、EC2 ワークロードもあります。それらのインスタンスはどのように実行されているのでしょうか? いくつかのメトリクスを見てみましょう。

自然言語を使用して CloudWatch Metrics Insights クエリを生成する
CloudWatch コンソール[メトリクス] セクションで、[すべてのメトリクス] を選択します。その後、[クエリ] タブで、[エディタ] を使用します。必要に応じて、[クエリジェネレーター][ビルダー] でも使用できます。

先ほどと同様に、[クエリジェネレーター] を選択します。その後、平易な英語を使用して必要な情報を入力します。

Which 10 EC2 instances have the highest CPU utilization?

[新しいクエリを生成] を選択し、Metrics Insights 構文を使用して結果を取得します。

SELECT AVG("CPUUtilization")
FROM SCHEMA("AWS/EC2", InstanceId)
GROUP BY InstanceId
ORDER BY AVG() DESC
LIMIT 10

グラフを表示するには、[実行] を選択します。

コンソールのスクリーンショット。

私の EC2 インスタンスはあまり稼働していないようですね。この結果は、それらのインスタンスが CPU をどのように使用しているかを示していますが、ストレージはどうでしょうか? プロンプトに次の文を入力し、[クエリを更新] を選択します。

How about the most EBS writes?

更新されたクエリは、平均 CPU 使用率を、インスタンスにアタッチされているすべての EBS ボリュームに書き込まれたバイトの合計に置き換えます。上位 10 件の結果のみを表示するという制限は維持されます。

SELECT SUM("EBSWriteBytes")
FROM SCHEMA("AWS/EC2", InstanceId)
GROUP BY InstanceId
ORDER BY SUM() DESC
LIMIT 10

クエリを実行し、その結果を確認することで、EC2 インスタンスによってストレージがどのように使用されているかをより良く理解できます。

いくつかのリクエストを入力し、生成されたクエリをログとメトリクスに対して実行して、これがお客様のデータでどのように機能するかをぜひご確認ください。

留意点
Amazon CloudWatch のログとメトリクス用の自然言語クエリ生成は、米国東部 (バージニア北部) と米国西部 (オレゴン) AWS リージョンでプレビューでご利用いただけます。

プレビュー中における自然言語クエリ生成の利用に追加料金はかかりません。お支払いいただくのは、CloudWatch の料金に従って、クエリの実行コストのみです。

生成されるクエリは生成系 AI によって生成され、アカウントで選択される利用可能なデータなどの要因に依拠します。これらの理由により、結果は異なる場合があります。

クエリを生成する際、元のリクエストとクエリの説明をコメントとして含めることができます。これを実行するには、クエリ編集ウィンドウの右下にある歯車アイコンを選択し、それらのオプションを切り替えてオンにします。

この新しい機能は、ログとメトリクス用のクエリの生成と更新に役立ち、時間と労力を節約できます。このアプローチにより、エンジニアリングチームは、特定のデータに関する知識やクエリに関する専門知識について心配することなく、業務を拡張できます。

自然言語を使用して、Amazon CloudWatch でログとメトリクスを分析しましょう。

Danilo

原文はこちらです。