如何在Kubernetes中保持日志消息?

Wil*_*oss 6 kubernetes

我有一个在Kubernetes中运行的python应用程序.该应用程序具有ping运行状况检查,该检查通过REST调用频繁调用,并检查该调用是否返回HTTP 200.当我通过日志控制台查看时,这会使Kubernetes日志变得混乱.

函数定义如下所示:

def ping():
    return jsonify({'status': 'pong'})
Run Code Online (Sandbox Code Playgroud)

如何使特定呼叫无法显示在日志中?有没有办法把它放在健康检查功能之上的代码中,比如python decorator?或者在Kubernetes控制台中有一个选项可以配置为忽略此调用吗?

Pra*_*dha 5

在 kubernetes 中,您拥有stdoutstderr将进入 kubernetes 日志的容器中的所有内容。health-check从 kubernetes 日志中排除ping call remove日志的唯一方法是,在您的应用程序中,您应该将这些 ping 调用的输出重定向到 say 中的某个文件/var/log/。这将有效地health-checkstdout.

一旦输出不在pod中stdout或不在stderrpod 中,pod 日志将不会包含来自该特殊区域的日志health-check

您还可以使用 sidecar 容器来简化您的应用程序日志,就像您不希望应用程序的所有日志都在kubectl logs输出中一样。你可以写那些文件。

正如 kubernetes 的官方文档中所述:

通过让您的 sidecar 容器流式传输到它们自己的 stdout 和 stderr 流,您可以利用已经在每个节点上运行的 kubelet 和日志代理。Sidecar 容器从文件、套接字或日志中读取日志。每个单独的 sidecar 容器将日志打印到自己的 stdout 或 stderr 流。

这种方法允许您将多个日志流与应用程序的不同部分分开,其中一些可能缺乏对写入 stdout 或 stderr 的支持。重定向日志背后的逻辑是最小的,因此它几乎不是一个显着的开销。

有关 Kubernetes 日志记录的更多信息,请参阅官方文档:

https://kubernetes.io/docs/concepts/cluster-administration/logging/


小智 -1

只需反转应用程序中失败的逻辑日志,修改代码或使用自定义装饰器包装