跳至主要內容
Telemetry
瀏覽說明文件
SDK更新於 2026年7月29日由 Telemetry 編輯團隊和產品團隊審查閱讀約需 3 分鐘

讓程式設計代理使用這篇文件

開啟 Claude Code、Codex、Cursor 或其他編碼代理的集中提示包,然後將其適應此處介紹的工作流程。

本頁內容
  1. 安裝並初始化
  2. 傳送結構化事件
  3. 執行查詢
  4. 生產運輸邊界
  5. 重試和關鍵路徑策略
  6. 驗證整合
  7. 故障排除

Go SDK

使用 telemetry-go 進行來自 Go 服務的直接同步事件和查詢呼叫。已發布的客戶端為每個方法呼叫建立一個 HTTP 請求。它不公開上下文、自定義 http.Client、SDK 超時、自動重試、批次處理或重新整理佇列。

安裝並初始化

go get github.com/telemetry-sh/telemetry-go
import (
    "os"

    telemetry "github.com/telemetry-sh/telemetry-go"
)

telemetryClient := telemetry.NewTelemetry()
telemetryClient.Init(os.Getenv("TELEMETRY_API_KEY"))

在應用程式啟動期間初始化一個客戶端。使用寫入範圍的金鑰進行攝取,使用讀取範圍的金鑰進行僅查詢自動化。

傳送結構化事件

event := map[string]interface{}{
    "event_id":      eventID,
    "route_template": "/api/projects/:id",
    "method":         "POST",
    "status_code":    201,
    "status":         "success",
    "latency_ms":     float64(time.Since(startedAt).Microseconds()) / 1000,
    "request_id":     requestID,
    "release":        os.Getenv("APP_RELEASE"),
}

response, err := telemetryClient.Log("api_request_completed", event)
if err != nil {
    log.Printf("telemetry delivery failed event_id=%s error_type=transport_error", eventID)
}
_ = response

請勿傳送包含識別符號、標頭、cookie、請求正文、憑據或私人客戶內容的原始請求路徑。使用標準化的路由模式和受控的錯誤類別。

Go SDK 每次 Log 呼叫接受一個 map[string]interface{}。如果應用程式擁有的工作執行緒需要批次攝取,請直接使用 HTTP 日誌 API。

執行查詢

query := `
SELECT
  route_template,
  COUNT(*) AS requests
FROM api_request_completed
WHERE timestamp_utc >= now() - INTERVAL '24 hours'
GROUP BY route_template
ORDER BY requests DESC
`

result, err := telemetryClient.Query(query)
if err != nil {
    return fmt.Errorf("query telemetry: %w", err)
}

rows, _ := result["data"].([]interface{})
fmt.Printf("rows=%d\n", len(rows))

回應使用通用對映和切片。在自動化中使用值之前,請檢查型別、缺失欄位、API 狀態和空結果。使用 非同步查詢API 進行大型 JSON 或 Parquet 匯出。

生產運輸邊界

當前的SDK構造http.Client{}沒有超時。因此,停滯的網路請求可能會超出 HTTP 處理程式或工作執行緒的延遲預算。當需要有界超時、上下文取消、連線池設定、批次負載或顯式狀態處理時,請將 Telemetry HTTP 合約包裝在服務的現有 http.Client 中。

保持相同的事件架構和授權規則:

client := &http.Client{Timeout: 2 * time.Second}

將該客戶端用於 POST https://api.telemetry.sh/log,其 JSON 主體包含 tabledata。在解碼回應之前檢查 HTTP 狀態。

重試和關鍵路徑策略

僅重試暫時性連線失敗、429502503504。應用帶抖動的指數退避、限制執行時間,並重複使用相同的 event_id。不要重試未更改的架構或請求錯誤。

對於正常的應用程式分析,不要因為遙測失敗而替換已完成的客戶回應。對於需要永續性的計費或已批准的審查事件,請在擁有業務事務的系統中保留髮件箱記錄並從工作人員處交付該記錄。

請參見 事件傳遞和冪等性配料和背壓

驗證整合

傳送綜合成功、失敗、重試和超時事件,然後執行:

SELECT timestamp_utc, event_id, route_template, status, latency_ms, error_type
FROM api_request_completed
ORDER BY timestamp_utc DESC
LIMIT 20;

確認資料表名、欄位型別、單位以及是否存在敏感內容。在將儀器連線到高流量處理程式之前測試處理程序關閉和停止的 Telemetry 請求。

故障排除

  • 初始化錯誤:在第一次方法呼叫之前確認伺服器端金鑰非空。
  • 請求掛起:透過具有超時和請求上下文的客戶端使用 HTTP API。
  • 不成功回應顯示為資料:檢查返回的狀態欄位;當前的 SDK 解碼 JSON 主體,而不強制 HTTP 成功。
  • 架構拒絕:保持欄位型別穩定並刪除空或不受支援的形狀。
  • 重試後重復行:保留 event_id 並使用 重複的事件配方 進行審查。

繼續使用 Go HTTP 伺服器結構化記錄日誌API速率限制和 API 錯誤

相關功能

記錄穩定的事件名稱、型別明確的欄位,以及經過隱私審查的上下文。

頁面作者與參考資料

Telemetry 編輯團隊負責維護本文;產品團隊審查功能行為、範例和適用範圍。

我們如何審查文件