テック技報最新号へ →
インフラ

stern: 複数 Pod のログをまとめて tail し、--include / --exclude で行を絞る

kubectl logs は 1 Pod ずつだが、stern は正規表現や deployment/<name> で選んだ Pod・コンテナのログを色分けして同時に流せる。行を正規表現で絞る --include(-i)と --exclude(-e)を足すと、| grep よりも手早くエラーだけを追える。

@ftnext · 投稿 2026-10-19
#infra#kubernetes#logging#cli#stern

どんなときに使う?

  • レプリカが複数ある 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 が退避されるか を参照。

出典

X の元の投稿を開く