Kubernetes にデプロイした複数 Pod のログをまとめて見られる「k8stail」が大変便利だった

Kubernetes を使い始めて困ったのが、動作中の Pod (コンテナ) の動作をリアルタイムで確認する方法。

Pod 内のプロセスが標準出力に出力する情報は、kubectl logs コマンドで一応見られる。しかしこのコマンド、基本は Pod 単位でログを見る前提の作りで、$ kubectl get pod コマンドで Pod 名を調べて、それを引数に与えてやらないといけない。

$ kubectl get pod
NAME                                        READY   STATUS    RESTARTS   AGE
my-pod-deployment-5cd8cc5766-8hkkp   1/1     Running   0          2h
my-pod-deployment-5cd8cc5766-kvf5p   1/1     Running   0          2h
my-pod-deployment-5cd8cc5766-t9lnz   1/1     Running   0          2h

# 1件目の Pod のログだけ表示
$ kubectl logs my-pod-deployment-5cd8cc5766-8hkkp

しかしコレだと、ReplicaSet による冗長構成を取っている場合が厄介。直前のリクエストをどの Pod で受け取ったのかが分からないためだ。

他に Label での指定もできるが、コレも「Pod ごとのログ」を順に並べて表示するので、分かりづらい。表示されるデフォルトの行数も短いので、--tail オプションの指定も必要だ。

$ kubectl logs -lapp=my-app --tail=500

コレでも結局 tail -f のようには閲覧できず、かなりしんどい。


…というしんどみを愚痴ったところで紹介するのが、k8stail というツールだ。Mac 用なら Homebrew からインストールできる他、Windows・Linux 版もある。

# Homebrew でのインストール
$ brew tap dtan4/dtan4
$ brew install k8stail

インストールしたら、$ k8stail を叩くだけ。引数を指定しない場合、デフォルトのネームスペースにある Pod たちを特定し、標準出力を監視・出力してくれる。

複数の Pod を冗長構成で立ち上げている場合も、時系列で良い感じにリアルタイム出力されるので、連続したリクエストに対する動作ログを確認する時なんかがとても楽。

kubeconfig ファイルの差し替えは、環境変数 KUBECONFIG での指定でも、オプション引数での指定でも対応できるのが素敵。

とっても使いやすいのでオススメ。