关于k8s:Kubernetes引入结构化日志

8次阅读

共计 1415 个字符,预计需要花费 4 分钟才能阅读完成。

作者: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 微信公众号。

正文完
 0