Docker for MacにKubernetesが載ったということで、今回は複数のPodのログをまとめて参照できるsternを紹介。(前々から書こうとは思ってたんだけど、機会を逸していたんだよね)
導入
MacならHomebrewからインストールできる。
$ brew install stern
サンプルの用意
実際の使い方の前に以下のようなサンプルを用意してみる。KuberneteへのPodの展開は現在ではDeploymentを用いることが推奨されているので、ひたすらログ出力する2つのコンテナによって構成されたPodを3つデプロイしてみる。
# deployment.yaml apiVersion: apps/v1beta1 kind: Deployment metadata: name: sample spec: replicas: 3 template: metadata: labels: app: sample spec: containers: - name: sample-a image: busybox command: - sh - -c - while true; do echo $(hostname):a; sleep 10; done - name: sample-b image: busybox command: - sh - -c - while true; do echo $(hostname):b; sleep 10; done
$ kubectl create -f deployment.yml deployment "sample" created $ kubectl get all NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/sample 3 3 3 0 7s NAME DESIRED CURRENT READY AGE rs/sample-7546bcdb67 3 3 0 7s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deploy/sample 3 3 3 0 7s NAME DESIRED CURRENT READY AGE rs/sample-7546bcdb67 3 3 0 7s NAME READY STATUS RESTARTS AGE po/sample-7546bcdb67-ndvln 0/2 ContainerCreating 0 7s po/sample-7546bcdb67-vj5fh 0/2 ContainerCreating 0 7s po/sample-7546bcdb67-zzv4f 0/2 ContainerCreating 0 7s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d
コンテナのログを確認するには?
さて、ここからデプロイされたコンテナのログを見ようとした場合、 特定のPOD内のコンテナであればkubectl logs -f [POD] -c [CONTAINER]
によってさながらtail -f
のようにログ監視をすることができる。
$ kubectl logs -f po/sample-7546bcdb67-ndvln -c sample-a sample-7546bcdb67-ndvln:a sample-7546bcdb67-ndvln:a sample-7546bcdb67-ndvln:a
この方法の場合はdeploymentによって作られたPODの名前は変わってしまうので毎度確認しないといけないのがちょい面倒。
また、kubectl logs -l[METADATA] -c [CONTAINER]
によって特定のメタデータを持ったPODの特定のコンテナについて横断的にログを参照することができる。
$ kubectl logs -lapp=sample -c sample-a sample-7546bcdb67-ndvln:a sample-7546bcdb67-vj5fh:a sample-7546bcdb67-zzv4f:a
ただし、これは上から順に参照したログを繋げただけのものなので時系列が整わないのに注意。
kubectl logs
コマンドではdocker-compose logs
のようなノリで複数のコンテナを同時に参照することはできないし、-l
オプションと-f
オプションを併用することもできないのが開発時に不便だったりする。
sternの使い方
そんなわけで本題。こんな複数のPOD/コンテナで構成されたシステムのログを横断的に監視したい場合に便利なのが今回のstern。
一番シンプルな使い方として、今回デプロイした全てのPODのログであればstarn [POD_QUERY]
の形で参照できる。
$ stern sam sample-7546bcdb67-vj5fh sample-a sample-7546bcdb67-vj5fh:a sample-7546bcdb67-vj5fh sample-a sample-7546bcdb67-vj5fh:a sample-7546bcdb67-zzv4f sample-b sample-7546bcdb67-zzv4f:b sample-7546bcdb67-zzv4f sample-a sample-7546bcdb67-zzv4f:a
ちなみにこの時の指定はPOD名は全文である必要は無くてPOD名の一部で良い。つまりもっと複雑なPODによって構成されたシステムなんかで横断的に参照する際にも使える。
また、-l
オプションによるメタデータや、-c
オプションによりコンテナを限定することもできる。
$ stern -lapp=sample -c .*b sample-7546bcdb67-ndvln sample-b sample-7546bcdb67-ndvln:b sample-7546bcdb67-ndvln sample-b sample-7546bcdb67-ndvln:b sample-7546bcdb67-zzv4f sample-b sample-7546bcdb67-zzv4f:b sample-7546bcdb67-zzv4f sample-b sample-7546bcdb67-zzv4f:b
他にも-t
によるタイムスタンプ付加などできる。
こんな感じで、sternを活用することによってDocker Composeのような軽やかさでKubernetes環境での開発を行うことができる。
- 作者: ?橋健一,谷口禎英,井本大登,山崎勝平,大和田純,内村元樹,坂東昌哉,平田敏之,牧大輔,板敷康洋,大?浩崇,穴井宏幸,原口宗悟,久田真寛,ふしはらかん,のざきひろふみ,うらがみ,ひげぽん,池田拓司,はまちや2,竹原,片田雄樹,渋江一晃,WEB+DB PRESS編集部編
- 出版社/メーカー: 技術評論社
- 発売日: 2017/06/24
- メディア: 大型本
- この商品を含むブログを見る