运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
运行kubectl日志可以看到一个Kubernetes容器的stderr/stdout。
我如何获得一组pod的聚合stderr/stdout,最好是由某个复制控制器创建的那些?
当前回答
你可以使用标签
kubectl logs -l app=elasticsearch
你可能想要指定——all-containers——ignore-errors,以便:
包括来自多个容器的吊舱的日志 在致命错误(例如,无法检索日志)时继续到下一个pod
其他回答
一种选择是通过Fluentd/ElasticSearch设置集群日志记录,如https://kubernetes.io/docs/user-guide/logging/elasticsearch/所述。一旦日志在ES中,就很容易在Kibana中应用过滤器来查看特定容器中的日志。
对我有用:
Kubectl logs -n namespace -l app=label -c container
你可以像Adrian Ng建议的那样,使用标签从多个容器中获取日志:
kubectl logs --selector app=yourappname
但是如果你有一个包含多个容器的pod,上面的命令将会失败,你需要指定容器名称:
kubectl logs --selector app=yourappname --container yourcontainername
注意:如果你想查看哪些标签是可用的,下面的命令将列出所有标签:
kubectl get pod <one of your pods> -o template --template='{{.metadata.labels}}'
...输出会是这样的
映射[app:yourappname controller-revision-hash:598302898 pod-template-generation:1]
请注意,有些标签可能不会被其他pod共享——选择“app”似乎是最简单的一个
在本例中,当Pod中定义了多个container时,可以替换<namespace>和<app-name>来获取日志。
kubectl -n <namespace> logs -f deployment/<app-name> \
--all-containers=true --since=10m
我们刚刚推出了一个Kubernetes本地日志工具,可以从所有的pod(你指定的)收集日志,并将日志发送到一个集中的位置。
我希望它能帮助任何人登陆这个页面:https://github.com/parseablehq/collector