运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。

我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?


当前回答

一种选择是通过Fluentd/ElasticSearch设置集群日志记录,如https://kubernetes.io/docs/user-guide/logging/elasticsearch/所述。一旦日志在ES中,就很容易在Kibana中应用过滤器来查看特定容器中的日志。

其他回答

在前面答案的基础上,如果添加-f,可以跟踪日志。

kubectl logs -f deployment/app

我创建了一个名为kubetail的小bash脚本来实现这一点。例如,跟踪名为“app1”的pod的所有日志,你可以这样做:

kubetail app1

你可以在这里找到脚本。

在本例中,当Pod中定义了多个container时,可以替换<namespace>和<app-name>来获取日志。

kubectl -n <namespace> logs -f deployment/<app-name> \
    --all-containers=true --since=10m

一种选择是通过Fluentd/ElasticSearch设置集群日志记录,如https://kubernetes.io/docs/user-guide/logging/elasticsearch/所述。一旦日志在ES中,就很容易在Kibana中应用过滤器来查看特定容器中的日志。

你可以从kubectl logs -h中得到帮助,根据信息,

kubectl logs -f deployment/myapp -c myapp --tail 100

-c是容器名称,——tail将显示最新的num行,但这将选择部署的一个pod,而不是所有pod。这是你必须记住的。

kubectl logs -l app=myapp -c myapp --tail 100

如果想显示所有pod的日志,可以使用-l并指定一个标签,但同时不使用-f。