2、核心概念:指标(Metric)、维度(Dimension)、标签(Label/Tag)、基数(Cardinality)的定义与关系
在 Traffic 指标采集与治理体系中,指标、维度、标签与基数是构成可观测性数据的四大基石。理解它们的定义与相互关系,是进行有效维度治理的前提。本节将逐一拆解这些核心概念,并阐明它们如何在时序数据模型中协同工作。
2.1 指标(Metric)
指标是描述系统某一可测量特征的量化数据,通常是一个随时间变化的数值序列。在 Traffic 场景中,指标代表业务或技术层面的关键性能指标(KPI)。
- 本质:一个命名的时间序列集合,用于描述“什么被测量”。
- 特征:具有明确的名称、数据类型(如 Counter、Gauge、Histogram)和测量单位。
- 示例:
http_requests_total(总请求数)、api_latency_seconds(API 延迟)、active_users(活跃用户数)。
治理要点:指标名称应遵循统一的命名规范(如
namespace_subsystem_unit_suffix),避免歧义和重复。一个良好的指标名称本身就是一份文档。
2.2 维度(Dimension)与标签(Label/Tag)
维度是描述指标数据特征的分类属性,用于对指标进行细分和过滤。在 Prometheus 生态中,维度通过标签(Label)实现;在其他系统(如 InfluxDB、OpenTSDB)中,常被称为标签(Tag)。
- 维度(Dimension):逻辑概念,指代一个分类轴,如“地域”、“服务版本”、“HTTP 方法”。
- 标签(Label/Tag):物理实现,是键值对(Key-Value Pair),附加在指标上,用于标识维度的具体取值。
| 概念 | 定义 | 示例 | 治理关注点 |
|---|---|---|---|
| 维度(Dimension) | 指标的分类属性轴 | method、status_code、region |
维度是否必要?是否可降维? |
| 标签(Label) | 维度的键值对实现 | method="GET"、status="200" |
标签值是否可控?是否包含高基数数据? |
| 标签键(Label Key) | 维度的名称 | method、status、region |
键名是否规范?是否与已有维度冲突? |
| 标签值(Label Value) | 维度的具体取值 | GET、200、us-east-1 |
值集合是否有限?是否稳定? |
关键区别:维度是“列”,标签是“单元格”。治理时,我们首先审视维度是否合理,再检查标签值的质量。
2.3 基数(Cardinality)
基数是指一个标签键(维度)下所有可能取值的数量。它是维度治理中最核心、最危险的指标。
- 低基数:取值数量有限且稳定,如
method(GET、POST、PUT、DELETE)——通常不超过 10 个。 - 中基数:取值数量在几十到几百之间,如
status_code(200、404、500 等)——通常可控。 - 高基数:取值数量极大,如
user_id、request_id、ip_address——可能导致存储爆炸和查询性能崩溃。
高基数陷阱:一个指标如果包含一个高基数标签(如
user_id),其时间序列数量 = 标签值数量的乘积。假设有 3 个标签,每个标签有 1000 个值,则总序列数 = 1000 × 1000 × 1000 = 10 亿。这足以压垮任何时序数据库。
2.4 四者关系:从指标到时间序列
指标、维度、标签和基数共同决定了时间序列的生成逻辑。以下 SVG 图展示了从指标定义到具体时间序列实例的完整链路。
2.5 核心关系总结
四者之间的关系可以用以下逻辑链条概括:
- 指标是“测量什么”的命名容器。
- 维度是“从哪些角度切分”的逻辑分类。
- 标签是“具体切分取值”的物理键值对。
- 基数是“每个维度有多少种取值”的量化指标。
- 指标 + 标签组合 = 唯一的时间序列。
- 基数越高,时间序列数量呈笛卡尔积增长,存储和查询成本指数级上升。
治理黄金法则:在定义指标时,优先固定低基数维度(如 method、status),谨慎引入中基数维度(如 region、service),严格禁止高基数维度(如 user_id、request_id)直接作为标签。高基数数据应通过日志或事件系统处理,而非指标系统。
2.6 常见误区与避坑
| 误区 | 错误表现 | 正确做法 |
|---|---|---|
| 维度与标签混为一谈 | 认为“加个标签就是加个维度”,不考虑基数影响 | 先评估维度必要性,再决定是否实现为标签 |
| 忽略基数爆炸 | 将 user_id、session_id 直接作为标签 |
使用聚合指标或日志替代,或通过 job 级别聚合 |
| 标签值无约束 | 标签值包含空格、特殊字符、大小写混用 | 制定标签值规范,使用枚举或正则校验 |
| 过度维度化 | 为每个可能的属性都创建维度 | 遵循“够用就好”原则,只保留必要的分析维度 |