监控数据采集:三大支柱与采集器选型

大家好,我是你们的老朋友。今天咱们聊聊监控数据采集这个事儿。

很多人一上来就问我:「监控到底该采什么?」

其实答案很明确——指标、日志、链路。业内管它们叫「可观测性三大支柱」。我做了这么多年SRE,踩过的坑不少,但这条主线从来没变过。

三大支柱,缺一不可

先说说这三者分别是什么。

  • 指标(Metrics):说白了就是数字。CPU使用率、内存占用、QPS、延迟P99……这些是告诉你「系统现在怎么样」的。
  • 日志(Logs):就是事件记录。谁在什么时候干了什么,出了什么错。它告诉你「发生了什么」。
  • 链路(Traces):记录一次请求从入口到出口的完整路径。它告诉你「为什么慢」。

我见过不少团队只盯着指标看,觉得日志和链路可有可无。结果呢?线上出问题,指标显示CPU飙到100%,但就是不知道哪个接口导致的。最后只能一台台机器翻日志,效率极低。

我的建议是:三大支柱必须同时建设。指标用于告警和趋势分析,日志用于排查细节,链路用于定位性能瓶颈。缺一个,你就像少了一只眼睛。

推模式 vs 拉模式

聊完采什么,咱们聊聊怎么采。这里有个经典问题:推模式还是拉模式?

推模式,就是采集器主动把数据发到中心存储。比如Telegraf往InfluxDB推数据。

拉模式,是中心存储主动去采集器那里拉数据。比如Prometheus去Node Exporter拉指标。

对比维度 推模式 拉模式
数据流向 采集器 → 中心 中心 → 采集器
配置复杂度 采集器端配置 中心端配置
扩展性 容易水平扩展 受限于拉取频率
典型代表 Telegraf + InfluxDB Prometheus + Node Exporter

我个人习惯是:内部服务用拉模式,外部或边缘设备用推模式。为什么呢?

拉模式的好处是中心可控。Prometheus可以决定什么时候拉、拉哪些数据,不会因为采集器端配置错误导致数据丢失。但缺点也很明显——如果采集器太多,中心会成为瓶颈。

推模式则相反。采集器自己决定什么时候发数据,中心只管收。适合大量边缘节点,但容易造成数据洪峰。

避坑指南:我曾经在一个项目中全量使用推模式,结果某个采集器配置错了,每秒往中心发了10万条数据,直接把存储打挂了。后来我学乖了——推模式一定要加限流和背压机制。

采集器选型:Telegraf vs Node Exporter

选采集器,说白了就是选工具。我常用的两个是Telegraf和Prometheus Node Exporter。

Telegraf

Telegraf是InfluxData家的产品,用Go写的。它的特点是插件丰富,支持200多种输入输出插件。CPU、内存、磁盘、网络、MySQL、Redis……基本你能想到的,它都能采。

配置也很简单,一个TOML文件搞定:

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false

[[outputs.influxdb]]
  urls = ["http://localhost:8086"]
  database = "telegraf"

我一般在需要采集多种数据源时首选Telegraf。比如既要采系统指标,又要采数据库状态,还要往Kafka发一份日志——Telegraf一把梭。

Prometheus Node Exporter

Node Exporter是Prometheus生态的标配。它只做一件事——暴露系统指标。CPU、内存、磁盘、网络、文件系统……全都有。

用法更简单:

./node_exporter --web.listen-address=":9100"

启动后访问 http://localhost:9100/metrics,就能看到一堆指标。Prometheus那边配置一下target就能拉取。

Node Exporter的优势是轻量、稳定。我见过一台机器上跑了3年没重启过的Node Exporter,稳如老狗。

注意:Node Exporter默认暴露的指标很多,有些可能涉及敏感信息(比如内核参数)。生产环境建议用--collector.disable-defaults按需开启。

核心逻辑图

下面这张图是我自己画的,帮你理清三大支柱和采集模式的关系:

监控数据采集核心逻辑 指标 (Metrics) 日志 (Logs) 链路 (Traces) 采集模式 推模式 (Push) Telegraf → InfluxDB 拉模式 (Pull) Prometheus → Node Exporter Telegraf(多插件) Node Exporter(轻量)

怎么选?我的经验

你可能会问:「那我到底该用哪个?」

我的建议很简单:

  • 如果你已经在用Prometheus生态,Node Exporter是首选。轻量、原生支持、社区活跃。
  • 如果你需要采集多种数据源(比如数据库、消息队列、自定义应用),Telegraf更合适。插件多,配置灵活。
  • 如果你既要又要,可以两个都用。Node Exporter采系统指标,Telegraf采应用指标,互不冲突。

小技巧:我习惯在每台机器上同时部署Node Exporter和Telegraf。Node Exporter负责基础系统指标,Telegraf负责业务相关的自定义指标。这样分工明确,排查问题也快。

嗯,今天就聊到这儿。三大支柱和采集器选型,说白了就是搞清楚「采什么」和「怎么采」。下一章咱们聊聊数据存储和查询,那又是另一番天地了。


专注资料整理