팀 프로젝트 festabook에서 학습한 내용을 정리한 글입니다.
💭 들어가며
지난 글까지 Spring Server와 Grafana Server 구축을 완료했으며, 본 글에서는 Grafana GUI를 기반으로 대시보드를 구성하고 주요 쿼리 문법을 간단히 살펴본다. 본 문서는 전반적인 구축 방법을 기록하는 데 목적이 있어 간단한 예시 위주로 설명하며, 실제 운영 환경과는 일부 차이가 있을 수 있다.
✅ 대시보드
대시보드는 운영 과정에서 개발자가 반복적으로 확인하는 핵심 쿼리들을 시각적으로 묶어둔 화면이다. Explore 탭에서 직접 쿼리를 실행해도 되지만, 자주 사용하는 메트릭, 로그, 트레이스는 대시보드로 정리해 두는 편이 편리하다.
▶ Prometheus
Prometheus 메트릭 시각화는 Grafana Community Dashboard에 공개된 템플릿을 기반으로 구성했다. 사용한 대시보드는 JVM, Node Exporter, Spring Boot 관련 템플릿이며, 각각의 URL는 다음과 같다.
<https://grafana.com/grafana/dashboards/4701-jvm-micrometer/>
<https://grafana.com/grafana/dashboards/1860-node-exporter-full/>
<https://grafana.com/grafana/dashboards/17175-spring-boot-observability/>
추후 Alert 편에서 festabook 서비스에 특화된 커스텀 메트릭을 추가해 활용할 예정이다.
🔽 방법
1️⃣ 대시보드 생성 방법

- Dashboards → New → Import 메뉴 진입

- Dashboard ID 또는 URL 입력

- 대시보드 이름 입력 및 데이터 소스로 Prometheus 선택

- 대시보드 생성 완료
2️⃣ 환경별(dev, prod) 분리 설정
기본 템플릿은 단일 환경을 기준으로 구성되어 있으므로, env 라벨을 활용한 환경 분리 작업이 필요하다. 이를 위해 다음 단계를 순차적으로 적용한다.

- Dashboards → 대시보드 → Edit 선택

- Settings 메뉴 진입

- Variables → New variable 클릭

- env 변수를 새로 추가

- 모든 패널의 PromQL 쿼리에 {env="$env"} 조건을 추가

- 이 작업을 통해 대시보드 상단의 env 선택 값에 따라 패널 데이터가 동적으로 변경
- 설정이 완료된 대시보드를 복제한 뒤, 하나는 dev, 하나는 prod 환경으로 각각 고정하여 운영
▶ Loki
Loki 대시보드는 Grafana에서 커스텀으로 직접 생성했다. Prometheus와 달리 Community Dashboard를 사용하지 않고, 로그 특성에 맞게 필요한 패널만 구성하는 방식을 선택했다.
🔽 방법

- Dashboards → New → New dashboard 메뉴 진입
최초 대시보드 생성 시에는 Create dashboard 메뉴가 활성화되어 있다.

- Loki 대시보드는 커스텀 구성 예정이므로 Add visualization 메뉴로 진입

- 데이터 소스로 Loki 선택

- 로그 수집 단계에서 Alloy를 통해 env 라벨을 미리 부여했기 때문에, LogQL에서는 {env=”dev”}, {env=”prod”} 과 같이 환경 기준으로 로그를 조회 가능

- 설정이 완료된 대시보드를 복제한 뒤, 하나는 dev, 하나는 prod 환경으로 각각 고정하여 운영
▶ Tempo
Tempo 대시보드도 Grafana에서 커스텀으로 직접 생성했다.
🔽 방법

- Loki와 똑같이 Dashboards → New → New dashboard 메뉴 진입

- Tempo 대시보드도 커스텀 구성 예정이므로 Add visualization 메뉴로 진입

- 데이터 소스로 Tempo 선택

- 애플리케이션에서 생성한 Span에 env 라벨을 미리 부여했기 때문에, TraceQL에서는 {env=”dev”}, {env=”prod”} 과 같이 환경 기준으로 트레이스를 조회 가능

- 설정이 완료된 대시보드를 복제한 뒤, 하나는 dev, 하나는 prod 환경으로 각각 고정하여 운영
✅ 쿼리 문법
대시보드는 운영 중 개발자가 자주 확인하는 쿼리들을 모아 한눈에 볼 수 있도록 구성한 화면이다. 반면, 보다 세밀한 분석이나 특정 상황을 확인할 때는 각 모니터링 스택의 쿼리 문법을 직접 사용해 탐색한다. Grafana의 Explore 탭에서는 Prometheus, Loki, Tempo 등 각 스택에 맞는 쿼리를 실행해 메트릭, 로그, 트레이스를 자유롭게 조회할 수 있다.
▶ Prometheus


- 방법: Explore → Data source: Prometheus
- 쿼리 언어: PromQL
- 용도: 메트릭 조회, 집계, 시계열 분석
- 기본 형태
함수(메트릭{라벨}[시간])
- 메트릭 조회 예시
sum(rate(http_server_requests_seconds_count[1m]))
- 라벨 필터링 예시
{env="prod", app="festabook-server"}
자세한 PromQL 문법은 공식 문서를 참고한다.
- Prometheus 공식 문서
▶ Loki

- 방법: Explore → Data source: Loki
- 쿼리 언어: LogQL
- 용도: 로그 필터링, 검색, 간단한 집계
- 기본 형태
라벨 선택자 | 필터 | 파서 | 필터 | 집계
- 로그 조회 예시
{env="prod"} |= "ERROR" | json
자세한 LogQL 문법은 공식 문서를 참고한다.
- Grafana 공식 문서
▶ Tempo

- 사용 위치: Explore → Data source: Tempo
- 쿼리 언어: TraceQL
- 용도: 트레이스 탐색, 서비스 간 호출 분석
- 기본 형태
{ 조건식 }
- 트레이스 조회 예시
{ resource.service.name = "festabook-server" }
- Span 기준 조회 예시
{ span.http.method = "POST" }
자세한 TraceQL 문법은 공식 문서를 참고한다.
- Grafana 공식 문서
📍 참고 자료
'DevOps > Log&Monitoring' 카테고리의 다른 글
| [Log&Monitoring] Grafana Observability 구축 (4) - Mimir, Object Storage 백업 (0) | 2025.12.29 |
|---|---|
| [Log&Monitoring] Grafana Observability 구축 (2) - Alloy 기반 수집 파이프라인 (0) | 2025.12.28 |
| [Log&Monitoring] Grafana Observability 구축 (1) - Metric, Log, Trace 아키텍처 (0) | 2025.12.28 |
| [Log&Monitoring] 관측 가능성(Observability) (6) | 2025.08.08 |