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

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

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

本頁內容
  1. 設定併傳送事件
  2. 傳送一批
  3. 執行SQL
  4. 重試和失敗策略
  5. 驗證並排除故障

Ruby HTTP 整合

Telemetry 的 HTTP API 與 Ruby 的標準庫配合使用。這使得依賴面較小,同時將超時、重試和永續性策略置於應用程式控制之下。

設定併傳送事件

require "json"
require "net/http"
require "uri"

api_key = ENV.fetch("TELEMETRY_API_KEY")
uri = URI("https://api.telemetry.sh/log")

request = Net::HTTP::Post.new(uri)
request["Authorization"] = api_key
request["Content-Type"] = "application/json"
request.body = {
  table: "api_request_completed",
  data: {
    event_id: "evt_request_101",
    route_template: "/api/projects/:id",
    method: "GET",
    status_code: 200,
    status: "success",
    latency_ms: 184
  }
}.to_json

response = Net::HTTP.start(
  uri.hostname,
  uri.port,
  use_ssl: true,
  open_timeout: 2,
  read_timeout: 10
) { |http| http.request(request) }

unless response.is_a?(Net::HTTPSuccess)
  raise "Telemetry log failed with HTTP #{response.code}"
end

Telemetry 新增 timestamp_utc。將金鑰保留在伺服器端,並且不要傳送憑據、cookie、標頭、請求參數、原始異常訊息或私人客戶內容。

傳送一批

data 設定為陣列:

request.body = {
  table: "job_completed",
  data: [
    {
      event_id: "evt_job_101",
      job_name: "invoice_sync",
      status: "success",
      duration_ms: 912
    },
    {
      event_id: "evt_job_102",
      job_name: "invoice_sync",
      status: "failed",
      duration_ms: 2401,
      error_type: "provider_timeout"
    }
  ]
}.to_json

保持批次有界且模式相容。應用程式擁有的佇列還需要最大深度、最大壽命、溢位規則、重試預算和關閉期限。

執行SQL

使用讀取範圍的鍵:

uri = URI("https://api.telemetry.sh/query")
request = Net::HTTP::Post.new(uri)
request["Authorization"] = api_key
request["Content-Type"] = "application/json"
request.body = {
  query: <<~SQL
    SELECT
      route_template,
      COUNT(*) AS requests,
      ROUND(AVG(latency_ms), 0) AS avg_latency_ms
    FROM api_request_completed
    WHERE timestamp_utc >= now() - INTERVAL '24 hours'
    GROUP BY route_template
    ORDER BY requests DESC;
  SQL
}.to_json

response = Net::HTTP.start(
  uri.hostname,
  uri.port,
  use_ssl: true,
  open_timeout: 2,
  read_timeout: 30
) { |http| http.request(request) }

raise "Telemetry query failed with HTTP #{response.code}" unless response.is_a?(Net::HTTPSuccess)

result = JSON.parse(response.body)
Array(result["data"]).each do |row|
  # Validate expected keys and nulls before using the row.
end

使用 非同步查詢API 進行大型 JSON 或 Parquet 匯出。

重試和失敗策略

Net::OpenTimeout 表示無法建立連線。 Net::ReadTimeout 不明確,因為伺服器可能在回應丟失之前已經接受了請求。

僅重試暫時性網路故障、429502503504。重用邏輯事件的 event_id,應用帶抖動的指數退避,並限制總執行時間。不要重試未更改的無效請求。

對於正常分析,遙測中斷不應取代完整的客戶回應。當丟失不可接受時,將計費或批准的稽核事件保留在應用程式擁有的持久發件箱中。

驗證並排除故障

傳送綜合成功和失敗事件、查詢最新行並檢查 GET /tables/<table>/schema

  • KeyError:在伺服器或工作環境中設定API金鑰。
  • 401403:更換金鑰或更正其範圍。
  • 400:檢查表命名、JSON 形狀和欄位型別相容性。
  • 超時:應用工作流程記錄的重試或回退策略,而不列印負載。
  • 處理程序關閉:直接呼叫HTTP,沒有後台佇列需要flush;首先追蹤所需的呼叫或保留事件。

請參閱 導軌整合日誌API活動交付指南攝取故障排除

相關產品功能

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

內容責任與技術參考

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

檢視編輯規範