使用 kubectl 为特定短语 grep 多个 pod/service 日志

Using kubectl to grep multiple pod/service logs for a specific phrase

我有一堆服务部署到 Kubernetes 集群(各种 pods 和服务都在网关后面进行负载平衡)。我正在对其中之一进行 REST 调用并收到意外错误,但问题是我实际上不确定 which pod/service 实际上抛出错误。我想检查每个 pod/service.

的所有日志

当我 运行 kubectl get namespace 我得到:

NAME               STATUS     AGE
another-app        Active     22d
myapp              Active     22d
myapp-database     Active     22d
default            Active     22d
kube-public        Active     22d
kube-system        Active     22d
zanzabar           Active     22d

是否有 kubectl log 命令可以扫描整个集群的日志并在其中搜索特定的错误消息?例如,假设我从 REST (curl) 返回的错误消息是“抱歉,马里奥,你的公主在另一座城堡里”。有什么方法可以使用 kubectl log 扫描该短语的所有 pod/service 日志并将结果显示给我吗?如果没有,那么 best/easiest 的方法是什么 使用 kubectl 找到带有错误消息的 pod/service(希望我的错误背后有更多详细信息) ?

您可以获取特定 pod 或容器的日志(对容器使用 -c 标志)并通过使用 grep 命令对日志命令进行流水线化来获取错误日志。

例如,如果我想获取名为 my-pod 的 pod 的日志,并想 grep“存在错误”这个词,那么命令如下:

kubectl logs my-pod | grep “error exist” 

有关 grep 用法的更多信息,请参阅此 document for multiple ways of fetching logs and this