作为分布式异步声明式 API,与传统的基于 RPC 的服务相比,Kubernetes 的可解释性较低,因为事件之间没有明确的因果关系;一个对象的变化会间接影响其他对象的变化,过去在 Kubernetes 中进行可观测的尝试要么仅限于单个组件,要么过度侵入单个组件。
于是诞生了kelemetry项目,用于对Kubernetes进行全局的观测监控。
kelemetry以对象操作为监控粒度,区别于传统的以请求操作链路为粒度。因为kelemetry以对象操作为粒度进行span的链接,但是对象的一个操作行为涉及到很多分离的事件操作,因此,kelemetry的可观测数据来源当前主要是两个部分:
kelemetry有一个聚合器接受来自数据源的“事件”,其中事件与 K8S 对象关联。递归地调用“链接器”以确定关联对象的“父”对象,从而将跨度放置在与同一祖先对象下的其他事件相同的跟踪下
最后会聚合所有跨度链接,并将它们发送到可观测server中。
https://github.com/kubewharf/kelemetry/blob/main/docs/DEV.md