本文へ移動
Telemetry
バックグラウンドジョブ SQL レシピ

SQL で停止したバックグラウンド ジョブを見つける

ジョブの開始イベントと終了イベントを結合して、予想される完了ウィンドウを超えた作業を特定します。

中級者job_eventsレビュー済み 2026-07-27テスト済み アパッチ DataFusion 45.2.0

レビュー者 Telemetry 製品チーム . SQL の互換性、イベント コントラクト、合成出力、および操作上の注意事項. 基準と所有権を確認する

質問に回答しました

開始されたが、最終イベントを生成しなかったジョブはどれですか?

ジョブは、失敗イベントを生成せずに消滅する可能性があります。開始イベントをターミナル イベントに結合すると、まだ実行中の作業、ワーカーのクラッシュ後に失われた作業、または完了インスツルメンテーションが欠落している作業が明らかになります。

イベント契約

クエリが期待するフィールド

フィールド種類なぜ存在するのか
timestamp_utcTimestampイベントが発生したとき。
job_idUtf81 つのジョブのすべてのイベントで共有される識別子。
job_nameUtf8安定した論理ジョブ名。
event_nameUtf8job_started、job_completed、または job_failed。
queue_nameUtf8ジョブを所有するキュー。
DataFusion SQL

クエリをコピーする

sql
WITH started AS (
  SELECT
    job_id,
    job_name,
    queue_name,
    MIN(timestamp_utc) AS started_at
  FROM job_events
  WHERE event_name = 'job_started'
    AND timestamp_utc >= now() - INTERVAL '24 hours'
  GROUP BY job_id, job_name, queue_name
),
finished AS (
  SELECT
    job_id,
    MAX(timestamp_utc) AS finished_at
  FROM job_events
  WHERE event_name IN ('job_completed', 'job_failed')
    AND timestamp_utc >= now() - INTERVAL '24 hours'
  GROUP BY job_id
)
SELECT
  s.job_id,
  s.job_name,
  s.queue_name,
  s.started_at
FROM started s
LEFT JOIN finished f ON s.job_id = f.job_id
WHERE f.job_id IS NULL
  AND s.started_at < now() - INTERVAL '15 minutes'
ORDER BY s.started_at ASC;

この読み取り専用クエリは、空の型付きテーブルに対して計画され、実行されます。 アパッチ DataFusion 45.2.0。決定論的なサンプル出力は合成され、個別にレビューされます。フィールド タイプ、しきい値、ビジネス定義を独自のデータと照合して検証します。 テスト方法を読んでください。

クエリ結果

終了イベントのない最も古いジョブ

テーブルには、オペレータが作業を検査または再生するために必要な識別子が保存されます。

job_idjob_namequeue_namestarted_at
job_7f31import_catalogimports2026-07-27 15:02:11Z
job_801csync_subscriptionbilling2026-07-27 15:19:43Z

合成出力例。運用上の決定に使用する前に、独自のイベント スキーマとしきい値に対してクエリを実行します。

Oldest jobs without a terminal event: Find Stalled Background Jobs With SQL 結果例からの合成 started_at 値の静的チャート
決定論的な出力例のインデックス可能な SVG。記事、ランブック、または出典を明示した設計レビューのためにダウンロードしてください。

例を再現する

パブリックフィクスチャをダウンロードする

JSON バンドルには、型付きイベント コントラクトが含まれています。 illustrative 入力行、正確な SQL、予想される出力、レビューメモ、およびエンジンのバージョン。 CSV には、表示された結果が含まれます。

SQL の仕組み

  1. 1最初の CTE は、各論理ジョブの最も早い開始を維持します。 2 番目は最新の端末イベントを保持します。
  2. 2LEFT JOIN は、一致する完了または失敗が存在しない場合でも、開始されたジョブを保持します。
  3. 315 分のしきい値は、動作上の停止の定義です。やみくもにコピーするのではなく、予想されるジョブ期間に基づいて設定します。

決定すべきエッジケース

  • 長時間実行されるジョブには、ジョブ固有のしきい値またはハートビート イベントが必要です。
  • イベントが遅れると、一時的に誤検知が発生する可能性があります。取り込みが遅れる可能性がある場合は、最新のバケットを遅らせます。
  • 再利用された job_id は無関係な実行に結合するため、ID は論理実行ごとに一意である必要があります。

推奨されるダッシュボード

  • Stat: 現在の停止ジョブ数
  • 表: job_id および queue_name の最も古い停止ジョブ
  • 折れ線グラフ: 日別の停止ジョブの検出数

アラートガイダンス

重要なジョブが、予想される期間に短い取り込み猶予期間を加えた期間を超えると、アラートが送信されます。

アラート設定を読む

レシピを活用する

関連する機器とガイド

分析を続ける

実際のイベントで実行する

テーブルを作成し、フィールドを調整して、結果を保存します

無料で始めて、構造化されたイベントを送信し、クエリ結果をグラフ、共有ダッシュボード ウィジェット、またはアラート入力として使用します。

API キーを取得する