Skip to content
Open Source

查看日誌、事件與用量,開啟終端機

看服務的日誌和 Kubernetes 事件、確認 CPU 和記憶體用量,並在副本裡開啟終端機或瀏覽檔案。

服務出問題時,先看 日誌 分頁的輸出,再到 部署紀錄 分頁切到 事件 看 Kubernetes 做了什麼,用量 分頁確認是不是資源不夠。要在副本裡執行指令,按服務頁上方的 終端機。要看或改磁碟區裡的檔案,用 檔案 分頁。

  • 看日誌、事件和用量要有讀取專案的權限。開終端機和 檔案 分頁要能在副本裡執行指令(pods/exec),專案的開發者有這個權限。
  • 這些都要有執行中的副本。副本數是 0 或副本還沒啟動時,畫面會寫 沒有執行中的副本。
  • 日誌的 歷史紀錄 和用量的 歷史紀錄 要叢集另外裝儲存服務,見下面各節。

到服務的 日誌 分頁,畫面顯示一個副本的輸出。

  • 服務有多個副本或多個容器時,從上方切換 副本 和 容器。
  • 持續追蹤 會一直接收新的行。往上捲時會暫停,按 跳到最新 回到底部。
  • 在 篩選 輸入文字,只留下符合的行。開頭加 - 會排除符合的行,例如 -healthz。
  • 依 錯誤、警告、資訊 篩選日誌等級。
  • 前一次執行 顯示容器上次崩潰或重新啟動前的輸出,找崩潰原因時先看這裡。
  • 下載 把目前的日誌存成檔案。

副本換掉後,舊副本的日誌就從叢集消失了。要看已經替換的副本寫過什麼,用 歷史紀錄。

歷史紀錄 列出所有副本寫過的日誌,包含已經替換的副本。它讀的是日誌儲存服務,需要叢集管理員在 Zeabur 的 Helm chart 開啟 proxy.enabled。預設讀取 VictoriaLogs,位址設在 proxy.logs.url。用安裝器裝了 VictoriaLogs 就會自動開啟。叢集沒有 VictoriaLogs 時,把 proxy.logs.enabled 設為 false。沒開啟時,畫面寫 還沒有開啟日誌歷史紀錄。

到服務的 部署紀錄 分頁,切到 事件,會列出副本排到哪個節點、下載映像檔、健康檢查失敗、記憶體超過上限(OOMKilled)這類 Kubernetes 事件,最新的在前。按 警告 只看警告。

Kubernetes 只保留大約一小時內的事件。更早的問題要看日誌的 歷史紀錄。

到服務的 用量 分頁:

  • 目前用量:每個副本的 CPU 和記憶體,和保留量、上限並列。快用到記憶體上限時會標 接近記憶體上限,超過上限時容器會重新啟動。這需要叢集裝 metrics-server,沒裝時按 安裝。
  • 歷史紀錄:一段時間的用量圖,會標出 OOMKilled 和重新啟動的時間點。這需要相容 Prometheus 的指標儲存服務,例如 VictoriaMetrics 或 Prometheus。沒有時按 安裝 VictoriaMetrics,已經有的話按 改用其他儲存服務 指定它的 Kubernetes Service。

叢集管理員在 Helm chart 開啟 proxy.enabled 後,專案的檢視者和開發者都看得到自己專案的 歷史紀錄。Zeabur Proxy 會先確認你是這個專案的成員,查詢也只拿得到這個專案的指標。沒開啟,或在設定裡改用其他儲存服務時,Zeabur 直接讀取儲存服務,能這樣讀的人看得到所有專案的指標,所以只有管理員看得到。

用量長期超過保留量或接近上限時,到調整副本、資源與健康檢查調整 運算資源。

進入服務,按頁面上方的 終端機。終端機會在頁面下方打開,連到目前選的副本。也可以從服務的 更多 選單或搜尋開啟。

終端機在容器裡執行 shell,例如:

printenv DATABASE_URL
wget -qO- http://localhost:8080/healthz

在這裡改的檔案只留在這個副本,副本換掉就消失。要保留的資料放在磁碟區。

15 分鐘沒有輸入或輸出,終端機會自動關閉,按 重新連線 就能再開。

distroless 這類精簡映像檔沒有 shell,終端機會說明這一點,並顯示 開啟除錯終端機。按下去會在同一個副本加上一個 busybox 除錯容器,名稱是 zeabur-debug- 開頭。它看得到應用程式正在執行的程式,也掛載同樣的磁碟區。

