Kubernetes Pod Logs 入門:kubectl で複数 Pod のログを素早く確認する方法
Kubernetes Pod Logs 入門:kubectl で複数 Pod のログを素早く確認する方法. Practical notes and implementation steps.
Kubernetes Pod Logs 入門:kubectl で複数 Pod のログを素早く確認する方法
Kubernetes でデバッグするとき、Pod logs の確認は最もよく行う作業の 1 つです。サービスに複数 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 の Logs を確認する
Pod 内に複数 container がある場合:
1
kubectl logs -n {namespace} {podname} -c {container-name}
直前に Crash した Container の Logs を確認する
Pod が CrashLoopBackOff のときに有効です:
1
kubectl logs -n {namespace} {podname} --previous
2. 複数 Pod の Logs を一度に確認する
Deployment に複数 replicas がある場合、kubectl get pods と xargs または shell loop を組み合わせます。
方法1: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
方法2: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 の Pod だけを対象にする
実務では 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
これで各ログがどの 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でリアルタイム追跡kubectl get pods + xargsで複数 Pod を一括確認- label selector で特定 Deployment に絞る
この投稿は投稿者によって CC BY 4.0 の下でライセンスされています。