运维数据基础:数据分类与采集存储
大家好,我是老张。今天咱们聊聊运维数据的底子。
做故障根因分析,说白了就是跟数据打交道。数据质量不行,分析结果就是垃圾。我在项目中见过太多团队,工具链搭得挺全,但数据一塌糊涂,最后 RCA 做成了猜谜游戏。
所以,这一章我们先打好基础。把运维数据的分类、采集、存储讲清楚。嗯,这里要注意,数据质量对 RCA 的影响,我会重点说。
运维数据的四大分类
我个人习惯把运维数据分成四类:指标、日志、链路、事件。这四类数据,就像人的五官,各司其职。
1. 指标(Metrics)
指标是数字化的,说白了就是“某个时间点的数值”。比如 CPU 使用率 85%,QPS 2000,内存占用 4GB。
指标的特点是:轻量、高频、可聚合。你想想看,一台机器每秒产生几百个指标,但每个指标就几个字节。Prometheus 就是干这个的。
我在项目中遇到过,有一次线上告警说 CPU 飙到 95%,但业务没受影响。后来发现是监控采集频率太高,把 CPU 打满了。嗯,这就是指标采集的坑。
2. 日志(Logs)
日志是文本化的,记录的是“发生了什么”。比如一条错误日志:“2025-01-15 10:23:45 ERROR - 数据库连接超时”。
日志的特点是:信息丰富、结构多样、体积大。一条日志可能几百字节,但一天下来能攒几个 TB。
ELK 栈(Elasticsearch、Logstash、Kibana)是处理日志的经典方案。我个人习惯把日志按级别分类:DEBUG、INFO、WARN、ERROR。做 RCA 时,ERROR 日志是重点,但 WARN 日志也别放过。
3. 链路(Traces)
链路追踪,记录的是“一个请求经过了哪些服务”。比如用户下单,请求先到网关,再到订单服务,再到支付服务,最后到数据库。
链路数据的特点是:关联性强、维度多、采样率高。Jaeger 是链路追踪的标杆工具。
为什么需要链路?因为微服务架构下,一个故障可能跨多个服务。指标告诉你“接口慢了”,日志告诉你“某个服务报错了”,但链路能告诉你“慢在哪一步”。
4. 事件(Events)
事件是离散的、有明确时间点的“事情”。比如“服务器重启”、“配置变更”、“发布上线”、“告警触发”。
事件数据的特点是:稀疏、语义明确、上下文重要。事件通常不是系统自动产生的,而是由人或工具触发的。
做 RCA 时,事件数据经常被忽略。但我告诉你,很多故障的根因就藏在事件里。比如“发布后 3 分钟,错误率飙升”,那根因大概率就是这次发布。
数据采集与存储方案
数据分类清楚了,接下来就是怎么采、怎么存。我挑三个主流方案讲:Prometheus、ELK、Jaeger。
Prometheus:指标采集与存储
Prometheus 是 CNCF 的毕业项目,也是指标监控的事实标准。它的核心是“拉模式”:Prometheus Server 定期去目标 exporter 拉取指标数据。
# prometheus.yml 配置示例
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
Prometheus 的存储是时序数据库,数据模型是:metric_name + labels + timestamp + value。比如:
http_requests_total{method="GET", endpoint="/api/v1/users"} 1024 @ 1705300000
我个人习惯用 PromQL 做查询。比如查过去 5 分钟的平均 CPU 使用率:
avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100
ELK:日志采集与存储
ELK 是 Elasticsearch、Logstash、Kibana 的缩写。现在也有 Filebeat 替代 Logstash 做轻量采集。
日志采集的流程是:Filebeat 采集日志文件 -> 发送到 Logstash 或直接到 Elasticsearch -> Kibana 做可视化。
# filebeat.yml 配置示例
filebeat.inputs:
- type: log
paths:
- /var/log/app/*.log
output.elasticsearch:
hosts: ["localhost:9200"]
Elasticsearch 的存储是倒排索引,适合全文搜索。做 RCA 时,我经常用 Kibana 的搜索功能,比如搜“ERROR”关键字,再按时间聚合。
Jaeger:链路采集与存储
Jaeger 是 Uber 开源的链路追踪系统,也是 CNCF 项目。它的核心概念是 Span(跨度)和 Trace(追踪)。
一个 Trace 由多个 Span 组成,每个 Span 代表一个服务调用。比如:
TraceID: abc123
Span1: 网关 -> 订单服务 (耗时 50ms)
Span2: 订单服务 -> 支付服务 (耗时 30ms)
Span3: 支付服务 -> 数据库 (耗时 20ms)
Jaeger 的存储后端支持 Elasticsearch、Cassandra、Kafka 等。我个人习惯用 Elasticsearch 做存储,这样链路数据和日志数据可以统一查询。
数据质量对 RCA 的影响
数据质量不行,RCA 就是空中楼阁。我总结了几点常见问题:
| 数据质量问题 | 对 RCA 的影响 | 我的建议 |
|---|---|---|
| 数据缺失 | 无法定位故障时间点 | 设置数据完整性告警 |
| 数据延迟 | 故障时间线错乱 | 监控采集延迟,超过 1 分钟告警 |
| 数据不一致 | 指标和日志对不上 | 统一时间戳格式,使用 NTP 同步 |
| 数据冗余 | 存储成本高,查询慢 | 设置合理的保留周期和采样率 |
我曾经遇到一个案例:某次故障,指标显示 CPU 正常,但日志里全是超时错误。后来发现,指标采集的机器和日志采集的机器时间差了 5 分钟。时间不一致,导致 RCA 完全跑偏。
所以,我建议团队在搭建数据平台时,先把数据质量监控做起来。别等到故障了才发现数据有问题。
本章知识体系
下面这张图,是我梳理的本章知识体系。你可以看到四大数据分类、三大采集存储方案,以及数据质量对 RCA 的影响路径。
这张图的核心逻辑是:四大数据分类 -> 各自采集方案 -> 各自存储方案 -> 数据质量保障 -> RCA。缺一环都不行。
好了,这一章就到这里。数据是 RCA 的基石,下一章我们会深入讲指标数据的采集与 PromQL 实战。嗯,到时候见。
公众号:蓝海资料掘金营,微信deep3321