本文へ移動
統合ガイド

CrewAI ワークフロー Telemetry

入力や出力を保存せず、非ストリーミングのCrewAI同期kickoff呼び出しを観測します。戻り、失敗、中断を別々にクエリします。

レビュー者 Telemetry 製品チーム に . 送信するイベント、除外するデータ、コードの追加方法を確認しました. このページのレビュー担当

役に立つ
  • マルチエージェントワークフローの可観測性
  • 乗組員タスクの信頼性
  • 引き継ぎと結果の分析
実装の証拠

CrewAI workflow telemetry でイベントを送信して確認する

制御されたアプリケーション境界で CrewAI workflow telemetry を使用し、イベント コントラクトを小さく保ち、集約ビューを構築する前に既知の結果を検証します。

  1. 1

    結果を選択してください

    マルチエージェントワークフローの可観測性

  2. 2

    契約を定義する

    run_id、crew_name、呼び出し状態

  3. 3

    結果で発行する

    既存のCrewと入力をrun_research_crewに渡してください。このラッパーは同期kickoffのみ対応します。非同期メソッド、ストリーム、チェックポイント再開には別のライフサイクル処理が必要です。

  4. 4

    証拠を検証する

    Exercise a known fixture, then inspect crew_invocation for one correctly typed terminal row.

始める前に

始める前に

  • stream=Falseに設定した既存の同期Crewとアプリケーションの入力
  • サーバー側のTELEMETRY_API_KEY。この例はTelemetry SDKではなくPython標準ライブラリのHTTPを使います
  • タスクの入力、エージェントの出力、メモリ、知識、ツールのペイロードをカバーするコンテンツ ポリシー

配信設定

サーバー側のインストールと初期化

この同期CrewラッパーはPython標準ライブラリのHTTPでイベントを送信します。Telemetry SDKのインストールや初期化は不要です。 ブラウザ バンドル、クライアントに表示される環境変数、ソース管理、ログ、および例外メッセージに取り込み資格情報が含まれないようにします。

  1. 1既存の同期Crewをrun_research_crewでラップし、stream=Falseを維持してください。
  2. 2成功、失敗、再試行、またはタイムアウトの境界に結果イベントを追加します。
  3. 3アラートを有効にする前に、制御されたフィクスチャを送信し、保存されている行を検査します。

スニペット

1 つの構造化されたイベントから始める

ワークフローが完了、失敗、または再試行される場所にこの図形を追加します。次に、実際のフィールドからダッシュボードを構築します。

crewai

CrewAI workflow telemetryイベント

python
import json
import os
import sys
from time import perf_counter
from urllib.request import Request, urlopen
from uuid import uuid4


def emit_crew_invocation(event):
    try:
        key = os.environ.get("TELEMETRY_API_KEY")
        if not key:
            return
        request = Request(
            "https://api.telemetry.sh/log",
            data=json.dumps({"table": "crew_invocation", "data": event}).encode("utf-8"),
            headers={"Authorization": key, "Content-Type": "application/json",
                     "User-Agent": "telemetry-crew-example/1"},
            method="POST",
        )
        with urlopen(request, timeout=1) as response:
            if not 200 <= response.status < 300:
                raise RuntimeError("telemetry_delivery_unconfirmed")
    except Exception:
        try:
            print("Telemetry delivery unconfirmed", file=sys.stderr)
        except Exception:
            pass


def run_research_crew(research_crew, inputs):
    # Use an already configured, synchronous, non-streaming Crew.
    if getattr(research_crew, "stream", False):
        raise ValueError("This wrapper requires stream=False")
    run_id = str(uuid4())
    started_at = perf_counter()
    status, error_type = "interrupted", None
    try:
        result = research_crew.kickoff(inputs=inputs)
        status = "returned"
        return result
    except Exception as error:
        status = "failed"
        error_type = "timeout" if isinstance(error, TimeoutError) else "crew_error"
        raise
    finally:
        # Neither metadata creation nor export may replace the crew outcome.
        try:
            emit_crew_invocation({
                "run_id": run_id,
                "crew_name": "research_crew",
                "status": status,
                "error_type": error_type,
                "duration_ms": round((perf_counter() - started_at) * 1000),
                "release": os.environ.get("APP_RELEASE"),
            })
        except Exception:
            pass


