はじめに
Deploymentを単純にサービスに紐づけている場合はどのPodに通信が流れるかは判断できないため、ログ調査をする場合は各Podを選定しながら
$ kubectl logs PODNAME
にてログを標準出力に出して確認しますがこれは時に面倒です。
そんな時に重宝するツール「stern」を紹介します。
環境情報
- Windows 10
- Cygwin
- stern version 1.11.0
インストールとコマンド確認
Stern allows you to tail multiple pods on Kubernetes and multiple containers within the pod. Each result is color coded for quicker debugging.
という説明書きがある同ツールを
上記リンクからexe形式ダウンロードし、パスを通します。
$ mv /cygdrive/c/Users/xx/Downloads/stern_windows_amd64.exe /usr/local/bin/stern.exe $ which stern /usr/local/bin/stern $ stern --version stern version 1.11.0
尚、コードの実体はGo言語で、ソースも公開されています。
Deploymentのログを表示する
以下のようにデプロイメントに紐づくNginxのPodがあるとして
$ kubectl get deployment nginx-test -n test NAME READY UP-TO-DATE AVAILABLE AGE nginx-test 2/2 2 2 ...
Pod名は以下とします。
$ kubectl get pod -n test NAME READY STATUS RESTARTS AGE nginx-test-65665c899c-mkrhk 1/1 Running 0 ... nginx-test-65665c899c-vxdg7 1/1 Running 0 ...
ここで以下のようにアスタリスクを利用した正規表現で検索をかけると
$ stern nginx-test-65665c899c-* -n test
該当する2つのPodが"app"に指定した文字列月で表示されて
nginx-test-65665c899c-vxdg7 web 10.X.X.X - - [...+0900] "GET /favicon.ico HTTP/1.1" 404 209 "..." "Mozilla/5.0 (Windows NT 1 0.0; Win64; x64) ... 0.002 nginx-test-65665c899c-mkrhk web 10.Y.Y.Y - - [..+0900] "GET / HTTP/1.1" 200 112 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... 0.014
アクセスを発生させると両者のログが入り乱れながら表示されていきます。
終わりに
オプションにて--exclude-container
を利用するとPod内の特定名のコンテナのログは表示されない、など気の利いた制御ができるのでかなり便利です。
Kubernetesのログ調査を定期的にする方はインストールしておくことをオススメします。以上です。