PromQL Label Join, Replace

PromQL Label Join, Replace

PromQL의 Label Join가 Label Replace 문법을 정리한다.

1. PromQL Label Join

label-join([Instant Vector], [Dest Label], [Seperator], [Src Label], [Src Label], ...)

ex) label-join(node-memory-MemAvailable-bytes, "dest-label", "+", "job", "endpoint", "namespace")
[SQL Syntax 1] PromQL Label Join

Label Join은 기존 Label들의 값을 조합하여 새로운 Label을 생성하는 문법이다. [SQL Syntax 1]은 Label Join의 문법을 나타내고 있다. “Src Label"은 값을 가져오려는 Label을 나타내며 다수의 “Src Label"이 선택될 수 있다. “Seperator"는 가져온 Label 사이에 삽입되는 분리자를 의미한다. Empty String (”")으로도 설정할 수 있다. “Dest Label"은 “Src Label"과 “Seperator"로 구성된 값의 저장될 새로운 Label을 나타낸다.

--- query ---
node-memory-MemAvailable-bytes{}

--- result ---
node-memory-MemAvailable-bytes{container="node-exporter", endpoint="metrics", instance="192.168.0.31:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-lpqff", service="prometheus-prometheus-node-exporter"} 14897680384
node-memory-MemAvailable-bytes{container="node-exporter", endpoint="metrics", instance="192.168.0.32:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-59wm5", service="prometheus-prometheus-node-exporter"} 6833418240
node-memory-MemAvailable-bytes{container="node-exporter", endpoint="metrics", instance="192.168.0.33:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-9lzmv", service="prometheus-prometheus-node-exporter"} 9297317888
[Query 1] node-memory-MemAvailable-bytes

[Query 1]은 Label Join 예제를 위한 node-memory-MemAvailable-bytes Instant Vector Type의 Data를 보여주고 있다.

--- query ---
label-join(node-memory-MemAvailable-bytes, "dest-label", "+", "job", "endpoint", "namespace")

--- result ---
node-memory-MemAvailable-bytes{container="node-exporter", dest-label="node-exporter+metrics+monitoring", endpoint="metrics", instance="192.168.0.31:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-lpqff", service="prometheus-prometheus-node-exporter"} 14864846848
node-memory-MemAvailable-bytes{container="node-exporter", dest-label="node-exporter+metrics+monitoring", endpoint="metrics", instance="192.168.0.32:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-59wm5", service="prometheus-prometheus-node-exporter"} 6715412480
node-memory-MemAvailable-bytes{container="node-exporter", dest-label="node-exporter+metrics+monitoring", endpoint="metrics", instance="192.168.0.33:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-9lzmv", service="prometheus-prometheus-node-exporter"} 9297317888
[Query 2] node-memory-MemAvailable-bytes with Join

[Query 2]는 node-memory-MemAvailable-bytes를 이용한 Label Join의 예제를 나타내고 있다. “dest-label"이 추가된 것을 확인할 수 있고, “dest-label"의 값은 “job”, “endpoint”, “namespace” Label 값과 Seperator인 “+“으로 구성되어 있는것을 확인 할 수 있다.

2. PromQL Label Replace

label-join([Instant Vector], [Dest Label], [Replacement], [Src Label], [Regex])

ex) label-replace(node-memory-MemAvailable-bytes, "dest-label", "$1", "job", "(.*)")
[SQL Syntax 2] PromQL Label Replace

Label Join은 기존 Label의 값을 변경하여 새로운 Label을 생성하는 문법이다. [SQL Syntax 2]은 Label Replace의 문법을 나타내고 있다. “Src Label"은 값을 변경하려는 Label을 나타내며, “Regex"에는 “Src Label"에서 어떻게 값을 가져올지 정규식으로 설정한다. “Dest Label"은 변경한 값이 저장될 새로운 Label을 의미하며, “Replacement"에는 “Dest Label"에 “Src Label"에서 가져온 값을 어떻게 저장할지 설정한다.

--- query ---
label-replace(node-memory-MemAvailable-bytes, "dest-label", "$1-replace", "job", "(.*)")

--- result ---
node-memory-MemAvailable-bytes{container="node-exporter", dest-label="node-exporter-replace", endpoint="metrics", instance="192.168.0.31:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-lpqff", service="prometheus-prometheus-node-exporter"} 14864846848
node-memory-MemAvailable-bytes{container="node-exporter", dest-label="node-exporter-replace", endpoint="metrics", instance="192.168.0.32:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-59wm5", service="prometheus-prometheus-node-exporter"} 6715412480
node-memory-MemAvailable-bytes{container="node-exporter", dest-label="node-exporter-replace", endpoint="metrics", instance="192.168.0.33:9100", job="node-exporter", namespace="monitoring", pod="prometheus-prometheus-node-exporter-9lzmv", service="prometheus-prometheus-node-exporter"} 9297317888
[Query 3] node-memory-MemAvailable-bytes with Replace

[Query 3]은 node-memory-MemAvailable-bytes를 이용한 Label Replace의 예제를 나타내고 있다. “dest-label"이 추가된 것을 확인 할 수 있고, “dest-label"의 값은 Regex 및 Replacement 문법에 따라서 “node-exporter” label의 값에 “-replace” 문자열이 더해진 값이 설정되는 것을 확인 할 수 있다.

3. 참조