表達式為
label_replace(up{job="apiserver"}, "host_ip", "$1", "instance", "(.*):.*") * on (host_ip) group_left(node_name) up{job="node-exporter", instance=~"[0-9.]*:9100"}
表達式可以簡化理解為:
<vector expr1> <運算符> on (<label>) group_left(<label>) <vector expr2>
具體:
on(host_ip) 用于向量匹配,也就是乘法運算符左右兩側(cè)的表達式中通過 host_ip 標簽來匹配纬纪,兩邊的 host_ip 相等的才會進行運算汁掠。
group_left() 表示多對一的關(guān)系义图,即左側(cè)每個值都逐一與右側(cè)的值進行運算脸候。group_left() 的參數(shù)是右側(cè)的標簽名,其會將此標簽值傳遞給左側(cè)硕糊,也就是出現(xiàn)在運算的結(jié)果中爽撒,并且覆蓋左側(cè)同名標簽
輸出:
-
expr1表達式:label_replace(up{job="apiserver"}, "host_ip", "$1", "instance", "(.):.")
-
expr2表達式:up{job="node-exporter", instance=~"[0-9.]*:9100"}
分析:host_ip有 10.20.0.4憎亚, 10.20.0.5 ,10.20.0.6弄慰,10.20.0.7第美,10.20.0.8,10.20.0.9 共計6組host_ip陆爽。乘法運算符左右兩側(cè)的表達式中通過 host_ip 標簽來匹配什往,兩邊的 host_ip 相等的才會進行運算。
- 總表達式:label_replace(up{job="apiserver"}, "host_ip", "$1", "instance", "(.):.") * on (host_ip) group_left(node_name) up{job="node-exporter", instance=~"[0-9.]*:9100"}