如何在Kubernetes中使日志消息静音?

时间:2019-01-03 14:51:42

标签: kubernetes

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

函数定义如下:

def ping():
    return jsonify({'status': 'pong'})

如何使特定呼叫静音以免出现在日志中?有什么办法可以将它放在运行状况检查功能之上的代码中,例如python装饰器中?还是在Kubernetes控制台中有一个选项可以配置为忽略此调用?

3 个答案:

答案 0 :(得分:4)

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

一旦输出不在Pod的stdoutstderr中,pod日志将不会包含来自特殊health-check的日志

您也可以使用sidecar容器简化应用程序日志,例如,如果您不希望kubectl logs输出中的所有应用程序日志。您可以写那些文件。

如kubernetes的官方文档所述:

  

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

这种方法使您可以将几个日志流与应用程序的不同部分分开,其中某些日志流可能缺少对写入stdout或stderr的支持。重定向日志的逻辑很小,因此开销不大。

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

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

答案 1 :(得分:0)

<块引用>

当我通过日志控制台查看 Kubernetes 日志时,它会变得混乱。

既然您说的是“查看”,我知道这可能不是最准确的方法,但可以正常工作:

kubectl logs [pod] [options] | awk '!/some health-check pattern|or another annoying pattern to exclude|another pattern you dont want to see|and so on/ {print $0}'

使用awk来过滤日志,如果你不知道,你可以阅读它here

  • !:表示排除以下模式
  • /pattern/:在 // 之间包含您的模式(标准 awk 语法)
  • {print $0}:表示打印当前行(您也可以只使用 print

注意:总是存在排除某些必要内容的风险。明智地使用。

答案 2 :(得分:-1)

只需在应用程序中反转逻辑登录失败,修改代码或使用自定义装饰器换行