Grafana 설치
Prometheus로 메트릭을 수집했는데, PromQL 결과를 매번 수동으로 쿼리해서 확인하고 있진 않으신가요?
Grafana 는 Prometheus를 비롯한 70개 이상의 데이터 소스를 하나의 대시보드에서 통합 시각화하는 오픈소스 플랫폼입니다. 대시보드 구성, 변수 템플릿, 알림 채널 설정까지 지원하여 Prometheus 자체 UI의 한계를 해결합니다.
왜 Grafana인가
Prometheus 자체 UI로도 PromQL 쿼리는 가능하지만, 대시보드와 알림에서 한계가 뚜렷합니다.
| 비교 항목 | Prometheus UI | Grafana |
|---|---|---|
| 쿼리 실행 | PromQL 직접 입력 | PromQL + 시각 쿼리 빌더 |
| 대시보드 | 단일 그래프 | 다중 패널, 변수, 템플릿 |
| 알림 | Alertmanager 별도 구성 | 내장 알림 + 다양한 채널(Slack, Email 등) |
| 데이터 소스 | Prometheus만 | 70개 이상 데이터 소스 지원 |
실무에서 Prometheus + Grafana 조합은 모니터링 스택의 사실상 표준이며, Grafana Labs에서 제공하는 Grafana Enterprise 도 OSS 버전과 동일한 설치 방식을 사용합니다.
GPG 키 등록
패키지를 설치하기 전에, Grafana 공식 GPG 키를 시스템에 먼저 등록합니다. 이 키는 이후 설치할 RPM 패키지의 서명을 검증하는 데 사용됩니다.
wget -q -O gpg.key https://rpm.grafana.com/gpg.key
sudo rpm --import gpg.key
(참고)
rpm --import는 키를 RPM 데이터베이스에 등록하는 명령입니다. 이 과정 없이gpgcheck=1이 설정된 저장소에서 패키지를 설치하면 서명 검증 실패로 설치가 거부됩니다.
YUM 저장소 추가
Grafana는 OS 기본 저장소에 포함되어 있지 않으므로, 공식 저장소를 직접 등록해야 합니다.
sudo tee /etc/yum.repos.d/grafana.repo << 'EOF'
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
EOF
| 설정 항목 | 역할 |
|---|---|
gpgcheck=1 | RPM 패키지 자체의 서명 검증 |
repo_gpgcheck=1 | 저장소 메타데이터의 서명 검증 |
sslverify=1 | HTTPS 통신 시 SSL 인증서 검증 |
sslcacert | SSL 검증에 사용할 CA 인증서 번들 경로 |
gpgcheck만으로도 패키지 위변조는 방지할 수 있지만, repo_gpgcheck까지 켜면 저장소 메타데이터(패키지 목록 자체)의 무결성까지 검증합니다. 프로덕션 환경에서는 세 가지(gpgcheck, repo_gpgcheck, sslverify)를 모두 활성화하는 것을 권장합니다.
패키지 설치
sudo dnf install grafana -y
(참고) Enterprise 에디션을 설치하려면
grafana대신grafana-enterprise를 지정합니다. Grafana Labs는 Enterprise를 기본 에디션으로 권장하며, 무료 기능만 사용하는 경우에도 Enterprise 설치가 가능합니다.
설치가 완료되면 아래 경로에 주요 파일이 배포됩니다.
| 항목 | 경로 |
|---|---|
| 서버 바이너리 | /usr/sbin/grafana-server |
| 메인 설정 파일 | /etc/grafana/grafana.ini |
| 데이터 디렉토리 | /var/lib/grafana |
| 로그 디렉토리 | /var/log/grafana |
| 플러그인 디렉토리 | /var/lib/grafana/plugins |
| systemd 유닛 | grafana-server.service |
서비스 활성화 및 시작
sudo systemctl enable grafana-server # 부팅 시 자동 시작 등록
sudo systemctl start grafana-server # 즉시 서비스 시작
정상 기동 여부는 아래 명령으로 확인할 수 있습니다.
sudo systemctl status grafana-server
Grafana HTTP 서버는 기본적으로 ** 포트 3000**에서 대기합니다. 포트나 바인딩 주소를 변경하려면 /etc/grafana/grafana.ini의 [server] 섹션을 수정합니다.
[server]
http_port = 3000 # 기본 포트
http_addr = 0.0.0.0 # 바인딩 주소 (빈 값이면 모든 인터페이스)
웹 UI 접속
브라우저에서 http://<서버IP>:3000으로 접속하면 로그인 화면이 나타납니다.
| 항목 | 기본값 |
|---|---|
| ** 관리자 계정** | admin |
| ** 관리자 비밀번호** | admin |
| ** 최초 로그인 시** | 비밀번호 변경 강제 |
접속이 안 되는 경우
접속이 안 되면 크게 두 가지를 확인해야 합니다.
서비스가 정상 기동되지 않은 경우
sudo journalctl -u grafana-server --no-pager -n 50
로그에서 포트 충돌(address already in use)이나 설정 파일 파싱 에러를 확인합니다.
방화벽이 TCP 3000을 차단하는 경우
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
클라우드 환경(AWS, GCP 등)에서는 OS 방화벽과 별도로 ** 보안 그룹 또는 네트워크 ACL**에서도 TCP 3000을 열어야 합니다. 양쪽 모두 열려 있어야 접속이 가능합니다.
프로덕션 환경에서 챙길 것
개발/학습 환경에서는 위 설정만으로 충분하지만, 프로덕션에 배포한다면 아래 항목을 추가로 고려해야 합니다.
HTTPS 적용
Grafana는 기본적으로 HTTP로 통신합니다. 프로덕션에서는 /etc/grafana/grafana.ini에서 직접 TLS를 설정하거나, Nginx/Caddy 같은 리버스 프록시를 앞에 두고 SSL termination을 처리하는 방식을 사용합니다.
[server]
protocol = https
cert_file = /path/to/cert.pem
cert_key = /path/to/key.pem
민감 설정값은 환경 변수로
grafana.ini에 DB 비밀번호나 SMTP 인증 정보를 직접 적는 대신, GF_ 접두사가 붙은 환경 변수로 주입할 수 있습니다. 예를 들어 [security] 섹션의 admin_password는 환경 변수 GF_SECURITY_ADMIN_PASSWORD로 오버라이드됩니다.
DNS Rebinding 방어
[security] 섹션에서 enforce_domain = true를 설정하면, 설정된 도메인 이외의 Host 헤더로 들어오는 요청을 거부하여 DNS Rebinding 공격을 방지할 수 있습니다.
주의할 점
admin 기본 비밀번호 방치
설치 직후 admin / admin으로 누구나 접속할 수 있습니다. 최초 로그인 시 비밀번호 변경을 강제하지만, ** 비밀번호를 변경하지 않고 건너뛸 수도 있습니다.** 프로덕션에서 기본 비밀번호를 방치하면 대시보드 데이터 유출, 알림 규칙 변조 등의 위험이 있습니다.
방화벽과 보안 그룹 이중 확인
클라우드 환경(AWS, GCP 등)에서는 OS 방화벽에서 3000 포트를 열어도 ** 보안 그룹(Security Group)이나 네트워크 ACL**에서 별도로 허용하지 않으면 접속이 안 됩니다. "방화벽 열었는데 왜 안 되지?"라는 상황의 대부분은 보안 그룹 미설정이 원인입니다.
grafana.ini 직접 수정 vs 환경 변수
grafana.ini에 DB 비밀번호나 SMTP 인증 정보를 직접 적으면 설정 파일이 유출될 때 민감 정보가 함께 노출됩니다. GF_ 접두사 환경 변수로 주입하면 설정 파일과 시크릿을 분리할 수 있습니다.
정리
| 단계 | 명령 / 확인 |
|---|---|
| GPG 키 등록 | rpm --import gpg.key |
| 저장소 추가 | /etc/yum.repos.d/grafana.repo 작성 |
| 설치 | dnf install grafana -y |
| 서비스 시작 | systemctl enable --now grafana-server |
| 접속 | http://<IP>:3000 (admin / admin) |
| 프로덕션 필수 | HTTPS 적용, 환경 변수로 시크릿 주입, enforce_domain 활성화 |