IT基础设施可观测性:Metrics、Logs与Traces的数据架构深度解析

Jing Wang

2026-09-24 /

IT可观测性架构:从三支柱数据特征到存储层技术选型

可观测性三支柱的数据分化

云原生架构的推进使可观测性(Observability)从单纯的"监控"演进为三支柱体系:Metrics(指标)、Logs(日志)、Traces(链路追踪)。三者并非简单的数据类型区分,而是采集频率、数据维度、关联模式上的根本性分化。

Metrics以高频低维为特征。一个典型的微服务实例每15秒采集一次,暴露的指标涵盖CPU利用率、内存占用、GC次数、HTTP请求QPS、连接池活跃数等,单实例指标数量在8000至15000之间。一个包含1000个实例的中型集群,每日产生的Metrics数据点约55亿条。数据维度有限(通常10-20个标签),但写入频率极高。

Logs走的是另一条路径。日志事件频率低——一个实例每分钟产生数十至数百条结构化日志——但维度极高。一条日志的Schema可能包含trace_id、span_id、服务名、方法、状态码、耗时、请求体摘要等30-50个字段,且非结构化文本内容占比较大。

Traces介于两者之间。链路追踪的Span产生频率取决于请求量,中频特征明显。关键在于关联性:一个Trace由多个Span组成,Span之间存在父子关系,跨服务调用形成有向无环图(DAG)。数据维度中等,但拓扑关系的存储和查询复杂度高。

三支柱数据特征对比

数据类型

采集频率

维度数量

单条大小

关联模式

典型查询场景

Metrics

5-60s

10-20标签

50-200字节

标签组合

实时看板、趋势分析、告警

Logs

事件驱动

30-50字段

500-5000字节

trace_id关联

全文检索、字段过滤、聚合统计

Traces

请求驱动

15-30字段

200-1000字节

父子Span树

链路重建、延迟分析、瓶颈定位

三者的存储引擎需求截然不同。Logs天然适配倒排索引(Elasticsearch、Loki),Traces需要图遍历能力(Jaeger、Tempo),而Metrics的核心诉求是高吞吐顺序写入与时间范围聚合查询——这正是时序数据库的设计目标。

Metrics层的写入与查询架构

在Metrics层,写入路径的工程挑战集中在吞吐量与延迟的平衡上。Prometheus默认15秒抓取一次指标,通过远程写入(Remote Write)将数据推送到后端存储。一个1000实例的集群,抓取间隔内产生的数据点在800万至1500万之间,后端需要在下一个抓取周期到来前完成写入。

写入模式具备典型的时间序列特征:同一指标的时间线(由标签组合唯一标识)按时间递增追加写入,几乎无更新操作。这一特征使得LSM-Tree(Log-Structured Merge Tree)成为存储引擎的优选——顺序写入、批量合并、按时间范围组织数据文件。

查询模式可分为三类,各对存储引擎提出不同要求:

实时看板查询:查询最近1小时数据,按时间窗口降采样后返回。延迟要求在200ms以内。这类查询命中最新数据,缓存命中率极高,关键在于最新值缓存与最近时间段数据的快速定位。

容量规划查询:查询最近7-30天数据,按1小时或1天降采样,计算趋势。数据量大但聚合粒度粗,瓶颈在扫描范围而非计算复杂度。列式存储在此场景下优势明显——只需读取聚合涉及的字段列,而非整行数据。

根因分析查询:查询特定时间点、特定指标、特定标签组合的数据。时间范围窄(几分钟到几小时),但标签过滤条件复杂。这要求标签索引能够高效定位特定时间线。

通用指标与自研业务指标的存储差异

传统基础设施监控聚焦于通用指标:CPU利用率、内存使用率、磁盘I/O、网络吞吐。这些指标由操作系统或运行时提供,采集标准统一(如node_exporter的metrics),Schema固定,标签维度有限。

自研业务指标的复杂度显著更高。一个电商系统的业务指标包括:各商品类目QPS、支付成功率、优惠券核销率、库存预警阈值、用户行为漏斗转化率。这些指标的标签维度可能包含店铺ID(基数上万)、商品类目(数百)、用户分群(数十),标签组合的基数远超基础设施指标。

标签基数膨胀直接影响存储引擎的索引效率。当标签组合数达到百万级时,倒排索引的内存占用和查询剪枝代价显著上升。时序数据库在此场景下的设计策略是通过标签列的列式存储+位图索引,在控制内存占用的同时支持多标签组合过滤。

TDengine在处理这类场景时采用超级表(STable)+子表(Subtable)两级模型:每条时间线对应一个子表,标签作为子表的元数据而非数据行的一部分。这种设计将标签存储与指标数据物理分离,标签变更不影响已写入的数据,标签基数增长不会线性放大存储空间。对于微服务场景,一个超级表可以描述"服务实例JVM指标",每个实例对应一个子表,标签包括集群名、命名空间、服务名、实例IP,均为低基数标签。

PromQL兼容与查询层适配

Prometheus的PromQL已成为Metrics查询的事实标准语言。一个完整的可观测性平台通常需要支持以下PromQL查询模式:

  • 即时查询(Instant Query):返回某个时间点的指标值
  • 范围查询(Range Query):返回时间范围内的数据点序列
  • 聚合运算:sum、avg、max、min、histogram_quantile
  • 向量匹配:基于标签的向量间运算

时序数据库要承担Metrics后端角色,需要实现PromQL到原生SQL的转换或直接支持PromQL语法。TDengine提供了PromQL兼容接口,通过remote_read/remote_write适配器与Prometheus生态集成,使得上层Grafana看板和告警规则无需修改即可切换后存储。

从架构层面看,Metrics层的存储选型并非孤立决策。一个完整的可观测性平台需要Metrics、Logs、Traces三层数据的关联查询能力——从Metrics异常触发告警,通过Traces定位到具体请求链路,再通过Logs查看详细上下文。这种关联查询的效率,取决于各层数据是否共享相同的标签体系(如service_name、instance标识),以及存储引擎是否支持跨数据类型的联合查询。

结语

可观测性三支柱的数据特征分化决定了存储层的异构性。Metrics层对高吞吐写入和时间聚合查询的诉求,与Logs层对全文检索的需求、Traces层对拓扑遍历的需求本质不同。在存储选型上,没有单一引擎能同时最优化三类负载。工程实践中更务实的路径是:Metrics层采用专门的存储引擎,通过标准的远程读写协议与采集层解耦,在查询层实现跨数据源的关联。时序数据库在Metrics层的角色,不仅是一个存储后端,更是连接采集层与可视化层的查询枢纽,其架构设计直接决定了可观测性平台的扩展上限。