LabHub

Grafana — 대시보드는 질문이다 · 무엇을 어떤 모양으로 · 이론

패널 타입은 질문의 모양이다

LabHub 에서 이어서 보기

한 줄 요약

타입을 고르는 기준은 취향이 아니다. 질문이 시간에 대한 것인가, 지금 값 하나에 대한 것인가, 흩어짐에 대한 것인가로 갈린다.

왜 이게 필요했나

타입을 잘못 고르면 그래프는 그려지는데 답은 안 나온다. 그리고 그 사실이 눈에 띄지 않는다 — 화면은 멀쩡하고, 숫자도 맞고, 다만 필요한 순간에 필요한 것을 못 보여 줄 뿐이다. 틀린 쿼리는 빈 화면으로 티가 나지만 틀린 타입은 조용하다.

| 질문의 모양 | 타입 | 예 |
|---|---|---|
| 시간에 따라 어떻게 변했나 | timeseries | 오류율, p95 지연 |
| 지금 이 순간 값 하나 | stat | 현재 요청률, 남은 에러 버짓 |
| 정해진 상한 대비 얼마나 찼나 | gauge | 디스크 사용률, 커넥션 풀 |
| 값이 어떻게 흩어져 있나 | heatmap | 응답시간 분포 |
| 여러 대상의 순위 | table · bar | 핸들러별 오류 수 |

각각이 틀리는 순간

초당 요청 수에 게이지. 게이지는 "0과 최대치 사이 어디쯤" 을 보여 주는 도구다. 초당 요청 수에는 최대치가 없다. 바늘이 어디에 있든 그 위치가 아무것도 말해 주지 않고, 게다가 시간축이 없어서 "언제부터 늘었나" 도 못 답한다. 게이지는 상한이 정의된 값에만 쓴다.

분포에 선 그래프 하나. 평균 응답시간 선 하나는 "사용자 절반이 2초를 기다렸다" 를 완벽하게 숨긴다. 평균은 큰 값 몇 개에 끌려가면서도 그 값들이 있었다는 사실은 안 보여 준다. 흩어짐을 보려면 분위수를 여러 개 겹치거나 히트맵을 쓴다.

상태 대시보드에 stat 만. "지금 오류율 3%" 라는 숫자 하나로는 올라가는 중인지 내려가는 중인지 모른다. 인시던트에서 그 차이가 전부다. 숫자 하나를 보여 줄 때는 옆에 시간축이 있는 패널을 같이 둔다.

분위수는 평균이 아니다

히스토그램에서 분위수를 구할 때 le 라벨은 버킷 경계다. 그래서 반드시 le 를 남기고 나머지를 합친다.

histogram_quantile(0.95, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

sum by (le) 를 빼먹으면 인스턴스별 버킷이 따로 놀아 값이 엉킨다. 반대로 이미 구한 p95 들을 나중에 평균 내는 것도 틀린다 — 분위수는 평균 낼 수 없다. 인스턴스 열 대의 p95 평균은 전체 p95 가 아니다. 합쳐야 하는 것은 결과가 아니라 버킷이다.

흔한 착각

"타입은 나중에 바꾸면 된다." 바꾸지 않는다. 한 번 그려진 패널은 그대로 남고, 잘못된 타입은 그 패널을 조용히 쓸모없게 만든다.

"파이 차트가 보기 좋다." 파이 차트에는 시간이 없고, 조각 크기를 눈으로 비교하기도 어렵다. 같은 데이터라면 거의 언제나 표나 막대가 낫다.

실무에서 진짜 중요한 것

패널 제목에 단위와 기간을 적는다. "오류" 가 아니라 "5xx 비율 (5분 rate)" 이라고 쓴다. 호출을 받은 사람은 그 패널을 처음 보는 사람이고, 0.004 라는 숫자가 비율인지 개수인지 초당인지 분당인지를 제목 말고는 알 길이 없다.

그리고 축의 단위를 Grafana 에 알려 준다(percentunit, seconds 같은 것). 0.004 보다 0.4% 가, 0.223 보다 223ms 가 새벽 3시에 훨씬 빨리 읽힌다.