我有一个在 Kubernetes 中运行的 python 应用程序。该应用程序有一个 ping 运行状况检查,它会通过 REST 调用频繁调用,并检查该调用是否返回 HTTP 200。当我通过日志控制台查看 Kubernetes 日志时,这会使 Kubernetes 日志变得困惑。
函数定义如下所示:
def ping():
return jsonify({'status': 'pong'})
如何使日志中显示的特定调用静音?有没有办法可以将它放在代码中,例如运行状况检查功能之上的 python 装饰器?或者 Kubernetes 控制台中是否有选项可以配置为忽略此调用?
最佳答案
在 kubernetes 中,您在 stdout
上拥有的容器中的所有内容或 stderr
将进入 kubernetes 日志。排除health-check
日志的唯一方法从 kubernetes 日志中删除 ping 调用是,在您的应用程序中,您应该将这些 ping 调用的输出重定向到某个文件,例如 /var/log/
.这将有效地删除 health-check
的输出来自 stdout
的 ping .
一旦输出不在 stdout
或 stderr
在 pod 中,pod 日志不会包含来自那个特殊的日志 health-check
您还可以使用 sidecar 容器来简化您的应用程序日志,例如如果您不希望所有应用程序日志都在 kubectl logs
中输出。你可以写那些文件。
正如 kubernetes 的官方文档中所述:
By having your sidecar containers stream to their own stdout and stderr streams, you can take advantage of the kubelet and the logging agent that already run on each node. The sidecar containers read logs from a file, a socket, or the journald. Each individual sidecar container prints log to its own stdout or stderr stream.
这种方法允许您将多个日志流与应用程序的不同部分分开,其中一些可能缺乏对写入 stdout 或 stderr 的支持。重定向日志背后的逻辑很小,所以它几乎不是一个显着的开销。
有关 Kubernetes 日志记录的更多信息,请参阅官方文档:
https://kubernetes.io/docs/concepts/cluster-administration/logging/
关于kubernetes - 如何在 Kubernetes 中使日志消息静音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54024663/