如何使用PromQL将两个Prometheus时序按新标签合并生成新时序
方案实现
可以通过PromQL的label_replace函数结合or运算符实现需求,完整语句如下:
label_replace(ts1, "inner_ts", "ts1", "", "") or label_replace(ts2, "inner_ts", "ts2", "", "")
逻辑说明
- 用
label_replace分别给两个原始时序新增inner_ts标签,标签值对应各自的来源标识。函数最后两个空参数代表不需要匹配原有标签,直接给所有匹配到的时序新增指定标签。 - 用
or运算符拼接两个处理后的时序集合,因为两个集合的时序带有不同的inner_ts标签,不存在标签集完全一致的情况,所以所有原始时序都会被完整保留,不会发生指标值覆盖或合并。 - 最终返回的结果中,
{inner_ts="ts1"}的时序对应原ts1的所有数据,{inner_ts="ts2"}对应原ts2的所有数据,直接按照你要求的规则筛选即可使用。
原有写法问题说明
ts1 + ts2属于算术运算,仅会对标签集完全匹配的时序做值相加,不会新增标签,无法实现来源标识,也会丢失标签不匹配的时序。ts1 or ts2虽然可以保留两个时序的所有数据,但不会新增来源标识标签,无法通过标签区分两个原始时序的内容。(ts1, ts2)不是合法的PromQL语法,无法正常执行。
内容的提问来源于stack exchange,提问作者information_interchange
相关产品推荐
相关产品推荐

