
이번 게시물에서는 Grafana 대시보드에서 Kubernetes apiserver 요청에 대한 응답시간을 시간 흐름에 따라 Heatmap으로 시각화하는 방법을 정리해본다.
먼저 apiserver 요청 응답시간에 대한 히스토그램 메트릭이 수집되고 있는지 확인한다.
apiserver_request_duration_seconds_bucket
해당 메트릭을 쿼리하면 다음과 같이 응답시간 구간(bucket)별 데이터가 출력되는 것을 확인할 수 있다.

다음으로, 이 데이터를 Heatmap으로 표현하기 위해 가공한다.
히스토그램 메트릭은 누적 카운터 형태이기 때문에, 일정 시간 단위의 변화량을 보기 위해 rate 함수를 사용한다.
또한 응답시간 구간별 분포를 보기 위해 le 라벨 기준으로 그룹화하고, 나머지 라벨은 모두 합산한다.
최종적으로 사용하는 쿼리는 다음과 같다.
sum by(le) (rate(apiserver_request_duration_seconds_bucket[1m]))
이 쿼리는 최근 1분 동안 apiserver 요청이 각 응답시간 구간(le)에 얼마나 많이 발생했는지를 나타낸다.
해당 쿼리를 실행하면 아래와 같은 그래프가 표시된다.

하지만 이 상태에서는 시간대별로 어느 응답시간 구간에 요청이 몰렸는지를 직관적으로 파악하기 어렵다.
이를 개선하기 위해 패널 타입을 Heatmap으로 변경한다.

Heatmap으로 변경하면,
시간 흐름에 따라 특정 응답시간 구간에 요청이 집중되는 패턴을 색상으로 한눈에 확인할 수 있다.
추가로, Y축이 bucket 값(le) 그대로 표시되면 해석이 다소 어려울 수 있다.
이를 응답시간 단위로 명확히 표현하기 위해 Y축 설정에서 Time → Second로 변경한다.

이렇게 설정하면 Y축이 초 단위 응답시간으로 표시되어,
느린 요청이 어느 시간대에 발생했는지를 더욱 직관적으로 파악할 수 있다.
해당 게시물은 인프런 강의 중 "실습으로 배우는 그라파나"를 참고하여 작성하였습니다.