运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
当前回答
我创建了一个名为kubetail的小bash脚本来实现这一点。例如,跟踪名为“app1”的pod的所有日志,你可以这样做:
kubetail app1
你可以在这里找到脚本。
其他回答
以前提供的解决方案并不是最优的。kubernetes团队自己在一段时间前提供了一个解决方案,称为stern。
stern app1
它还匹配正则表达式,默认情况下执行tail和-f (follow)。一个很好的好处是,它显示了生成日志的pod。
app1-12381266dad-3233c foobar log
app1-99348234asd-959cc foobar log2
抓取go-binary for linux或通过brew for OSX安装。
https://kubernetes.io/blog/2016/10/tail-kubernetes-with-stern/
https://github.com/wercker/stern
@johan的回答让我想到了一句话:
for i in $(kubectl get pods -n default |cut -d" " -f1); do kubectl logs $i -n default; done
在本例中,当Pod中定义了多个container时,可以替换<namespace>和<app-name>来获取日志。
kubectl -n <namespace> logs -f deployment/<app-name> \
--all-containers=true --since=10m
您也可以通过服务名称来完成此操作。
首先,尝试找到对应于相同服务的多个pod的各自pod的服务名称。库贝特尔得到svc。
接下来,运行以下命令显示每个容器的日志。
kubectl logs -f service/<service-name>
我们刚刚推出了一个Kubernetes本地日志工具,可以从所有的pod(你指定的)收集日志,并将日志发送到一个集中的位置。
我希望它能帮助任何人登陆这个页面:https://github.com/parseablehq/collector