沒有 pods/exec 權限時,終端機會列出一份 Role 和 RoleBinding,交給管理員套用。這份設定只授予這個專案的終端機權限,見下面的 kubectl 一節。

到服務的 檔案 分頁,選 副本 和 容器,就能瀏覽容器裡的檔案,上傳、下載、新增資料夾、重新命名 或 刪除。每個位置會標出它是哪一種:

種類替換副本後
磁碟保留
暫存刪除
映像檔改了只留在這個容器,重新啟動就消失
設定檔、機密變數唯讀,要到環境變數修改

檔案的讀寫和 kubectl cp 一樣透過 tar。映像檔沒有 tar 時,按 加入除錯容器,改由除錯容器讀取磁碟區,但讀不到映像檔本身的檔案。

要在瀏覽器裡用 kubectl 或 helm,從頁面下方的終端機區域或搜尋選 開啟 kubectl 終端機。Zeabur 會在 zeabur-terminals Namespace 替你啟動一個暫時的容器,裡面的 kubectl 和 helm 以你的身分執行,用你自己的權限,預設在目前的專案。

在專案以外的頁面(例如 叢集 頁)開啟時,開的是整個叢集的 kubectl 終端機,確認畫面標題是 開啟叢集的 kubectl 終端機。它預設在 default Namespace,你有權限的 Namespace 都能操作。

這個容器最多執行 30 分鐘,最後一個終端機關閉 1 分鐘後就會刪除。其中的認證會過期,重新開啟終端機就換上新的。

以下以專案 demo、Deployment web 為例。

Zeabur 的動作kubectl
日誌,持續追蹤kubectl -n demo logs deployment/web -f
指定副本和容器kubectl -n demo logs web-7c9d8b6f5-x2k4p -c web
前一次執行kubectl -n demo logs web-7c9d8b6f5-x2k4p --previous
事件kubectl -n demo events --for deployment/web
目前用量kubectl -n demo top pod -l app.kubernetes.io/name=web
終端機kubectl -n demo exec -it deployment/web -- sh
開啟除錯終端機kubectl -n demo debug -it web-7c9d8b6f5-x2k4p --image=busybox:1.37.0 --target=web
檔案 的下載kubectl -n demo cp web-7c9d8b6f5-x2k4p:/data/report.csv ./report.csv

kubectl events --for 列出這個 Deployment 本身的事件。副本的事件要用 kubectl -n demo events --for pod/<副本名稱>,或 kubectl -n demo get events --sort-by=.lastTimestamp 看整個專案。

讓另一個人能開終端機和用 檔案 分頁,套用和畫面上一樣的 Role 和 RoleBinding:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: zeabur-terminal
namespace: demo
rules:
- apiGroups: [""]
resources: ["pods"]
verbs: ["get"]
- apiGroups: [""]
resources: ["pods/exec"]
verbs: ["get", "create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: zeabur-terminal-alice-example.com
namespace: demo
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: zeabur-terminal
subjects:
- kind: User
apiGroup: rbac.authorization.k8s.io
name: "alice@example.com"

subjects 的 name 填這個人在 Kubernetes 的使用者名稱。

日誌 顯示副本的輸出,持續追蹤 開著時新的行會一直出現。終端機連上時,標籤顯示 已連線,除錯容器顯示 已連線到除錯容器。

kubectl -n demo get pod -l app.kubernetes.io/name=web -o jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.spec.ephemeralContainers[*].name}{"\n"}{end}'
kubectl -n zeabur-terminals get pods
kubectl auth can-i create pods/exec -n demo --as=alice@example.com

第一行列出每個副本和裡面的除錯容器,開過除錯終端機的副本會出現 zeabur-debug- 開頭的名稱。第二行列出目前的 kubectl 終端機,名稱是 zeabur-tools- 開頭,只有管理員看得到。第三行回 yes 表示這個人能開終端機。

畫面或結果接著處理
沒有執行中的副本服務的副本數是 0,或副本還沒啟動。到 概覽 看原因。
沒有前一次執行:容器還沒有重新啟動過。容器沒崩潰過,改看這次執行的日誌。
還沒有開啟日誌歷史紀錄請管理員在 Helm chart 開啟 proxy.enabled。
即時用量需要 metrics-server。按 安裝,或請管理員安裝 metrics-server。
15 分鐘沒有輸入或輸出,已關閉。按 重新連線。
終端機沒有回應,寫著要權限把畫面上的 Role 和 RoleBinding 交給管理員套用。
這個映像檔沒有 tar。按 加入除錯容器,從除錯容器讀取磁碟區。
除錯容器一直留在副本裡Kubernetes 無法移除它。重新啟動服務,換上新的副本。