Grafana — 대시보드는 질문이다 · 알림과 코드로 남기기 · 실습
질문 하나에 답하는 대시보드를 만든다
목표
진짜 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 가 그 디렉터리를 보게 합니다.
참고
lab-status로 지금 떠 있는 것들을 볼 수 있고,promq "<PromQL>"로 쿼리를 바로 던져 볼 수 있습니다.- 이 실습에서는
lab-start-grafana를 쓰지 않습니다. 그 도우미는 데이터소스를 이미 붙여 놓고 띄우기 때문에 1단계를 해 볼 수 없습니다. 이미 켜 두었다면pkill -x grafana로 내리고 시작하세요. - 프로비저닝 설정 파일은 기동할 때 읽힙니다. 파일을 고쳤는데 화면이 안 바뀐다면 대개 다시 안 띄운 것입니다.
- Grafana 기동에는 20~40초가 걸립니다.
curl -s http://127.0.0.1:3000/api/health가"database": "ok"를 줄 때까지 기다리세요. - Grafana 를 다시 띄울 때는 이전 프로세스가 3000 을 놓을 때까지 기다리세요.
pkill -x grafana뒤에 바로 새로 띄우면 새 프로세스가 포트를 못 잡고 죽습니다.
단계 8개
- Grafana 를 띄우고 데이터소스를 파일로 붙인다
- 이 대시보드가 답할 질문을 먼저 적는다
- 질문에 답하는 패널을 만든다
- 패널 타입을 질문의 모양에 맞춘다
- 대시보드 하나가 핸들러 넷을 보게 한다
- 알림보다 런북을 먼저 쓴다
- 알림을 만들고 런북을 가리키게 한다
- 대시보드를 파일로 굳힌다