Honeycomb における本番環境問題の調査のための体系的なワークフロー — 複数のツール呼び出し(コンテキストの準備、幅広いクエリ実行、BubbleUp による異常検出、トレース分析、検証)を組み合わせ、各ステップの結果を次のステップに引き継ぎながら根本原因に到達する方法を示します。 次のような場合に使用: 「本番環境の問題を調査してほしい」「レイテンシ(応答時間)の急上昇をデバッグしたい」「根本原因を見つけたい」「BubbleUp を使ってほしい」「トレースを分析したい」「障害をデバッグしたい」「API が遅い理由は何か」「エラーが増えている」「ヘルスチェック」「SLO(サービスレベル目標)が消費されている」など、本番環境の問題を調査またはデバッグしたいというリクエスト全般
Structured workflows for investigating production issues in Honeycomb — the sequence of tool calls (context priming, broad query, BubbleUp, trace analysis, verification) and how to chain results between steps to reach root causes. Trigger phrases: "investigate production issue", "debug latency spike", "find root cause", "use BubbleUp", "analyze traces", "debug an outage", "why is my API slow", "errors are increasing", "health check", "SLO burning", or any request to investigate or debug production problems.
本番環境での問題をデバッグするための体系的なワークフローです。MCPツールは自身のパラメータを説明していますが、このスキルは、ツール呼び出しの順序と結果の解釈方法に焦点を当てて、根本原因にたどり着くようにしています。
このワークフローは、observability-fundamentals スキルから得た中核的な分析ループ(定義 → 可視化 → 調査 → 評価)を実装しています。BubbleUpが有用な結果を返さない場合、しばしば計測の不備が原因です。足りない属性を追加して(otel-instrumentation スキルを参照)、再度試してください。
get_workspace_context → 環境とデータセットを確認get_slos → SLO違反はないか?(重要度を判定)get_triggers → アラートは発動しているか?(調査範囲を絞る)find_queries → 過去に誰かが調査しているか?問題の全体像を把握するため、広範なクエリを実行します:
error=true)の件数をサービス/ルート/カテゴリ別に集計し、event.name=exceptionとexception.type existsを使って例外イベント行も別途集計。サンプリングされたtrace.trace_id値を使って代表的なトレースをドリルダウンまた get_service_map も呼び出してください。サービス間のP95レイテンシを示し、どの依存関係が遅いかをすぐに明らかにできます。
例外データには2つのクエリ領域があります: オペレーション失敗はスパン上に属し(error=true、スパンステータス、低カーディナリティのexception.slug/エラーカテゴリ)、詳細な例外診断はトレース関連ログAPIのイベント行に属する場合があります。コンテナとなるスパンにexception.*が存在することを前提としないでください。例外を調査する際は、まずデータセットスキーマを確認し、event.name=exceptionかつexception.type existsとtrace.trace_id existsでクエリし、サンプルを取得してから、そのtrace.trace_idをget_trace(show_events=true)に渡してください。レガシースパンイベント例外の場合は、name=exceptionかつmeta.signal_type=traceも確認してください。ログAPI イベントはevent.name/bodyとmeta.signal_type=logを使用します。
サービスが例外昇格機能を持つLogRecordProcessorを使用している場合、一部のexception.*フィールドがコンテナスパンにも現れる可能性があります。これをクライアント側の明示的な互換性機能として扱い、Honeycomb保証ではありません。イベント行は完全な診断の根拠であり、親スパン上にフィールドが無いからといって例外イベントが欠落しているわけではありません。
これが最も価値の高いステップです。異常を示すクエリが得られたら:
run_bubbleupを実行し、外れ値の領域を選択BubbleUp結果の解釈方法:
deployment.version=v2.3.1が遅いリクエストの90%を占めるがベースラインでは20%)db.query_durationが外れ値でかなり高い)BubbleUpが疑わしい箇所を特定した後:
get_traceを呼び出してフルトレースを取得トレースウォーターフォール図で確認すること:
BubbleUp + トレース分析から仮説を立てて、確認します:
create_boardを以下の内容で呼び出します:
ヒートマップを最初に見る → 遅い領域をBubbleUp → 遅いリクエストをトレース → フィルタクエリで検証
失敗オペレーションをサービス/ルート/カテゴリ別に集計 → ログAPI例外をevent.name=exceptionとexception.typeで集計 → trace.trace_idをサンプリング → get_trace(show_events=true) → フィルタクエリで検証。親スパン上のexception.messageのみを例外検索の唯一の手段としないでください。
P99をdeployment.versionでグループ化 → 新旧版を比較してBubbleUp → 新版からトレース → 検証
get_service_map → 遅い依存関係のP99 → リレーショナルクエリ(any.service.name)でユーザー影響を測定 → 影響を受けたリクエストをトレース
以下のいずれかの推論に陥った場合でも、ワークフローに従ってください:
find_columnsでフィールド名を確認、時間範囲を拡大、環境/データセットを検証${CLAUDE_PLUGIN_ROOT}/skills/production-investigation/references/investigation-playbooks.md — レイテンシスパイク、エラー急増、デプロイ回帰、依存関係障害、SLO予算消費、ヘルスチェックのステップバイステッププレイブック${CLAUDE_PLUGIN_ROOT}/skills/production-investigation/references/bubbleup-guide.md — BubbleUp詳細ガイド:選択タイプ、時間指定、ページネーション、結果解釈${CLAUDE_PLUGIN_ROOT}/skills/production-investigation/references/trace-exploration.md — トレース構造、get_traceパラメータと表示モード、ウォーターフォール分析、スパンイベントとリンクStructured workflows for debugging production issues. The MCP tools document their own parameters — this skill focuses on the sequence of tool calls and how to interpret results to reach a root cause.
This workflow implements the core analysis loop (Define → Visualize → Investigate → Evaluate) from the observability-fundamentals skill. If BubbleUp returns nothing useful, the issue is often an instrumentation gap — add the missing attributes (see the otel-instrumentation skill) and try again.
get_workspace_context → environments and datasetsget_slos → any SLOs in violation? (frames severity)get_triggers → any alerts firing? (narrows scope)find_queries → has anyone investigated this before?Run a broad query to see the shape of the issue:
error=true) by service/route/category, then
separately count exception event rows using event.name=exception and exception.type exists;
use sampled trace.trace_id values to drill into representative tracesAlso call get_service_map — it shows P95 durations between services and can immediately reveal which dependency is slow.
Exception data has two query surfaces: operation failures belong on spans (error=true, span
status, low-cardinality exception.slug/error category); full exception diagnostics may belong on
trace-correlated Logs API event rows. Do not assume exception.* exists on the containing span.
When investigating exceptions, discover the dataset schema first, query event.name=exception
with exception.type exists and trace.trace_id exists, take a sample, then pass its
trace.trace_id to get_trace(show_events=true). For legacy span-event exceptions, also check
name=exception and meta.signal_type=trace; Logs API events use event.name/body and
meta.signal_type=log.
If a service uses an exception-promoting LogRecordProcessor, some exception.* fields may also
appear on the containing span. Treat that as an explicit client-side compatibility feature, not a
Honeycomb guarantee: the event row remains authoritative for full diagnostics, and absence of
parent-span fields does not mean the exception event is missing.
This is the highest-value step. Once you have a query showing the anomaly:
run_bubbleup on the query result, selecting the outlier regionHow to interpret BubbleUp results:
deployment.version=v2.3.1 is 90% of slow requests but only 20% of baseline)db.query_duration is much higher in outliers)After BubbleUp identifies suspects:
get_trace to fetch the full traceWhat to look for in the trace waterfall:
Form a hypothesis from BubbleUp + trace analysis, then confirm:
Call create_board with:
HEATMAP first → BubbleUp the slow region → trace a slow request → verify with filtered queries
Count failed operation spans by service/route/category → count Logs API exception events by
event.name=exception and exception.type → sample trace.trace_id → get_trace(show_events=true)
→ verify with filtered queries. Do not use exception.message on the parent span as the only
exception search.
P99 grouped by deployment.version → BubbleUp comparing new vs old → trace from new version → verify
get_service_map → P99 on the slow dependency → relational query (any.service.name) to measure user impact → trace an affected request
If you find yourself reasoning any of these, follow the workflow anyway:
find_columns, expand time range, verify environment/dataset${CLAUDE_PLUGIN_ROOT}/skills/production-investigation/references/investigation-playbooks.md — Step-by-step playbooks for latency spikes, error surges, deployment regressions, dependency failures, SLO budget burn, and health checks${CLAUDE_PLUGIN_ROOT}/skills/production-investigation/references/bubbleup-guide.md — Detailed BubbleUp usage: selection types, time specifications, pagination, result interpretation${CLAUDE_PLUGIN_ROOT}/skills/production-investigation/references/trace-exploration.md — Trace structure, get_trace parameters and view modes, waterfall analysis, span events and links原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。