如何在不打开两个终端并使用 kubectl tail 命令的情况下获取两个 pod 的日志?

Doc*_*hty 4 logging kubernetes

我是 kubernetes 新手,想同时跟踪两个 pod 的日志。但要做到这一点,我必须打开两个终端并使用以下命令

kubectl logs -f <POD_NAME> -n namespace
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更好的方法来获取日志而不打开多个终端,因为如果 Pod 数量增加,这会产生严重的问题。

我不是在寻找某种日志记录工具,而是在寻找一些易于设置的方法来帮助我实现这一目标。

提前致谢。

aci*_*uji 7

正如前面已经解释的,如果 Pod 共享标签,您可以使用标签。如果一个 Pod 中有多个容器,可以使用以下命令:

kubectl logs -n <namespace> -f deployment/<app-name>
--all-containers=true
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找一些简单的工具,您有几个选择:

Stern 允许您跟踪 Kubernetes 上的多个 Pod 以及 Pod 内的多个容器。每个结果都采用颜色编码,以便更快地进行调试。查询是正则表达式,因此可以轻松过滤 Pod 名称,并且不需要指定确切的 id(例如省略部署 id)。如果一个 pod 被删除,它就会从 tail 中删除,如果添加一个新的 pod,它会自动被跟踪。

使用这样的简单命令:

stern -n <namespace> <app-name> -t --since 30m
Run Code Online (Sandbox Code Playgroud)

Stern 将从过去 30 分钟以来该应用程序名称的给定命名空间中跟踪日志。

它是一个 bash 脚本,可让您将多个 pod 中的日志聚合(尾部/跟踪)到一个流中。这与运行“kubectl log -f”相同,但适用于多个 Pod。

从所有匹配 Pod 的所有容器中传输日志。按服务、副本集、部署等匹配 pod。调整以适应不断变化的集群 - 当 Pod 落入或退出选择时,它们会被添加到日志记录中或从日志中删除。

这是 Kubernetes Pod 的 tail -f 体验


小智 5

他们有相同的标签吗?如果是,那么您可以使用kubectl logs自身来过滤它们。例如:

kubectl logs -n <namespace> -l <label-key>=<label-value>
Run Code Online (Sandbox Code Playgroud)