如何解决来自 kubernetes 多个 pod 的特定文本的 Grep
我有两个 Pod 为特定服务运行。我想获取与两个 Pod 相关的日志并检查特定文本。
为此我使用了,如here所述:
kubectl logs -l app=my-app -c my-app-container --since=25m | grep -i "search-text" |wc -l
这不会输出任何内容,即使有 search-text
的匹配文本
然后尝试使用 deployments
kubectl logs deployment/my-app-deployment -c my-app-container --since=90m | grep -i "search-text" |wc -l
如何在所有相关 Pod 中搜索此特定字符串?
kubectl logs my-pod-1 -c my-app-container --since=90m | grep -i "search-text" |wc -l
,这给出了正确的计数。
参考资料:
Get all Logs from a specific container in a replica set
how to get logs of deployment from kubernetes
解决方法
kubectl logs
仅限于一次查看单个 Pod 的日志。但是,您可以使用 -l
标志来使用选择器(标签查询)进行过滤。例如:
kubectl logs -l app=nginx -l app=php
如果您需要查看容器日志,请使用 -c
标志。可以在 here 中找到更多受支持的标志和示例。
当您能够看到来自所需 Pod/容器的日志时,就可以使用 grep
过滤掉输出。例如,我从 Pod 中获取了一些日志:
~$ kubectl logs nginx-app-b8b875889-4nn52
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty,will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
我只想看到带有“配置”一词的行,所以我执行:
$ kubectl logs nginx-app-b8b875889-4nn52 | grep configuration
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty,will attempt to perform configuration
或者如果我想计算带有“信息”一词的行:
$ kubectl logs nginx-app-b8b875889-4nn52 | grep info |wc -l
2
可以在 grep manual 中找到更多详细信息。请记住,如果您没有指定 --since=
或 --tail=
之类的参数,并且您尝试查看日志的 Pod 运行了更长的时间,结果可能会产生误导。
通常,我还建议使用 Stern 或 Kubetail 等第三方工具,它们比简单的 kubectl logs
更强大,但在您的用例中将两者结合使用:
kubectl logs -l
和:
| grep
是要走的路。
编辑:
还要确保您从正确的资源中获取信息。从您的问题来看,您似乎运行 kubectl logs deployment/my-app-deployment
而不是 kubectl logs my-pod-1 -c my-app-container
这与 my-app-deployment
部署不对应。列出所有部署、pod 和标签,以确保您检查了正确的资源。使用:
kubectl get deploy,pods --show-labels
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。