LabHub

Grafana — 대시보드는 질문이다 · 알림과 코드로 남기기 · 실습

질문 하나에 답하는 대시보드를 만든다

LabHub 에서 이어서 보기

목표

진짜 Grafana 를 띄워 진짜 Prometheus 를 붙이고, 질문 하나에 답하는 대시보드를 처음부터 만듭니다. 다 만든 뒤에는 그것을 프로비저닝 파일로 굳혀, 이 Grafana 를 지워도 같은 화면을 다시 세울 수 있게 만듭니다.

이 실습은 화면이 있는 첫 실습입니다. Grafana 를 http://127.0.0.1:3000 으로 띄우면 터미널 위쪽의 웹 미리보기 단추로 실제 Grafana 화면을 열 수 있습니다. 패널은 그 화면에서 클릭으로 만들어도 되고 API 로 올려도 됩니다 — 채점기는 어느 쪽으로 만들었는지 묻지 않고 Grafana 에 올라간 결과만 봅니다.

왜 중요한가

대시보드는 그림이 아니라 질문에 답하는 도구입니다. 그래서 이 실습은 패널을 그리는 순서가 아니라 질문 → 쿼리 → 패널 → 알림 → 파일 순서로 갑니다.

마지막 단계가 특히 중요합니다. 클릭으로 만든 대시보드는 Grafana 의 데이터베이스 안에만 있어서, 그 데이터베이스가 사라지면 함께 사라지고 누가 언제 무엇을 고쳤는지도 남지 않습니다. 실무에서 "그때 그 대시보드" 를 못 찾는 일은 거의 언제나 이 이유입니다.

이 파드에는 shop-api 라는 가상의 서비스 지표가 12시간치 들어 있습니다. http_requests_total 에는 handler 라벨이 넷(/api/orders, /api/search, /api/users, /healthz) 있고, 응답시간은 http_request_duration_seconds_bucket 히스토그램으로 들어옵니다.

단계

1. /root/graf/provisioning/datasources/prometheus.yml 에 데이터소스를 선언하고, Grafana 를 http://127.0.0.1:3000 으로 띄웁니다. 데이터소스의 uid 는 labprom, 주소는 http://127.0.0.1:9090 입니다.
2. 이 대시보드가 답할 질문을 /root/graf/02-question.md 에 한 문장으로, 그 질문에 답하는 PromQL 을 /root/graf/02-question.promql 에 한 줄로 적습니다.
3. 그 쿼리를 담은 패널 하나짜리 대시보드를 만들어 올립니다. uid 는 shop-api 입니다.
4. p95 응답시간과 현재 요청률 패널을 더합니다. 타입은 질문의 모양을 따릅니다.
5. handler 템플릿 변수를 넣고 모든 패널이 그 변수로 좁혀지게 합니다.
6. /root/graf/runbook.md 에 런북을 씁니다 — 무엇이 깨졌나 / 먼저 볼 것 / 되돌리는 법.
7. /root/graf/provisioning/alerting/shop-api.yml 에 알림 규칙을 만들고 런북을 가리키게 합니다.
8. 대시보드를 JSON 으로 내보내 /root/graf/dashboards/shop-api.json 에 두고, 제공자 파일로 Grafana 가 그 디렉터리를 보게 합니다.

참고

단계 8개

  1. Grafana 를 띄우고 데이터소스를 파일로 붙인다
  2. 이 대시보드가 답할 질문을 먼저 적는다
  3. 질문에 답하는 패널을 만든다
  4. 패널 타입을 질문의 모양에 맞춘다
  5. 대시보드 하나가 핸들러 넷을 보게 한다
  6. 알림보다 런북을 먼저 쓴다
  7. 알림을 만들고 런북을 가리키게 한다
  8. 대시보드를 파일로 굳힌다