# Pass your application's existing Crew and inputs:
# result = run_research_crew(research_crew, inputs)

イベントスキーマ

run_id、crew_name、呼び出し状態

duration_ms、限定したerror_type、release

設定を確認する

チェックポイント 1

既存のCrewと入力をrun_research_crewに渡してください。このラッパーは同期kickoffのみ対応します。非同期メソッド、ストリーム、チェックポイント再開には別のライフサイクル処理が必要です。

チェックポイント 2

kickoffが戻っても、作業の承認や下流への配信は証明できません。レビューの判断は別に記録します。この例ではタスク数、委任、再試行、費用は測定しません。

チェックポイント 3

これらのイベントには入力、出力、メモリ、知識、ツールのデータ、例外の本文を含めないでください。

チェックポイント 4

HTTP送信には1秒のソケットタイムアウトがあり、厳密な総時間制限ではありません。送信や診断の失敗は元の結果や例外を置き換えませんが、同期送信は遅延を加えることがあります。永続キュー、再試行、終了時の排出はありません。

チェックポイント 5

ステップレベルの診断が必要な場合は、CrewAI 独自のトレースまたはコールバックを使用し、承認された実行 ID と関連付けます。

検証

イベントが到着したことを証明する

既知の成功例と失敗例を実行した後、これを実行します。最終的なイベント コントラクトがスニペットと異なる場合は、フォールバック テーブル名を置き換えます。

crewai-検証

CrewAI workflow telemetry 検証クエリ

sql
SELECT *
FROM crew_invocation
ORDER BY timestamp_utc DESC
LIMIT 20;
論理結果ごとに 1 つのターミナル行を、予想されるステータス、識別子、単位、および UTC 時刻とともに確認します。
推論されたスキーマを検査し、再試行によってフィールド タイプが変更されたり、新しい論理イベント ID が生成されたりしないことを確認します。
保存されたフィールドで認証情報、生のペイロード、プロンプト、プライベート コンテンツ、および無制限のエラー メッセージを検索します。
ダッシュボードを完了として扱う前に、プロバイダーのタイムアウト、取り込みの拒否、およびプロセスのシャットダウンを実行します。

実装の参考資料

新しい運用パスを有効にする前に、イベント契約、データ安全性に関するガイダンス、上流の主要ドキュメントを確認してください。

イベントを記録する場所

結果イベントを小さく、回復可能なものに保つ

このパターンが提供するのは、

  • 上流のワークフローの横にある、制限付きの SQL 対応の結果。
  • ダッシュボード、アラート、およびイベント間の相関関係の安定したフィールド。
  • 成功、失敗、再試行、タイムアウトの動作を検証するためのフィクスチャ駆動のパス。

このパターンでは提供されません

  • OTLP エクスポーター、自動収集パイプライン、または詳細なトレースと診断ログの代替。
  • ペイロードにイベント ID が含まれているという理由だけで、1 回だけ配信されます。
  • 生のプロバイダー ペイロード、ユーザー コンテンツ、資格情報、または規制されたデータを収集する許可。

イベントスキーマの例

クエリまたはスニペットを運用環境に適用する前に、行粒度、出力境界、必要なタイプ、プライバシー クラス、サンプル ペイロード、および検証チェックリストを確認してください。

関連製品の機能

このワークフローを続行します AIエージェントの監視

レビュー可能な SQL を使用して、エージェントの実行、ツールの使用、モデルのコスト、品質、製品の結果を結び付けます。

関連する SQL レシピ

その他のSQL例

このワークフローの構造化フィールドに対してクエリを実行し、結果の例を検査して、有用な回答をダッシュボードまたはアラートに変換します。

すべてのレシピを参照する
クエリ例のコレクションAIとLLM SQL構造化イベント SQL

実装ファミリーごとに参照する

関連する統合パターンを比較する

この統合と組み合わせるテンプレート

さらなる統合