stern: 複数 Pod のログをまとめて tail し、--include / --exclude で行を絞る
kubectl logs は 1 Pod ずつだが、stern は正規表現や deployment/<name> で選んだ Pod・コンテナのログを色分けして同時に流せる。行を正規表現で絞る --include(-i)と --exclude(-e)を足すと、| grep よりも手早くエラーだけを追える。
どんなときに使う?
- レプリカが複数ある Deployment のどの Pod にリクエストが行ったか分からない
- サイドカー込みの Pod で、アプリのコンテナのエラー行だけを見たい
- ヘルスチェックのアクセスログがうるさくて本題が埋もれる
よく使う形
bash
# Deployment 配下の全 Pod をまとめて(Pod 名は正規表現でも可: stern 'web-\w')
stern deployment/api -n prod
# エラーっぽい行だけ(複数指定は OR)
stern deployment/api -n prod -i 'ERROR' -i 'panic'
# ヘルスチェックを除く
stern deployment/api -n prod -e 'GET /healthz'
# コンテナを絞る / サイドカーを外す
stern deployment/api -c app
stern deployment/api -E 'istio-proxy|envoy'
# ラベルで選ぶ・全 namespace
stern -l app=api -A
# 直近 15 分だけ、各 Pod の末尾 50 行から
stern deployment/api --since 15m --tail 50
# 消さずに目立たせる
stern deployment/api -H 'timeout'
# 流しっぱなしにせず、出したら終わる(調査メモに貼るとき)
stern deployment/api --since 10m --no-follow --only-log-lines-o json/-o rawで出力形式を変えられる。JSON ログなら-o raw | jqが楽--container-state runningで、終了済みコンテナを除いて今動いているものだけ--node <ノード名>で特定ノードの Pod だけ(Disk Pressure など、ノード起因の調査で便利)- よく使う既定値は
~/.config/stern/config.yamlに書ける(例:tail: 10、timestamps: short)
注意
- 既定の
--sinceは48h、--tailは-1(全部)なので、大量に出る Pod では--tailを付けたほうが速い - 同時に開くログ接続の上限
--max-log-requestsは既定 50(--no-followのときは 5)。Pod が多いとここに当たる -i/-eは Go の正規表現。stern 側で絞るだけなので、kubelet から転送される量は変わらない
Pod が退避されてログ自体が消えるケースは Kubernetes の Disk Pressure Eviction: どの領域が埋まり、何が回収され、どの Pod が退避されるか を参照。
出典
- @ftnext · 2026-10-19
- stern README(CLI フラグ一覧): github.com/stern/stern