跳至主要內容
整合指南

Django 和 Celery 結構化事件監控

記錄 Celery 任務每次嘗試的狀態,不將重試誤記為最終失敗,也不改變任務結果。

審閱者 Telemetry產品團隊 上 . 我們檢查了要傳送的事件、要排除的資料和程式碼新增方式. 誰負責審查此頁面

有用於
  • Celery 工作程序結果
  • Celery重試分析
  • 重試與任務關聯
實施證據

使用 Django and Celery structured event monitoring 傳送並驗證事件

觀察一次 Celery 任務嘗試,保留其原始結果,並在建立圖表前核對記錄的狀態。

  1. 1

    選擇嘗試

    Celery 工作程序結果

  2. 2

    定義合約

    job_name、job_id、queue_name、observed_state 和 status

  3. 3

    記錄嘗試狀態

    此範例將 task_postrun 的 SUCCESS、FAILURE 和 RETRY 記錄為嘗試狀態;重試不是最終失敗。

  4. 4

    核實證據

    執行已知任務並查詢 celery_task_attempt_finished,檢查觀察到的嘗試狀態;重試列不是最終結果。

開始之前

開始之前

  • 伺服器端TELEMETRY_API_KEY
  • 工作程序中已安裝 Celery
  • 在 Celery 工作程序啟動時匯入此模組

交貨設定

安裝並初始化伺服器端

此 Celery 工作程序模組透過 Python 標準函式庫 HTTP 傳送事件,無需安裝或初始化 Telemetry SDK。 將攝取憑據保留在瀏覽器包、客戶端可見的環境變數、原始碼控制、日誌和異常訊息之外。

  1. 1每個工作程序載入訊號模組一次,匯出錯誤不得改變任務結果。
  2. 2在成功、失敗、重試或超時邊界處新增結果事件。
  3. 3在啟用警示之前傳送受控裝置並檢查儲存的行。

片段

從一個結構化事件開始

在工作流程完成、失敗或重試的位置新增此形狀。然後從真實的欄位建置儀表板。

django-celery

Django and Celery structured event monitoring事件

python
import json
import logging
import os
from urllib.request import Request, urlopen
from celery.signals import task_postrun


def report_export_failure():
    try:
        logging.getLogger(__name__).warning("Telemetry export unavailable")
    except Exception:
        pass


@task_postrun.connect(weak=False)
def record_task(sender=None, task_id=None, state=None, **kwargs):
    try:
        status = {"SUCCESS": "success", "FAILURE": "failed",
                  "RETRY": "retry_scheduled"}.get(state)
        if status is None:
            return  # Other states need their own observed lifecycle handlers.
        key = os.getenv("TELEMETRY_API_KEY")
        if not key:
            report_export_failure()
            return
        delivery = sender.request.delivery_info or {}
        payload = {
            "table": "celery_task_attempt_finished",
            "data": {
                "job_name": sender.name,
                "job_id": task_id,
                "queue_name": delivery.get("routing_key"),
                "observed_state": state,
                "status": status,
                "attempt": sender.request.retries + 1,
            },
        }
        request = Request("https://api.telemetry.sh/log",
                          data=json.dumps(payload).encode("utf-8"),
                          headers={"Authorization": key,
                                   "Content-Type": "application/json",
                                   "User-Agent": "telemetry-agent/1.0"},
                          method="POST")
        # Socket timeout, not a hard end-to-end deadline. Export can be lost.
        with urlopen(request, timeout=1.0) as response:
            if not 200 <= response.status < 300:
                report_export_failure()
    except Exception:
        # Do not let export or metadata errors replace the task outcome.
        report_export_failure()

事件結構

job_name、job_id、queue_name、observed_state 和 status

所觀察執行的 attempt 為 retries + 1

僅包含工作程序中繼資料;匯出前請檢查任務和佇列識別碼

檢查設定

檢查站 1

此範例將 task_postrun 的 SUCCESS、FAILURE 和 RETRY 記錄為嘗試狀態;重試不是最終失敗。

檢查站 2

重試時保留邏輯任務 ID,並將 retries + 1 記錄為嘗試序號。

檢查站 3

在每個工作程序中匯入此模組一次。它不記錄 Django 請求,也不測量任務耗時。

檢查站 4

匯出盡力而為,通訊端逾時為一秒;它會增加工作程序延遲,未實作嚴格的總耗時上限、持久化投遞或匯出重試。

檢查站 5

不要將任務參數、結果、例外文字、URL 或憑證寫入事件。工作程序遺失或終止可能阻止 task_postrun,因此缺失事件的狀態未知。

驗證

證明事件已到達

在演練已知的成功和失敗案例後執行此命令。如果您的最終事件契約與程式碼片段不同,請替換後備資料表名稱。

django-celery-verification

Django and Celery structured event monitoring 驗證查詢

sql
SELECT *
FROM celery_task_attempt_finished
ORDER BY timestamp_utc DESC
LIMIT 20;
確認每個邏輯結果的一個終端行,以及預期狀態、識別符號、單位和 UTC 時間。
檢查推斷的架構並驗證重試不會更改欄位型別或生成新的邏輯事件 ID。
在儲存的欄位中搜尋憑據、原始有效負載、提示、私有內容和無限制的錯誤訊息。
在將儀表板視為完整之前,請執行提供程式超時、攝取拒絕和處理程序關閉。

實施參考

在啟用新的生產路徑之前,請檢查事件合約、資料安全指南和上游主要文件。

在哪裡記錄事件

保持結果事件小且可恢復

該模式提供了

  • 除了上游工作流程之外,還有一個有界的、SQL 就緒的結果。
  • 用於儀表板、警示和跨事件關聯的穩定欄位。
  • 用於驗證成功、失敗、重試和超時行為的夾具驅動路徑。

該模式不提供

  • OTLP 匯出器、自動收集管道或詳細追蹤和診斷日誌的替代品。
  • 僅因為有效負載包含事件 ID,所以僅傳送一次。
  • 收集原始提供商有效負載、使用者內容、憑證或受監管資料的權限。

事件結構描述範例

在將查詢或程式碼片段適應生產之前,請檢查行粒度、發出邊界、所需型別、隱私類、範例有效負載和驗證清單。

相關產品功能

繼續此工作流程 警示

將經過審查的可靠性查詢提升到擁有的閾值和回應工作流程中。

相關 SQL 查詢範例

更多 SQL 範例

針對此工作流程中的結構化欄位執行查詢,檢查範例結果,並將有用的答案轉換為儀表板或警示。

瀏覽所有查詢範例

按實施系列瀏覽

比較相關整合模式

與此整合配對的範本

更多整合