日誌轉發
日誌轉發會在服務寫出執行日誌時,把它們即時傳送到你自己的日誌工具:Datadog、Grafana Loki(包括 Grafana Cloud)或任何 HTTPS 位址。Pro 及以上方案包含日誌轉發。
新增轉發目標
團隊擁有者和管理員開啟 帳號設定 → 日誌轉發(作用於側邊欄中選中的團隊),點選 新增轉發目標:
| 目標 | 需要什麼 |
|---|---|
| Datadog | API 金鑰(Datadog:Organization Settings → API Keys)和你帳號所在的站點,例如 datadoghq.com 或 datadoghq.eu。 |
| Loki | Push 位址,例如 https://logs-prod-012.grafana.net/loki/api/v1/push;不帶路徑的位址會自動加上 /loki/api/v1/push。Grafana Cloud 還需要使用者(stack 的數字 ID)和一個有 logs:write 權限的權杖。多租戶 Loki 的租戶以 X-Scope-OrgID 傳送。 |
| HTTP | 任意 https:// 位址。Zenavo 會向它 POST 簽名後的 JSON(見下文)。 |
選擇 全部專案,包括以後新建的,或者只選部分專案。測試 會立即傳送一行,並顯示是否送達。每個團隊最多 5 個轉發目標。
位址、API 金鑰和密碼都屬於機密:它們加密儲存,控制台只顯示目標的主機和路徑。Zenavo 只向所有位址都是公開網路位址的主機傳送,並且不跟隨重定向。新增、修改、測試和刪除轉發目標都會記錄在稽核日誌中。
傳送哪些內容
執行中的服務輸出的每一行,變數值和其他地方一樣被遮蓋([REDACTED]),並標註團隊、專案和服務。建置日誌不會轉發。
| 目標 | 格式 |
|---|---|
| Datadog | 傳送到 https://http-intake.logs.<site>/api/v2/logs,ddsource 為 zenavo,service 為服務名稱,hostname 為專案名稱,並帶有 project、project_id、service_id 和 team_id 標籤。 |
| Loki | 每個服務一個流,標籤為 source="zenavo"、project、project_id、service、service_id 和 team_id。 |
| HTTP | 下文的 JSON。 |
日誌按批傳送,每批最多 500 行,或者每 2 秒傳送一次。失敗的批次會在 1、5 和 15 秒後重試;被目標拒絕的請求(例如 API 金鑰錯誤,即除 408 和 429 以外的任何 4xx 回應)不會重試。重試之後仍失敗的批次會被丟棄。每個轉發目標最多快取 10,000 行;目標處理不過來時,較新的行會被丟棄。控制台會顯示每個轉發目標最近一次傳送的結果或失敗原因,以及丟棄了多少行。控制台中的日誌(即時和已儲存的)永遠不受轉發影響。
傳送是至少一次(at-least-once):控制面重啟時,最近幾分鐘的日誌可能會被再次傳送。
HTTP 請求內容
{
"logs": [
{
"time": "2026-10-22T08:00:00.123456789Z",
"message": "GET /cart 200 12ms",
"team_id": "team_…",
"project_id": "proj_…",
"project": "shop",
"service_id": "svc-…",
"service": "web"
}
]
}任何 2xx 回應都視為已送達。每個請求都帶有 X-Zenavo-Timestamp(Unix 秒)和 X-Zenavo-Signature: v1=<hex>,後者是用轉發目標的簽名金鑰對 <timestamp>.<原始請求體> 計算的 HMAC-SHA256,與通知 Webhook 的方案相同。金鑰(whsec_…)在新增轉發目標時只顯示一次;更換金鑰 會替換它,並只顯示一次新金鑰。
方案
日誌轉發需要 Pro、Team 或企業版方案。團隊換到不包含它的方案後,轉發會停止;轉發目標仍然可以關閉、編輯或刪除,升級後會重新開始轉發。