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

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

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

本頁內容
  1. 建立一個共享客戶端
  2. 傳送一個結構化事件
  3. 執行SQL
  4. 失敗和重試策略
  5. 驗證整合

Java HTTP 整合

Telemetry 不發布本機 Java SDK。當 Java 或 JVM 服務需要結構化事件攝取或 SQL 查詢時,透過一個應用程式擁有的 java.net.http.HttpClient 使用 HTTP API。

此邊界將連線重用、超時、重試、序列化和故障策略保持在服務的控制之下。

建立一個共享客戶端

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;

HttpClient telemetryHttp = HttpClient.newBuilder()
    .connectTimeout(Duration.ofSeconds(2))
    .build();

在應用程式啟動期間建立一次客戶端。使用伺服器端寫入範圍的 API 金鑰進行攝取,使用單獨的讀取範圍的金鑰進行報告或查詢自動化。

傳送一個結構化事件

使用應用程式已批准的 JSON 庫。此範例假設 eventJson 是從白名單物件序列化的,而不是從請求正文組裝的:

String eventJson = objectMapper.writeValueAsString(Map.of(
    "table", "api_request_completed",
    "data", Map.of(
        "event_id", eventId,
        "route_template", "/api/projects/:id",
        "method", "POST",
        "status_code", 201,
        "status", "success",
        "latency_ms", latencyMs,
        "request_id", requestId,
        "release", release
    )
));

HttpRequest request = HttpRequest.newBuilder()
    .uri(URI.create("https://api.telemetry.sh/log"))
    .timeout(Duration.ofSeconds(3))
    .header("Authorization", telemetryApiKey)
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(eventJson))
    .build();

HttpResponse<String> response = telemetryHttp.send(
    request,
    HttpResponse.BodyHandlers.ofString()
);

if (response.statusCode() < 200 || response.statusCode() >= 300) {
    recordDeliveryFailure(response.statusCode(), eventId);
}

使用路由範本和受控錯誤類別。請勿序列化標頭、cookie、憑據、請求正文、SQL 參數、堆疊追蹤、提示、生成的內容或不受限制的異常訊息。

執行SQL

使用讀取範圍的金鑰將包含 query 的 JSON 正文發布到 https://api.telemetry.sh/query

String queryJson = objectMapper.writeValueAsString(Map.of(
    "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
        """
));

HttpRequest queryRequest = HttpRequest.newBuilder()
    .uri(URI.create("https://api.telemetry.sh/query"))
    .timeout(Duration.ofSeconds(15))
    .header("Authorization", telemetryReadApiKey)
    .header("Content-Type", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString(queryJson))
    .build();

檢查HTTP狀態以及回應statusdatakey_order欄位。將空結果視為有效狀態而不是解析失敗。

失敗和重試策略

僅重試有限的瞬時故障,例如連線錯誤、429502503504。使用帶有抖動的指數退避,限制執行時間,並在嘗試中保留相同的 event_id。請勿重試未更改的 400401403 回應。

對於普通的產品分析,遙測失敗不應取代完整的客戶回應。如果計費或批准的稽核事件必須持久,請在與業務狀態相同的事務中寫入發件箱記錄,並從工作人員處交付。

驗證整合

傳送受控的成功、失敗、重試和超時裝置,然後檢查最近的行:

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

確認事件粒度、資料表名稱、欄位型別、單位、UTC 時間和隱私邊界。在將交付置於高流量路徑上之前,測試 Telemetry 超時和處理程序關閉。

繼續使用 Spring Boot 整合日誌API速率限制和錯誤事件傳遞和冪等性

相關產品功能

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

內容責任與技術參考

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

檢視編輯規範