本文へ移動
Telemetry
ドキュメントを見る
ガイド更新日: 2026年7月27日Telemetry 編集チームと製品チームによるレビュー2 最小読み取り時間

コーディング エージェントでこのドキュメントを使用してください

Claude Code、Codex、Cursor、または別のコーディング エージェント用の集中プロンプト パックを開き、それをここで説明するワークフローに適応させます。

このページの内容
  1. プロジェクトをセットアップする
  2. 完了した各ステップを計測する
  3. クエリの平均とテール期間
  4. パフォーマンスビューを構築する
  5. 次のステップ

コード実行のプロファイリング

リクエストの各段階でタイミングを計ることで、直感が証拠に置き換えられます。 所要時間を構造化イベントにすれば、実行、リリース、入力サイズの区分をまたいで関数を比較できます.

842 ミリ秒のリクエストのほとんどを消費するデータベース検索を示す関数実行ウォーターフォール

期間プロファイルは、どの関数を最初に最適化する価値があるかを示します。

プロジェクトをセットアップする

npm init -y
npm install telemetry-sh

完了した各ステップを計測する

ワークフロー全体で同じ列が機能するように、ステップごとに 1 つのイベントを使用します。あ run_id 1 つのリクエストまたはジョブに属するステップを接続します。

const telemetry = require("telemetry-sh");
const { randomUUID } = require("node:crypto");

telemetry.init(process.env.TELEMETRY_API_KEY);

async function measureStep({ runId, stepName }, operation) {
  const startedAt = Date.now();

  try {
    const result = await operation();
    await telemetry.log("profile_step_completed", {
      run_id: runId,
      step_name: stepName,
      status: "success",
      duration_ms: Date.now() - startedAt,
      release: process.env.APP_RELEASE ?? "unknown",
    });
    return result;
  } catch (error) {
    await telemetry.log("profile_step_completed", {
      run_id: runId,
      step_name: stepName,
      status: "error",
      duration_ms: Date.now() - startedAt,
      error_type: error.constructor?.name ?? "Error",
      release: process.env.APP_RELEASE ?? "unknown",
    });
    throw error;
  }
}

async function profileRequest() {
  const runId = randomUUID();

  const project = await measureStep(
    { runId, stepName: "load_project" },
    () => loadProject()
  );

  return measureStep(
    { runId, stepName: "generate_report" },
    () => generateReport(project)
  );
}

デフォルトでは、関数の引数、データベース レコード、または例外メッセージのログ記録を避けます。安全なカテゴリ input_size_bucket, cache_status、または query_name 生のコンテンツを保存せずにパフォーマンスを説明できます。

クエリの平均とテール期間

SELECT
  step_name,
  COUNT(*) AS runs,
  ROUND(AVG(duration_ms), 0) AS avg_duration_ms,
  ROUND(approx_percentile_cont(duration_ms, 0.95), 0) AS p95_duration_ms,
  ROUND(
    100.0 * SUM(CASE WHEN status = 'error' THEN 1 ELSE 0 END)
      / NULLIF(COUNT(*), 0),
    2
  ) AS error_rate_pct
FROM profile_step_completed
WHERE timestamp_utc >= now() - INTERVAL '7 days'
GROUP BY step_name
ORDER BY p95_duration_ms DESC;

断続的な遅いステップが表示されたままになるように、平均だけではなく p95 を使用します。分割 release 導入後に個別に検査する run_id 複数の遅いステップが同じリクエストに属している場合の値。

パフォーマンスビューを構築する

以下から始めます:

  • ステップごとのp95期間の棒グラフ。
  • 最も遅いステップの経時的な p95 の折れ線グラフ。
  • リリースごとに分割された結果テーブル。
  • エラー行または極端な期間の行にフィルター処理された最近のイベント テーブル。

有用な境界でのプロファイル。ホット ループ内の小さな関数ごとにイベントを発行しないでください。これによりオーバーヘッドが追加され、解釈が難しいデータセットが生成されます。

次のステップ

測定されたワークフローが API リクエストの場合、 API レイテンシ パーセンタイル レシピ 完全な結果の視覚化、ダッシュボードのレイアウト、アラートのデザインを実現します。

関連機能

安定したイベント名、型指定されたフィールド、プライバシーがレビューされたコンテキストをキャプチャします。

ページの著者と参考資料

Telemetry 編集チームがこの説明を所有しています。製品チームは動作、例、境界をレビューします。

ドキュメントのレビュー方法