简介
Categraf 是一个开源的 all-in-one 的监控数据采集器,由快猫星云开源和维护。
Categraf 的定位类似于 Telegraf、Grafana-agent、Datadog-agent,期望使用一个统一的采集器对所有常见监控对象提供开箱即用的监控数据采集能力,涵盖指标和日志,遵循 OpenTelemetry 标准,兼容 Prometheus 生态,并简化维护成本。
特点
- 代码开源,遵循 OpenTelemetry 标准,超过 100 万次下载,广受信赖;
- 性能优异,日志采集相比 filebeat 性能提升 25%;
- 插件机制,可扩展性强,100 多种插件,插件内置了仪表盘模板、监控策略模板,开箱即用;
对比
Categraf 和 Telegraf、Prometheus exporters、Grafana-agent、Datadog-agent 等的区别与联系
- Telegraf 是 InfluxDB 生态的默认采集器,因为 InfluxDB 是支持字符串数据的,所以 Telegraf 采集的很多 field 是字符串类型,另外 InfluxDB 的设计,允许 labels 是非稳态结构,比如 result_code 标签,有时其 value 是 0,有时其 value 是 1,在 Influxdb 中都可以接受。但是上面两点,在类似 Prometheus 的时序库中,处理起来就很麻烦,且非常容易引入高基数问题;
- Prometheus 生态有各种现成的 exporters,但是其设计逻辑都是一种监控对象一个 exporter,甚至于一个实例对应一个 exporter,导致在生产环境可能会部署特别多的 exporter 进程,管理成本很高,不易维护;
- Grafana-agent 则 import 了大量 exporters 的代码,好处是复用程度高,与 Prometheus 生态兼容,但是在import 代码的过程中没有裁剪,没有优化,没有最佳实践;对于一些中间件,仍然存在一个 grafana-agent 对应着一个目标实例的现象,管理起来很不方便;
- Datadog-agent 确实是集大成者,采集插件很丰富,质量高,但是大量代码是 Python 编写的,导致在目标机器上部署依赖复杂,发布包也比较大,有不少历史包袱,而且生态上是自成一派,和社区相对割裂;
所以,Categraf 确实又是一个轮子:
- 支持 remote_write 写入协议,支持将数据写入 Promethues、M3DB、VictoriaMetrics、InfluxDB 等目标时序数据库;
- 指标数据只采集数值,不采集字符串,标签维持稳态结构;
- 采用 all-in-one 的设计,所有的采集工作用一个 agent 搞定,涵盖指标和日志(traces 数据的采集推荐使用 OTEL SDK + OTEL Collector);
- 使用 Go 语言编写,静态编译依赖少,容易分发,易于安装;
- 尽可能落地最佳实践,不需要采集的数据无需采集,针对可能会对时序库造成高基数的问题在采集侧做出处理;
- 常用的采集器,不但提供采集能力,还要整理出监控大盘和告警规则,用户可以直接导入使用,开箱即用;
- 支持服务发现、relabel 等机制,支持日志采集时脱敏、多行日志识别等能力;
- 开源运作,由快猫星云技术团队提供支持,持续迭代,希望更多的公司、更多人研发人员参与共建,做成国内最开放、最好用的采集器;