招贤令:一起来搞一个新开源项目

这是一篇 cprobe 项目早期招募文章,介绍为什么想做一个 Go 语言编写的探针式监控采集器,以及它和本地式采集器、Prometheus Exporter、vmagent 的边界。

作者 秦晓辉

核心要点

  • 新项目的目标是做一个探针式监控采集器,用 Go 语言编写,面向远端监控对象采集数据。
  • 本地式采集器部署在被监控机器上,读取本机 CPU、内存、磁盘、IO、网络、eBPF 等数据;探针式采集器可以部署在任意能访问目标的位置。
  • 项目希望拥抱 Prometheus Exporter 生态,同时解决 Exporter 数量多、部署分散、配置复用差、资产管理弱的问题。
  • 新组件不会重复采集 Prometheus 协议端点数据,而是作为 vmagent 或 Prometheus 的补充,负责其他协议的数据采集。
  • 当前阶段欢迎有开源项目经验、监控系统深度使用经验或愿意参与文档、测试、设计讨论的朋友加入。

我想搞一个新的开源项目,想邀请同道中人一起来搞。目标是做一个探针式监控采集器,使用 Go 语言编写,欢迎感兴趣的朋友一起来搞。

名词解释

探针式监控采集器,这里的探针式是啥意思?

这是我的个人叫法,监控数据采集器姑且可以分成两种,一种是本地式,部署到要监控的目标机器上,采集 CPU、内存、磁盘、IO、网络、eBPF 相关的指标,因为这些指标只能在机器上采集,需要读取本机的 /proc 等目录内容,所以,采集器必须部署到要监控的目标机器上,称为本地式;另一种采集器称为探针式,用于采集远端监控对象的数据,比如通过 SNMP 采集网络设备的监控数据,通过 HTTP 采集 ElasticSearch 的监控数据,通过 TCP 连上 MySQL、Redis 等采集对应的监控数据,这种采集器可以部署在任何地方,只要能访问到监控对象即可,姑且称为探针式。

类型 部署位置 典型采集对象 关键特点
本地式采集器 被监控机器本机 CPU、内存、磁盘、IO、网络、eBPF 依赖本机 /proc 等数据源,适合主机级指标
探针式采集器 任意能访问目标的位置 SNMP 设备、Elasticsearch、MySQL、Redis 通过远程协议访问目标,适合集中采集远端对象

市面上的产品

社区里已经有很多相关的产品了,但是或多或少都不如我意。举例:

Prometheus 生态有很多 Exporter,MySQL 的监控数据采集有 mysqld_exporter,Redis 的监控数据采集有 redis_exporter,但是 Exporter 太多了,管理这么多 Exporter 比较费劲。而且有些 Exporter 和监控实例之间甚至是一对一的关系,有多少实例就要部署多少 Exporter,在非容器环境下非常麻烦。

Grafana-agent 倒是把常用的 Exporter 整合到一起了,但是整合的非常生硬,只是二进制层面的,缺少产品层面的统筹设计。

Telegraf、Categraf、Datadog-agent 也是主打 All-in-One,但是并没有拥抱 Prometheus Exporter 生态,相关指标命名各异,导致缺少开箱即用的 Grafana 仪表盘。另外,这些采集器通常是以监控目标作为配置颗粒度,管理采集配置的时候,会发现有很多重复配置,配置文件相当冗长。

我期望的产品

  • 还是要拥抱 Prometheus Exporter 生态,可以复用众多仪表盘
  • 支持自动发现监控目标,比如网络设备就可以通过网段自动发现,当然,也期望能够支持 HTTP、Consul 等方式的目标发现
  • 支持资产式管理监控目标,既可以用标签分类,也可以用目录分类,便于和 CMDB、服务树等整合打通
  • 采集配置要能片段化管理,这样就更方便复用(方便经验沉淀分享),比如我自定义了一个 SQL,用于监控所有的 Postgres 的某个指标,那么这个 SQL 的配置就可以复用到所有的 Postgres 实例上
  • 要支持数据的 enrichment 和 relabel 机制

这些要求背后的共同目标,是让监控采集从“部署很多采集进程和复制很多配置”,变成“围绕资产、插件、配置片段和标签体系管理采集能力”。只有这样,经验才能复用,配置才能沉淀,采集目标变多之后才不会失控。

不重复造轮子

这个组件不准备采集 Prometheus 协议的指标数据,即不去采集各类 exporter 的数据,因为已经有 vmagent 了,当然,用 Prometheus 也可以抓取各类 exporter 的数据。这个新项目在部署的时候,可以和 vmagent 一起部署,sidecar 的模式,vmagent 来采集 Prometheus 协议的数据,新项目来采集其他协议的数据,新项目姑且可以看做是 vmagent 的补充。

欢迎加入

目前项目处在前期构思和搭架子的过程,欢迎感兴趣的朋友一起参与,不局限代码,也可以贡献想法、建议、文档、测试用例等。最好是之前有开源项目参与经验或者有监控系统深度使用的经验,有兴趣的朋友可以加我微信 picobyte,备注:探针采集器-公司-姓名。

如果你不确定自己能做什么,可以从这几类事情开始:

  1. 提供真实监控场景,说明现在 Exporter 或采集器哪里不好用。
  2. 参与插件设计,补充某类中间件、数据库或网络设备的采集需求。
  3. 整理仪表盘、告警规则和配置样例。
  4. 编写文档、测试用例,帮助项目降低使用门槛。
  5. 参与代码开发,完善框架、服务发现、enrichment、relabel 等能力。

关于我以及动机

我是秦晓辉,从 14 年开始搞监控、可观测性相关的事情,是 Open-Falcon、Nightingale、Categraf 的创始研发。这么多年了,想为行业留下点东西,新项目大概率会使用 GPL 协议,纯种开源,希望能够帮助到更多的人。

小结

这个项目想解决的不是“再写一个采集器”这么简单,而是重新梳理探针式监控采集器应该怎么管理目标、复用配置、兼容生态和服务真实生产环境。它会尽量站在 Prometheus 生态之上补短板,而不是重复已有能力。欢迎认同这个方向的朋友一起参与。

联系我们交流

延伸路径

继续看解决方案和产品对比

如果你正在做监控、可观测性或故障定位相关选型,建议从解决方案和产品对比继续往下看。

快猫星云 联系方式 快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云 联系方式
快猫星云