Azure SRE エージェントの Kusto ツール

Kusto ツールは、最適な KQL クエリを再利用可能なパラメーター化されたツールに変えるのに役立ちます。 エージェントは、解釈やバリエーションなしで、作成した正確なクエリを実行します。 チームの専門知識が共有機能になります。

ヒント

  • インシデント クエリを標準化する - 毎回同じ実証済みの KQL が実行され、バリエーションはありません。
  • 部族の知識を再利用可能なツールに変える - 最適なクエリが共有機能になります。
  • パラメーターを使用したクエリ - ユーザーはプレーンな言語で要求し、エージェントは値を自動的に置き換えます。
  • デプロイ前のテスト - カスタム エージェントに追加する前にクエリが正しく実行されていることを検証します。

問題: すべてのユーザーが独自のクエリを記述する

インシデントの間、チームのシニア エンジニアは、迅速に問題を見つける、戦いでテストされたクエリを使用します。 しかし、その知識は頭、Slack スレッド、個人用ノートブックに留められます。 通話中でない場合、経験の少ないレスポンダーは時間を無駄にします。

  • クエリをゼロから再発明する (多くの場合、間違いあり)
  • **データの量が多すぎる、またはエッジ ケースが不足している、過度に広範なクエリを記述する
  • 根本原因を明らかにする重要な列がない
  • 間違った時間枠を使用 するか、環境でのフィルタリングを忘れる

各エンジニアは、同じデータに対して異なるクエリを実行します。 あるエンジニアが 5 分で問題を見つけます。 別のエンジニアは、アドホック KQL を使用して30分間無駄な回り道をしています。

Kusto ツールでこの問題を解決する方法

Kusto ツールを使用すると、チームの最適なクエリをパラメーター化された決定論的ツールとして保存できます。 エージェントは、定義した正確なクエリを実行するため、チームの専門知識が共有機能になります。

の前に 後の
シニア エンジニアがメモリからクエリを書き込む クエリはツールとして保存され、誰でも使用できます
待機時間範囲とフィルターに関する推測 パラメーターが、必要な情報を入力するよう促します
各レスポンダーが異なる結果を取得する 毎回同じクエリが実行される
複雑な結合を記憶する必要がある マルチステップ ロジックは事前構築済み

オンコール エンジニアに "エラー ログのクエリ方法を確認する" ように依頼する代わりに、エージェントに次の質問を行います。

Show me errors from the last 24 hours

エージェントは、事前構築済みのツールと timeRange=24hを使用して、正確に列を返し、チームのニーズをフィルター処理します。

どのように機能するのか

Kusto ツールを作成して使用するには、次の手順に従います。

  1. 接続: Azure Data Explorer クラスターをコネクタとして追加します。
  2. 作成: ##parameterName## 構文を使用して、パラメーターを使用してクエリを定義します。
  3. テスト: ポータルでクエリが正しく実行されていることを検証します。
  4. アタッチ: カスタム エージェントにツールを追加します。
  5. 使用: ユーザーの質問がツールの説明と一致すると、エージェントによってツールが呼び出されます。

データ クエリに対する 2 つの方法

Azure Data Explorer コネクタを追加するときは、決定論的または柔軟なクエリを選択します。

方法 説明 次の場合に使用します。
データベース クエリ コネクタ エージェントが定義済みのクエリを使用する (Kusto ツール) 決定論的で正確なクエリが必要です
データベース インデックス コネクタ エージェントがスキーマを学習してクエリを生成する 柔軟なアドホック クエリが必要

Kusto ツールを作成する

ツールは、[ビルダー] > [エージェント キャンバス] > [作成] > [ツール] > [Kusto ツール] で作成します。 各ツールには、名前、説明、コネクタ、データベース、および KQL クエリと、省略可能な ##paramName## パラメーター プレースホルダーが必要です。

スクリーンショットを含む完全なチュートリアルについては、「 チュートリアル: Kusto ツールを作成する」を参照してください。

カスタム エージェントにツールを追加する

ツールを作成したら、キャンバス ビューボタンを使用して+にアタッチ>既存のツールを追加します。

前提条件

Kusto ツールを作成する前に、次の要件を満たします。

Azure Data Explorer のアクセス許可

エージェントのマネージド ID には、Azure Data Explorer クラスターに対する AllDatabasesViewer ロールが必要です。

次の KQL 管理コマンドを使用します。

.add cluster AllDatabasesViewer ('aadapp=<MANAGED_IDENTITY_CLIENT_ID>;<TENANT_ID>')

または、Azure portal で Azure Data Explorer クラスターに移動します。 [セキュリティとネットワーク>Permissions>Add>AllDatabasesViewer を選択します。

Kusto コネクタ

ツールを作成する前に、 ADX コネクタを設定します。 コネクタを追加する場合:

  • スキーマ学習ではなく、定義済みのクエリに対して データベース クエリ コネクタ を選択します。
  • データベースを含む完全なクラスター URL を使用します: https://<CLUSTER_NAME>.<REGION>.kusto.windows.net/<DATABASE_NAME>

パラメーター化されたクエリ

##parameterName##構文を使用して、パラメーターを使用してツールの柔軟性を高めます。

AppEvents
| where TimeGenerated > ago(##timeRange##)
| where EventLevel == "Error"
| where Message contains "##searchPattern##"
| take 100

エージェントはこのツールを使用する場合、ユーザー入力に基づいてパラメーターを置き換えます。

ユーザーが言う エージェントの代理
"最終日からのエラー" timeRange=24h
"null ポインター例外の検索" searchPattern=NullPointerException

パラメーターを使用すると、1 つのツールで同じ質問の多くのバリエーションを処理できます。

実行モード (YAML)

YAML でツールを定義する場合は、実行モードを選択します。

モード 説明 次の場合に使用します。
Query インライン KQL クエリを実行します 最も一般的です。 クエリは YAML で直接定義されます。
Function クラスターに格納されている関数を呼び出す クエリ ロジックは、Azure Data Explorer で関数として定義されます
Script 外部ファイルから KQL スクリプトを実行する 複雑なマルチステートメント クエリ
# Query mode (most common)
spec:
  mode: Query
  query: |-
    AppEvents | take 10

# Function mode
spec:
  mode: Function
  function: GetRecentErrors

クエリのベスト プラクティス

Kusto ツールクエリを記述するときは、次の推奨事項に従ってください。

適切な時間範囲を使用 する - 最新のデータに対する既定値:

| where TimeGenerated > ago(1h)

結果の制限を追加する - 圧倒的な出力を防ぐ:

| take 100

役に立つプロジェクションを含める - エージェントに必要な列のみを返します。

| project TimeGenerated, Name, DurationMs, ResultCode

Kusto ツールとアドホック クエリを使用する場合

シナリオに基づいて適切なアプローチを選択します。

シナリオ Kusto ツール アドホック クエリ
標準化された"ランブック"の手順 はい いいえ
反復可能な調査パターン はい いいえ
複雑なマルチ結合クエリ はい いいえ
未知のデータの探索 いいえ はい
1 回限りの調査 いいえ はい

概要

資源 学習する内容
Kusto ツールを作成する スクリーンショットを含む詳細なチュートリアル
能力 追加されるもの
カスタム エージェント 特殊なカスタム エージェントにツールを割り当てる
コネクタ 他のデータ ソースを接続する