Kindling 是一个基于 eBPF 的云原生可观测性开源工具,旨在帮助用户理解应用从内核层到代码层的行为,以便用户更好更快的排查故障。
目前,它提供了一种简单的方式来获取kubernetes环境中的网络流视图,还提供了许多内置的网络监控概览信息:比如重传、DNS、吞吐量、TPS等。
Kindling 不仅仅是一个网络监控工具,它还试图分析一条RPC(远程过程调用)的详细内容并且可以得到一些信息,这些信息可以在chrome上的”network explore”中看到。它的使用方法和chrome中的“network explore”相同,在生产环境中,用户可以通过它来判断应该深入剖析哪个部分去寻找问题的根本原因。
架构
从高级视图来看,代理在 Kuberntes 中作为 DeamonSet 运行。它收集所有 SYSCALL 和其他一些跟踪点。开发团队为不同的分布使用不同的 exporters。对于轻量级版本,只是构建了一个 Prometheus 导出器来导出可以存储到 Prometheus 中并显示在 Grafana 插件中的数据。标准版是为重度使用而设计的,使用Kafka来缓冲事件,数据存储到ElasticSearch中,可以显示更详细的信息。目前,轻量版已经开源。
Linux 内核版本支持
Kindling eBPF 模块依赖于大于 4.14 的内核版本。作为 eBPF 约束,eBPF 模块不适用于旧内核版本。但是对于想要尝试旧内核功能的用户,开发团队使用了来自 Sysdig 开源项目的一些模块,并进行了增强和验证。基本上,这个想法是使用内核模块来跟踪内核跟踪点。Sysdig 开源项目为旧内核版本提供了一个跟踪点工具框架。
目前在测试中,内核模块与 eBPF 模块一样工作,但建议在生产环境中使用 eBPF 模块,因为它比内核模块更安全。为了帮助老内核版本的用户体验 eBPF 的魔力,将支持内核模型。对于功能,内核模块和 eBPF 模块捕获相同的数据,并且行为完全相同。