LangGraph agent observability でイベントを送信して確認する
制御されたアプリケーション境界で LangGraph agent observability を使用し、イベント コントラクトを小さく保ち、集約ビューを構築する前に既知の結果を検証します。
- 1
結果を選択してください
ステートフルエージェント監視
- 2
契約を定義する
thread_id、invocation_id、graph_name、呼び出し状態
- 3
結果で発行する
制御されたラッパーやコールバックからノードイベントを送信してください。この例はグラフの各呼び出しのみ記録します。
- 4
証拠を検証する
Exercise a known fixture, then inspect agent_graph_invocation for one correctly typed terminal row.
始める前に
始める前に
- @langchain/langgraph および @langchain/core
- チェックポイントから再開する際に保持する安定したスレッドID
- サーバー側 TELEMETRY_API_KEY
- fetch と AbortSignal.timeout を備えたサーバー実行環境
配信設定
サーバー側のインストールと初期化
このサーバー側の例では、サーバー側のキーと時間制限付き fetch リクエストで Log API にイベントを送信します。Telemetry SDK の初期化は不要です。 ブラウザ バンドル、クライアントに表示される環境変数、ソース管理、ログ、および例外メッセージに取り込み資格情報が含まれないようにします。
- 1制限されたネットワーク動作を持つ再利用可能なサーバー側配信クライアントを 1 つ準備します。
- 2成功、失敗、再試行、またはタイムアウトの境界に結果イベントを追加します。
- 3アラートを有効にする前に、制御されたフィクスチャを送信し、保存されている行を検査します。
スニペット
1 つの構造化されたイベントから始める
ワークフローが完了、失敗、または再試行される場所にこの図形を追加します。次に、実際のフィールドからダッシュボードを構築します。
LangGraph agent observabilityイベント
async function emitGraphInvocation(data) {
try {
const delivery = await fetch("https://api.telemetry.sh/log", {
method: "POST",
headers: {
Authorization: process.env.TELEMETRY_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ table: "agent_graph_invocation", data }),
signal: AbortSignal.timeout(1000),
});
if (!delivery.ok) throw new Error("telemetry_delivery_unconfirmed");
} catch {
try { console.warn("Telemetry delivery unconfirmed"); } catch {}
}
}
async function observedInvoke(graph, input, { threadId, config = {} }) {
const startedAt = performance.now();
const outcome = {
thread_id: threadId,
invocation_id: crypto.randomUUID(),
graph_name: "support_agent",
status: "failed",
release: process.env.APP_RELEASE,
};
try {
const result = await graph.invoke(input, {
...config,
configurable: { ...config.configurable, thread_id: threadId },
});
outcome.status = "returned";
// Metadata inspection must not replace the graph's result.
try {
const paused = Array.isArray(result?.__interrupt__) &&
result.__interrupt__.length > 0;
if (paused) outcome.status = "paused";
if (Array.isArray(result?.messages)) {
outcome.message_count = result.messages.length;
}
} catch {}
return result;
} finally {
outcome.duration_ms = Math.round(performance.now() - startedAt);
await emitGraphInvocation(outcome);
}
}
const threadId = crypto.randomUUID(); // Keep this ID when resuming this thread.
const result = await observedInvoke(graph, { messages }, { threadId });イベントスキーマ
thread_id、invocation_id、graph_name、呼び出し状態
tool_name、試行、latency_ms、および error_type
checkpoint_count、human_handoff、reviewer_outcome、およびリリース
設定を確認する
チェックポイント 1
制御されたラッパーやコールバックからノードイベントを送信してください。この例はグラフの各呼び出しのみ記録します。
チェックポイント 2
チェックポイントから再開する際は同じスレッドIDを使い、呼び出しごとに新しいIDを付けます。元の入力または再開用Commandを渡し、他の設定を保持してください。
チェックポイント 3
グラフの状態、メッセージ、チェックポイントの内容、またはツールの引数を大規模に送信しないでください。
チェックポイント 4
呼び出しが戻っても、タスクの成功が証明されたわけではありません。__interrupt__ に返された動的割り込みは一時停止、例外を投げた呼び出しは失敗として記録します。静的ブレークポイント、ノードやツールのイベント、レビュー済みのタスク品質には別途計測が必要です。
チェックポイント 5
Log APIへの直接リクエストには協調的な1秒のタイムアウトと診断出力の保護があります。送信失敗でグラフの結果やエラーを置き換えませんが、送信待ちは遅延を増やす可能性があります。この例は永続キュー、再試行、終了時の排出を実装しません。
検証
イベントが到着したことを証明する
既知の成功例と失敗例を実行した後、これを実行します。最終的なイベント コントラクトがスニペットと異なる場合は、フォールバック テーブル名を置き換えます。
LangGraph agent observability 検証クエリ
SELECT *
FROM agent_graph_invocation
ORDER BY timestamp_utc DESC
LIMIT 20;実装の参考資料
新しい運用パスを有効にする前に、イベント契約、データ安全性に関するガイダンス、上流の主要ドキュメントを確認してください。
イベントを記録する場所
結果イベントを小さく、回復可能なものに保つ
このパターンが提供するのは、
- 上流のワークフローの横にある、制限付きの SQL 対応の結果。
- ダッシュボード、アラート、およびイベント間の相関関係の安定したフィールド。
- 成功、失敗、再試行、タイムアウトの動作を検証するためのフィクスチャ駆動のパス。
このパターンでは提供されません
- OTLP エクスポーター、自動収集パイプライン、または詳細なトレースと診断ログの代替。
- ペイロードにイベント ID が含まれているという理由だけで、1 回だけ配信されます。
- 生のプロバイダー ペイロード、ユーザー コンテンツ、資格情報、または規制されたデータを収集する許可。
イベントスキーマの例
このワークフローのイベントスキーマ
クエリまたはスニペットを運用環境に適用する前に、行粒度、出力境界、必要なタイプ、プライバシー クラス、サンプル ペイロード、および検証チェックリストを確認してください。
関連製品の機能
このワークフローを続行します AIエージェントの監視
レビュー可能な SQL を使用して、エージェントの実行、ツールの使用、モデルのコスト、品質、製品の結果を結び付けます。
関連する SQL レシピ
その他のSQL例
このワークフローの構造化フィールドに対してクエリを実行し、結果の例を検査して、有用な回答をダッシュボードまたはアラートに変換します。
AI エージェントのタスクの成功と人間による引き継ぎを測定する
どのエージェントのワークフローが正常に終了し、受け入れられた結果をもたらしますか?
レシピを開くネストされた AI ツール呼び出しイベントのクエリ
最も失敗した呼び出しに関連する AI ツールと引数はどれですか?
レシピを開く繰り返しを検出する AI エージェント ツール Loops
どのエージェントの実行が繰り返しのツール ループに陥っているように見えますか?
レシピを開く機能とモデルごとに LLM コストを計算する
LLM の支出を促進しているのはどの製品機能とモデルですか?
レシピを開く実装ファミリーごとに参照する
関連する統合パターンを比較する
この統合と組み合わせるテンプレート
さらなる統合
クロード エージェント SDK Telemetry
プロンプトやツールのペイロードを保存せずに、クロード エージェント SDK の実行結果、期間、ツール アクティビティ、ターン、コスト、および承認された製品シグナルを追跡します。
オープンガイドピダンティック AI エージェント Telemetry
Pydantic AI の実行結果、検証された出力、再試行、ツールのアクティビティ、レイテンシ、使用状況、製品の受け入れ状況を、安全な構造化イベントで測定します。
オープンガイドマストラエージェント Telemetry
Mastra エージェントとワークフローの結果、ツールのアクティビティ、レイテンシー、再試行、コスト、製品の受け入れ状況を、組み込みのトレースと評価とともに追跡します。
オープンガイド