四种匹配运算符
标签匹配运算符用于在选择器里筛选序列:等号与不等号做精确匹配,带波浪号的做正则匹配。正则匹配是完整匹配,等价于自动加上首尾锚定,因此写一个具体的状态码只能命中完全等于该值的序列,而不是包含它的序列。
组合出精确的选择器
常用写法包括用正则一次选中多个状态码、按前缀排除内部路由、以及匹配已设置某标签的序列。掌握这几种组合,就能把过滤条件集中写在选择器里,让后续的函数与聚合只处理需要的数据。
基本信息
| 精确匹配 | 等号与不等号,语义直观 |
|---|---|
| 正则匹配 | 带波浪号,按模式匹配 |
| 匹配范围 | 完整匹配,隐含首尾锚定 |
| 空值匹配 | 用正则要求标签至少有一个字符 |
典型使用场景
- 一次筛选多类错误:用正则合并几个状态码
- 排除内部流量:按路由前缀排除内部接口
- 只看有值的序列:用正则要求标签至少有一个字符
- 区分环境:用不等号排除测试环境
- 缩小扫描范围:把过滤写在选择器里而不是函数之后
匹配示例
匹配示例
http_requests_total{code="500"} # 精确等于
http_requests_total{code!="500"} # 不等于
http_requests_total{code=~"5.."} # 正则:5 开头两位
http_requests_total{code=~"500|502|503"} # 多值正则
http_requests_total{route!~"^/internal/.*"} # 排除内部路由运算符对照
| 运算符 | 语义 | 注意 |
|---|---|---|
| 等于 | 标签值完全一致 | 最精确,优先使用 |
| 不等于 | 排除某个取值 | 常用于排除测试环境 |
| 正则匹配 | 按模式匹配 | 全串匹配,需精确描述 |
| 正则不匹配 | 按模式排除 | 宽泛正则会增加扫描量 |
写选择器的约定
- 能用精确匹配就不用正则,扫描范围更小
- 正则尽量带上前缀,便于查询引擎优化
- 过滤条件写在选择器里,避免先取全量再筛选
正则默认全串匹配:写一个数值只能匹配完整值,想要包含匹配必须显式写成两侧通配的形式。
匹配空值的选择器会命中缺失该标签的序列:使用时先确认业务含义,否则容易把无关数据一并纳入统计。