Kubernetes Pod Logs 教學:快速查看多個 Pod Logs(kubectl 實戰)
Kubernetes Pod Logs 教學:快速查看多個 Pod Logs(kubectl 實戰). Practical notes and implementation steps.
Kubernetes Pod Logs 教學:快速查看多個 Pod Logs(kubectl 實戰)
在 Kubernetes 除錯時,查看 Pod logs 是最常做的事情之一。如果服務有多個 Pod(例如 Deployment 產生的 replicas),有時會需要一次查看多個 Pod 的 logs。
這篇整理幾個常用的 kubectl logs 使用方式。
1. 基本用法
查看單一 Pod 的 Logs
最基本的指令:
1
kubectl logs -n {namespace} {podname} --tail=100
例如:
1
kubectl logs -n prod api-server-7c8f6d9d8f-abcde --tail=100
持續追蹤 Logs
1
kubectl logs -n {namespace} {podname} -f
查看多 Container Pod
如果 Pod 裡有多個 container:
1
kubectl logs -n {namespace} {podname} -c {container-name}
查看上一個 Crash 的 Container
當 Pod 出現 CrashLoopBackOff 時很有用:
1
kubectl logs -n {namespace} {podname} --previous
2. 一次查看多個 Pod Logs
如果 Deployment 有多個 replicas,可以透過 kubectl get pods 搭配 xargs 或 shell loop。
方法一:使用 xargs
1
2
kubectl get pods -n {namespace} -o name \
| xargs -I {} kubectl logs -n {namespace} {} --tail=100
- 流程:
- 先列出所有 Pod
- 逐一執行
kubectl logs
- 輸出類似:
1
2
3
pod/api-123
pod/api-456
pod/api-789
方法二:使用 Shell Loop
有些人會覺得這種方式比較好閱讀:
1
2
3
for p in $(kubectl get pods -n {namespace} -o name); do
kubectl logs -n {namespace} $p --tail=100
done
3. 只抓某個 Deployment 的 Pods
實務上通常只會看某個服務,而不是整個 namespace。
最常見的方法是使用 label selector。
1
2
kubectl get pods -n {namespace} -l app={deployment-name} -o name \
| xargs -I {} kubectl logs -n {namespace} {} --tail=100
前提是 Deployment 使用類似以下 label:
1
app=my-service
4. 在 Logs 中標示 Pod Name
當多個 Pod logs 混在一起時,建議加上 Pod 標示:
1
2
kubectl get pods -n {namespace} -l app={deployment-name} -o name \
| xargs -I {} sh -c 'echo "===== {} ====="; kubectl logs -n {namespace} {} --tail=100'
輸出會變成:
1
2
3
4
5
6
7
===== pod/api-7c8f6d9d8f-abcde =====
log line 1
log line 2
===== pod/api-7c8f6d9d8f-fghij =====
log line 1
log line 2
這樣可以清楚知道每段 log 來自哪個 Pod。
5. 同時追蹤多個 Pod Logs
如果需要即時追蹤:
1
2
kubectl get pods -n {namespace} -l app={deployment-name} -o name \
| xargs -I {} sh -c 'kubectl logs -n {namespace} -f {} | sed "s/^/[{}] /"'
輸出會像:
1
2
[pod/api-xxx] server started
[pod/api-yyy] connection opened
6. 查看 Deployment 使用的 Labels
如果不確定 Deployment 的 label,可以先查:
1
kubectl get deploy {deployment-name} -n {namespace} --show-labels
或:
1
kubectl get pods -n {namespace} --show-labels
找到對應的 label selector 後,再套用到 kubectl get pods -l。
7. 小結
常見的 Kubernetes logs 使用方式:
- 查看單一 Pod logs
- 使用
--tail限制輸出行數 - 使用
-f即時追蹤 logs - 透過
kubectl get pods + xargs一次查看多個 Pods - 使用 label selector 限縮到某個 Deployment
本文章以 CC BY 4.0 授權