跳到正文

日誌 ​

開啟服務的 日誌 卡片,或在服務的 部署記錄 中點選某次部署。日誌有獨立的頁面:

  • 部署。 頂部的下拉選單決定查看哪次部署的日誌:目前的部署排在最前,較早的部署在 歷史 下(已移除或失敗)。旁邊顯示這次部署的狀態、部署 ID(附複製按鈕),以及部署的分支和提交;以映像檔為來源的服務則顯示映像檔。
  • 建置日誌 顯示這次部署的輸出:複製、建置、推送和發布。部署執行期間即時更新,結束後隨部署保留。只部署映像檔的部署沒有建置步驟,所以這個分頁無法使用(部署失敗時除外:這時它的步驟會說明失敗原因)。
  • 執行日誌 顯示服務容器的輸出,中間穿插 Zenavo 關於這些容器的平台事件。

閱讀日誌表格 ​

每一行日誌是表格中的一列,有三欄:

欄顯示內容
級別ERROR、WARN、INFO 或 DEBUG,附彩色圓點。
時間瀏覽器所在時區的日期和時間,例如 10/22 18:25:06。
內容以單行顯示的日誌內容。點選這一列(或左側箭頭)查看完整內容:JSON 會格式化顯示,複製 按鈕複製這一行。展開後還會顯示精確時間、實例和部署。

Zenavo 從日誌行本身判斷級別。它能辨識 JSON 日誌("level"、"severity"、pino 的數字級別)、level= 欄位、行首附近的級別詞,例如 INFO:、[WARN] 或 ERROR -(uvicorn、Python logging、Java、Rails、Go),Kubernetes 風格的 E1022 … 行、nginx 的 [error],以及當機資訊(Traceback、panic:、…Error:)。沒有級別的存取日誌,4xx 回應記為 WARN,5xx 記為 ERROR。縮排的行(例如呼叫堆疊)沿用上一行的級別。其他行都是 INFO:Kubernetes 不區分寫到 stderr 和 stdout 的輸出,所以僅僅寫到 stderr 不會讓一行變成錯誤。

用搜尋框和 ERROR / WARN / INFO / DEBUG 按鈕篩選表格。表格會跟隨最新的行;向上捲動即可停下來閱讀,點選 跳到最新 繼續跟隨。匯出 會把目前顯示的內容儲存為 .log 檔案(已儲存的日誌則匯出整個時間範圍)。

平台事件 ​

在應用程式自己的輸出之間,執行日誌會顯示它的實例發生了什麼,以紫色的 [Zenavo] Pod/<實例> 開頭:

事件含義
Scheduled實例已分配到伺服器。
Pulling、Pulled正在下載映像檔,或映像檔已就緒。
Failed、ErrImagePull、ImagePullBackOff(ERROR)映像檔拉取失敗:檢查映像檔名稱、標籤和映像檔倉庫的存取權限。
Created、Started容器已建立並啟動。
Unhealthy(WARN)健康檢查失敗。
BackOff(WARN)容器不斷結束,正以越來越長的間隔重新啟動。
OOMKilled(ERROR)容器記憶體不足,被停止。請提高記憶體上限或降低用量。
Exited(WARN)容器以錯誤碼結束。
Killing、Stopped實例正在被替換(新部署、重新啟動或縮減),並依要求停止。
FailedMount、Evicted、FailedScheduling(ERROR)磁碟區無法掛載、伺服器資源不足,或沒有空間執行這個實例。

不斷重複的事件(例如健康檢查一直失敗)每分鐘最多顯示一次,並附上次數,例如 (x7)。

實例和部署 ​

執行日誌預設跟隨 最新實例。選擇 全部實例 可以看到每個副本(發布過程中新舊實例會並排顯示);這時每一行都會標出所屬實例。

每一行日誌和每個事件都記錄了啟動其實例的部署,所以一次部署的日誌就是它自己的日誌,即使發布期間新舊實例同時執行也不會混在一起。在 Zenavo 開始記錄這一點之前儲存的日誌,會改為依時間歸到部署:從部署開始,到下一次部署完成為止。頁面顯示這類日誌時會提示。

時間範圍和已儲存的日誌 ​

對於目前的部署,全部時間 會即時跟隨日誌:先顯示每個實例的最後 200 行,然後即時顯示新行。選擇一個時間範圍(最近一小時到最近 30 天,或自訂範圍)會改為顯示已儲存的日誌。已移除的部署總是顯示已儲存的日誌。日誌寫出後通常在兩分鐘內被儲存。

日誌保留多久取決於團隊的方案:

方案保留時間
Free48 小時
Dev7 天
Pro30 天
Team90 天

日誌儲存從功能開啟且服務執行時開始。觀察者可以閱讀和下載它們,就像可以閱讀即時日誌一樣。

儲存方式 ​

  • 由控制平面收集。 Zenavo 透過它管理你伺服器時已有的連線讀取日誌和事件,並且只讀取專案自己的命名空間。你的伺服器不會拿到任何儲存憑證,所以即使伺服器遭入侵,也無法讀取或刪除任何人儲存的日誌。
  • 先遮蔽,再加密。 先移除變數值,容器輸出和事件訊息都一樣(健康檢查失敗的訊息裡可能包含它收到的回應)。然後每個區塊會被壓縮,並在上傳前用從控制平面主金鑰衍生的金鑰加密(AES-256-GCM)。取得儲存桶或它的存取金鑰的人只能看到密文。
  • 按時刪除。 超過方案保留時間的日誌每小時刪除一次,已刪除的專案和團隊的日誌也會被移除。
  • 有上限。 每個服務每小時最多儲存 200 MB 日誌文字;超出後會儲存一行提示,並略過這一小時剩餘的內容。即時日誌仍然顯示每一行。超過 64 KB 的行會被截斷。

要同時把日誌轉發到 Datadog、Loki 或你自己的位址,請新增日誌轉發。平台事件也會被轉發,格式為 [Zenavo] Pod/<實例> — <原因>: <訊息>。

與 Zeabur 無關聯。