作者:Marek Siarkowicz(谷歌)、Nathan Beach(谷歌)
日志是可察看性的一个根本方面,也是调试的一个要害工具。然而Kubernetes日志传统上是非结构化字符串,这使得任何主动解析都很艰难,任何上游解决、剖析或查问都很难牢靠地实现。
在Kubernetes 1.19中,咱们减少了对结构化日志的反对,它原生反对(键、值)对和对象援用。咱们还更新了许多日志调用,这样在一个典型的部署中超过99%的日志量当初都迁徙到了结构化格局。
为了放弃向后兼容性,结构化日志仍将输入为字符串,其中字符串蕴含“key”=“value”对的示意。从1.19的alpha开始,日志也能够应用--logging-format=json标记以JSON格局输入。
应用结构化日志
咱们向klog库增加了两个新办法:InfoS和ErrorS。例如,以下信息的调用:
klog.InfoS("Pod status updated", "pod", klog.KObj(pod), "status", status)
将导致以下日志:
I1025 00:15:15.525108 1 controller_utils.go:116] "Pod status updated" pod="kube-system/kubedns" status="ready"
或者,如果设置了--logging-format=json标记,则会产生如下输入:
{ "ts": 1580306777.04728, "msg": "Pod status updated", "pod": { "name": "coredns", "namespace": "kube-system" }, "status": "ready"}
这意味着上游的日志工具能够很容易地获取结构化日志数据,而不是应用正则表达式(regex)来解析非结构化字符串。这也使得解决日志更容易,查问日志更强壮,剖析日志更快。
应用结构化日志,对Kubernetes对象的所有援用都以雷同的形式进行结构化,因而你能够过滤援用特定pod的输入和日志条目。你还能够找到一些日志,这些日志批示调度器如何调度pod、如何创立pod、pod的运行状况探测以及pod生命周期中的所有其余更改。
假如你正在用pod调试一个问题。应用结构化日志,你能够筛选到仅援用感兴趣的pod的那些日志条目,而不须要扫描可能数以千计的日志行来查找相干的日志。
结构化日志不仅在手动调试问题时更有用,而且还反对更丰盛的个性,如日志中的主动模式识别或日志和跟踪数据的更严密的相关性。
最初,结构化日志能够帮忙升高日志的存储老本,因为大多数存储系统压缩结构化的key=value数据比压缩非结构化的字符串更无效。
来参加
尽管在一个典型的部署中,咱们曾经按日志量更新了超过99%的日志条目,但依然有数千个日志须要更新。抉择一个你想要改良的文件或目录,并将现有的日志调用迁徙到应用结构化日志。这是对Kubernetes做出第一份奉献的一种平凡而简略的形式!
点击浏览网站原文。
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培养和保护一个厂商中立的开源生态系统,来推广云原生技术。咱们通过将最前沿的模式民主化,让这些翻新为公众所用。扫描二维码关注CNCF微信公众号。