label_replace 和 label_join 是 PromQL 的预置函数,反对将 label 的 value 进行截取和拼接,生成新的 label。
值得注意的是,它们不扭转源 label 的 name 及 value,仅生成新 label。
label_replace
反对对某个 label 的值进行正则匹配,截取出某些值,生成新的 label。
label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)
原始指标:
node_network_transmit_bytes_total{container="kube-rbac-proxy",device="eth0",endpoint="https",instance="k8s-v22-1",job="node-exporter",namespace="monitoring",pod="node-exporter-nvj7r",service="node-exporter"} 9457895219
通过 label_replace 将 device==>iface
label_replace(node_network_transmit_bytes_total{job="node-exporter", device="eth0"}, "iface", "$1", "device", "(.+)")
后果:
node_network_transmit_bytes_total{container="kube-rbac-proxy",device="eth0",endpoint="https",iface="eth0",instance="k8s-v22-1",job="node-exporter",namespace="monitoring",pod="node-exporter-nvj7r",service="node-exporter"} 9465702581
label_join
反对将某些 label 拼接起来,生成新的 label。
label_join(v instant-vector, dst_label string, separator string, src_label_1 string, src_label_2 string, ...)
原始指标:
kubelet_node_name{endpoint="https-metrics",instance="178.104.163.63:10250",job="kubelet",metrics_path="/metrics",namespace="kube-system",node="k8s-v22-1",service="kubelet"} 1
通过 label_join 将 instance 和 metrics_path 拼接起来,生成新 label: metrics_url
label_join(kubelet_node_name, "metrics_url", "","instance","metrics_path")
后果:
kubelet_node_name{endpoint="https-metrics",instance="178.104.163.63:10250",job="kubelet",metrics_path="/metrics",metrics_url="178.104.163.63:10250/metrics",namespace="kube-system",node="k8s-v22-1",service="kubelet"} 1
参考
1.prometheus-book