监控数据采集:三大支柱与采集器选型
大家好,我是你们的老朋友。今天咱们聊聊监控数据采集这个事儿。
很多人一上来就问我:「监控到底该采什么?」
其实答案很明确——指标、日志、链路。业内管它们叫「可观测性三大支柱」。我做了这么多年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按需开启。
核心逻辑图
下面这张图是我自己画的,帮你理清三大支柱和采集模式的关系:
怎么选?我的经验
你可能会问:「那我到底该用哪个?」
我的建议很简单:
- 如果你已经在用Prometheus生态,Node Exporter是首选。轻量、原生支持、社区活跃。
- 如果你需要采集多种数据源(比如数据库、消息队列、自定义应用),Telegraf更合适。插件多,配置灵活。
- 如果你既要又要,可以两个都用。Node Exporter采系统指标,Telegraf采应用指标,互不冲突。
小技巧:我习惯在每台机器上同时部署Node Exporter和Telegraf。Node Exporter负责基础系统指标,Telegraf负责业务相关的自定义指标。这样分工明确,排查问题也快。
嗯,今天就聊到这儿。三大支柱和采集器选型,说白了就是搞清楚「采什么」和「怎么采」。下一章咱们聊聊数据存储和查询,那又是另一番天地了。