【Kubernetes】sternで複数コンテナの複数Podのログをまとめて確認する
はじめに
Sternを使って複数コンテナで複数Podのログをまとめて確認してみたいと思います。
Sternとは
Starnとは、複数コンテナを持つPodや複数Podのログをまとめてtailコマンドのように確認できるツールです。
GitHub - stern/stern: ⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern
⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern - stern/stern
オリジナルのリポジトリは下記のようですが、issueにあるように、上記のリポジトリが現在はメンテされているみたいです。
unknown linkインストール
Macの場合、下記でインストール可能です。
1brew install stern
GitHub - stern/stern: ⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern
⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern - stern/stern
簡単な使い方
基本的な使い方は下記の通りです。
1stern [pod query] [flags]
[pod query]
では、正規表現でPodの指定ができます。正規表現なしで指定すると、ある程度同じ名前のPodが指定されます。
例えば下記のように指定すると、web-111
、web-222
、web-333
、web-backend
などのPodのログが同時に確認できます。
1stern web
一方、正規表現で下記のように指定すると、web-backend
などと正規表現とマッチしたPodだけのログが確認できます。
1stern "backend-\w"
-t
でタイプスタンプ付きで出力することなどもできます。
GitHub - stern/stern: ⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern
⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern - stern/stern
実際に試してみる
実際にDeploymentを作成して、Podのログをまとめて確認してみます。
作成するDeploymentのマニフェストdeployment.yml
は下記の通りです。Podを5つ起動して、それぞれのPodには2つのコンテナが含まれています。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: stern-test
5 labels:
6 app: stern-test
7spec:
8 replicas: 5
9 selector:
10 matchLabels:
11 app: stern-test
12 template:
13 metadata:
14 labels:
15 app: stern-test
16 spec:
17 containers:
18 - name: busybox-1
19 image: busybox
20 command: ["/bin/sh", "-c"]
21 args:
22 - |
23 while true
24 do
25 echo "busybox-1: $(hostname)"
26 sleep 20
27 done
28 - name: busybox-2
29 image: busybox
30 command: ["/bin/sh", "-c"]
31 args:
32 - |
33 while true
34 do
35 echo "busybox-2: $(hostname)"
36 sleep 20
37 done
Deploymentを作成します。
1kubectl apply -f deployment.yml
5つのPodが起動しました。それぞれのPod名はstern-test-xxxxxxxx-yyyyy
となっています。
1❯ kubectl get pod | grep stern-test
2stern-test-b9486b67d-fwmkt 2/2 Running 0 25s
3stern-test-b9486b67d-mhc6z 2/2 Running 0 25s
4stern-test-b9486b67d-s7hs9 2/2 Running 0 25s
5stern-test-b9486b67d-vffpz 2/2 Running 0 25s
6stern-test-b9486b67d-xp9ch 2/2 Running 0 25s
stern stern-test
でログを確認するとPodごとに色分けされたログをまとめて確認できています。また、Podのどのコンテナからのログかもわかるようになっています。
参考
- stern/stern: ⎈ Multi pod and container log tailing for Kubernetes -- Friendly fork of https://github.com/wercker/stern
- wercker/stern: ⎈ Multi pod and container log tailing for Kubernetes
- tomhuang12/awesome-k8s-resources: A curated list of awesome Kubernetes tools and resources.