티스토리 뷰

promql로 뽑아내는 결과중 label 값을 변경하는 다음 label_replace, label_join에 대해 예제와 함께 간단한 사용법을 알아보자.

label_replace

label_replace는 실제 replace가 아닌 add 이다.

다음과 같은 promql query로 label_replace 사용이 가능하다.

label_replace(rate(demo_api_request_duration_seconds_count[5m]), "newstatus", "$1", "status", "(^2.*)")

실제 동작은 status label이 regex "(^2.*)"에 의해 2로 시작되는 결과값에만 newstatus라는 label을 추가한다라고 해석할수 있다.
하여 다음과 같은 기본 query 결과를

{instance="demo-service-0:10000", job="demo", method="GET", path="/api/bar", status="200"}    16.691228070175438
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/bar", status="500"}    0.10175438596491228
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/foo", status="200"}    30.782456140350877
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/foo", status="500"}    0.2175438596491228
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/nonexistent", status="404"}    0.982456140350877
{instance="demo-service-0:10000", job="demo", method="POST", path="/api/bar", status="200"}    3.6526315789473682

다음과 같이 변형하게 된다.

{instance="demo-service-0:10000", job="demo", method="GET", newstatus="200", path="/api/bar", status="200"}    17.403508771929825
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/bar", status="500"}    0.06666666666666667
{instance="demo-service-0:10000", job="demo", method="GET", newstatus="200", path="/api/foo", status="200"}    31.540350877192985
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/foo", status="500"}    0.22807017543859648
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/nonexistent", status="404"}    

label_replace without origin column

앞서 이야기했듯이 add의 개념이기에 sum without 을 사용하여 추가한 column은 놔두고 기존 column은 제거하여 출력하도록 한다.

sum without (status) (label_replace(rate(demo_api_request_duration_seconds_count[5m]), "newstatus", "$1", "status", "(^2.*)"))

{instance="demo-service-0:10000", job="demo", method="GET", newstatus="200", path="/api/bar"}    19.915789473684207
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/bar"}    0.06666666666666667
{instance="demo-service-0:10000", job="demo", method="GET", newstatus="200", path="/api/foo"}    35.84561403508771
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/foo"}    0.2385964912280702
{instance="demo-service-0:10000", job="demo", method="GET", path="/api/nonexistent"}    1.2491228070175437
{instance="demo-service-0:10000", job="demo", method="POST", newstatus="200", path="/api/bar"}    4.705263157894737
{instance="demo-service-0:10000", job="demo", method="POST", path="/api/bar"}    0.03157894736842105
{instance="demo-service-0:10000", job="demo", method="POST", newstatus="200", path="/api/foo"}    3.7508771929824563
{instance="demo-service-0:10000", job="demo", method="POST", path="/api/foo"}    0.07719298245614034

label_join

만약 두개의 label을 합쳐서 출력하고자 한다면 label_join을 사용하면 된다.

label_join(rate(demo_api_request_duration_seconds_count[5m]), "endpoint", " ", "method", "path")

해석하자면 method 와 path를 합친 endpoint라는 label을 추가한다는 의미이다.

실제로 method와 path를 join 된 새로운 endpoint가 함께 결과로 출력되게 된다.

{endpoint="GET /api/bar", instance="demo-service-0:10000", job="demo", method="GET", path="/api/bar", status="200"}    21.10175438596491
{endpoint="GET /api/bar", instance="demo-service-0:10000", job="demo", method="GET", path="/api/bar", status="500"}    0.05263157894736842
{endpoint="GET /api/foo", instance="demo-service-0:10000", job="demo", method="GET", path="/api/foo", status="200"}    37.16491228070175
{endpoint="GET /api/foo", instance="demo-service-0:10000", job="demo", method="GET", path="/api/foo", status="500"}    0.23157894736842105
{endpoint="GET /api/nonexistent", instance="demo-service-0:10000", job="demo", method="GET", path="/api/nonexistent", status="404"}    1.3473684210526315
{endpoint="POST /api/bar", instance="demo-service-0:10000", job="demo", method="POST", path="/api/bar", status="200"}    4.989473684210527

참고사이트

'Cloud > Private Cloud' 카테고리의 다른 글

label_replace , label_join in PromQL  (0) 2022.04.26
cURL with OpenStack  (0) 2021.04.09
openstack instance build stuck  (0) 2021.02.24
kolla-ansible with elasticsearch  (0) 2021.02.23
Packer on OpenStack  (0) 2021.02.19
gophercloud sdk  (0) 2021.02.08
댓글
댓글쓰기 폼