JamJet

オブザーバビリティ

本番環境におけるJamJetワークフローのトレース、メトリクス、ログ。

可観測性

JamJetはすべての実行について構造化されたトレース、メトリクス、ログを出力します。OpenTelemetryおよび既存のツールと互換性があります。

計装対象

すべてのJamJet実行は自動的に以下を出力します:

  • トレース — 実行ごと・ノードごとのスパン(タイミング、モデル、トークン数を含む)
  • メトリクス — 実行時間、キュー深度、ノードレイテンシ、トークン使用量、エラー率
  • ログ — すべての状態遷移の構造化JSONログ
  • イベント — 完全な実行イベントログ(jamjet inspectで照会可能)

OpenTelemetry

JamJetは完全にOpenTelemetryネイティブです。jamjet.tomlでOTLPエクスポーターを設定します:

[telemetry]
enabled = true
service_name = "my-agent"
service_version = "0.2.0"

[telemetry.otlp]
endpoint = "http://localhost:4317"   # OTLP gRPC

# または

endpoint = "http://localhost:4318"   # OTLP HTTP

これは任意のOTLP互換バックエンドで動作します:

トレース構造

各実行はトレース階層を生成します:

execution exec_01JM4X8NKWP2 (2.1s)
├── node:search (search) [tool] 823ms
│   └── mcp.call brave-search/web_search 820ms
├── node:draft (draft) [model] 1.1s
│   └── model.call claude-sonnet-4-6 1.09s
│       ├── input_tokens: 412
│       └── output_tokens: 891
└── node:evaluate (evaluate) [eval] 180ms
    └── eval.llm_judge claude-haiku 178ms
        └── score: 4.7

スパン属性

JamJetはモデルスパンに関するGenAIセマンティック規約に準拠しています:

属性
gen_ai.systemanthropicopenaiなど
gen_ai.request.modelモデルID
gen_ai.usage.input_tokens入力トークン数
gen_ai.usage.output_tokens出力トークン数
jamjet.workflow.idワークフローID
jamjet.workflow.versionワークフローバージョン
jamjet.execution.id実行ID
jamjet.node.idノードID
jamjet.node.kindノードタイプ

Prometheusメトリクス

Prometheusスクレイプエンドポイントを有効化:

[telemetry.prometheus]
enabled = true
port = 9090

利用可能なメトリクス:

メトリクスタイプ説明
jamjet_executions_totalCounterワークフロー + ステータス別の総実行数
jamjet_execution_duration_msHistogramエンドツーエンドの実行時間
jamjet_node_duration_msHistogramノードタイプ別のノード実行時間
jamjet_queue_depthGaugeキュー内の保留中の実行数
jamjet_model_tokens_totalCounterモデルと方向別のトークン使用量
jamjet_model_cost_usd_totalCounterモデル別の推定コスト

実行レイテンシーのp99を取得するPrometheusクエリ例:

histogram_quantile(0.99,
  rate(jamjet_execution_duration_ms_bucket[5m])
)

Grafanaダッシュボード

公式JamJet Grafanaダッシュボード(ID: jamjet-runtime)をインポートして、構築済みの概要を表示:

  • 実行スループットとエラー率
  • モデルレイテンシー分布
  • 時系列のトークン使用量とコスト
  • キュー深度とワーカー飽和度

構造化ログ

JamJetはデフォルトで標準出力に構造化JSONログを出力:

{
  "timestamp": "2026-03-07T09:31:00.012Z",
  "level": "info",
  "event": "node_completed",
  "execution_id": "exec_01JM4X8NKWP2",
  "workflow_id": "research-agent",
  "node_id": "think",
  "node_kind": "model",
  "model": "claude-haiku-4-5-20251001",
  "duration_ms": 512,
  "input_tokens": 64,
  "output_tokens": 312
}

jamjet.tomlでログレベルとフォーマットを設定:

[logging]
level = "info"       # debug | info | warn | error
format = "json"      # json | text

実行の検査

jamjet inspectコマンドを使用すると、オブザーバビリティバックエンドなしでローカルで完全な実行トレースを取得できます:

jamjet inspect exec_01JM4X8NKWP2
jamjet inspect exec_01JM4X8NKWP2 --events    # 完全なイベントタイムライン
jamjet inspect exec_01JM4X8NKWP2 --state     # 最終ステートのみ

アラート

Prometheus + Alertmanagerで以下のアラートを追加:


# alerts.yml

groups:
  - name: jamjet
    rules:
      - alert: HighExecutionErrorRate
        expr: |
          rate(jamjet_executions_total{status="failed"}[5m]) /
          rate(jamjet_executions_total[5m]) > 0.05
        for: 2m
        annotations:
          summary: "JamJet error rate above 5%"

      - alert: ExecutionQueueBacklog
        expr: jamjet_queue_depth > 100
        for: 5m
        annotations:
          summary: "JamJet execution queue is backing up"

注意: すべてのテレメトリはjamjet devではオプトインです。本番環境では、エージェントの動作を可視化するため、テレメトリはデフォルトで有効になっています。

On this page