🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

Grafana 대시보드 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 22. · 3 Views

Grafana 대시보드 완벽 가이드

실시간 모니터링의 핵심, Grafana 대시보드를 처음부터 끝까지 배워봅니다. Prometheus 연동부터 알람 설정까지, 초급 개발자도 쉽게 따라할 수 있는 실전 가이드입니다.


목차

  1. Grafana 소개
  2. Prometheus 데이터소스
  3. 대시보드 생성
  4. 패널 구성
  5. 알람 규칙 설정
  6. 대시보드 공유

1. Grafana 소개

어느 날 신입 개발자 김개발 씨는 팀장님께 급한 호출을 받았습니다. "김개발 씨, 지금 서버 CPU 사용률이 얼마나 되는지 알아요?" 당황한 김개발 씨는 서버에 접속해서 명령어를 입력하기 시작했습니다.

팀장님이 한숨을 쉬며 말했습니다. "그래서 Grafana 대시보드를 만들라고 했잖아요."

Grafana는 시계열 데이터를 시각화하는 오픈소스 플랫폼입니다. 마치 자동차의 계기판처럼, 서버와 애플리케이션의 상태를 한눈에 보여줍니다.

실시간으로 데이터를 모니터링하고, 문제가 발생하면 즉시 알람을 받을 수 있습니다. 수많은 데이터 소스와 연동이 가능해서 현업에서 가장 많이 사용되는 모니터링 도구입니다.

다음 코드를 살펴봅시다.

// Grafana Docker 설치 명령어
docker run -d \
  --name=grafana \
  -p 3000:3000 \
  -e "GF_SECURITY_ADMIN_PASSWORD=admin" \
  -e "GF_INSTALL_PLUGINS=grafana-clock-panel" \
  grafana/grafana:latest

// 초기 접속: http://localhost:3000
// 기본 계정: admin / admin

김개발 씨는 입사한 지 2주 된 신입 개발자입니다. 오늘 아침, 팀장님께서 "모니터링 대시보드를 만들어 보세요"라는 업무를 주셨습니다.

대시보드? 모니터링?

학교에서는 배우지 않았던 용어들이 쏟아집니다. 옆자리 선배 박시니어 씨가 김개발 씨의 곤란한 표정을 보고 다가왔습니다.

"처음이시죠? Grafana는 생각보다 어렵지 않아요." Grafana란 무엇일까요? 쉽게 비유하자면, Grafana는 병원의 환자 모니터링 장비와 같습니다.

환자의 심박수, 혈압, 체온을 실시간으로 보여주는 것처럼, Grafana는 서버의 CPU, 메모리, 네트워크 상태를 실시간으로 보여줍니다. 의사가 환자 상태를 한눈에 파악하듯이, 개발자도 시스템 상태를 한눈에 파악할 수 있습니다.

왜 Grafana가 필요할까요? Grafana가 없던 시절에는 어땠을까요? 개발자들은 서버마다 일일이 접속해서 명령어를 입력해야 했습니다.

"top 명령어로 CPU를 확인하고, free로 메모리를 확인하고..." 서버가 10대만 되어도 하루 종일 서버 상태만 확인하다가 시간이 다 갑니다. 더 큰 문제는 과거 데이터를 볼 수 없다는 점이었습니다.

"어제 오후 3시에 서버가 느렸는데 그때 CPU가 얼마였지?" 이런 질문에는 답할 수가 없었습니다. Grafana의 등장 바로 이런 문제를 해결하기 위해 Grafana가 등장했습니다.

Grafana를 사용하면 여러 서버의 상태를 한 화면에서 볼 수 있습니다. 또한 과거 데이터를 차트로 시각화할 수 있어서 트렌드 분석이 가능합니다.

무엇보다 임계값을 설정해서 자동 알람을 받을 수 있다는 큰 이점이 있습니다. 설치 과정 살펴보기 위의 Docker 명령어를 한 줄씩 살펴보겠습니다.

먼저 docker run -d는 Grafana를 백그라운드에서 실행한다는 의미입니다. -p 3000:3000으로 포트를 매핑하면 브라우저에서 접속할 수 있습니다.

GF_SECURITY_ADMIN_PASSWORD는 초기 관리자 비밀번호를 설정하는 환경변수입니다. 마지막으로 grafana/grafana:latest 이미지를 다운로드해서 실행합니다.

실무에서는 어떻게 사용할까요? 예를 들어 쇼핑몰 서비스를 운영한다고 가정해봅시다. 블랙프라이데이 세일 기간에는 트래픽이 평소의 10배로 증가합니다.

이때 Grafana 대시보드를 보면서 서버를 증설할지 말지 실시간으로 판단할 수 있습니다. 삼성, 네이버, 카카오 같은 대기업에서도 Grafana를 핵심 모니터링 도구로 사용하고 있습니다.

처음 사용할 때 주의할 점 하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 너무 많은 패널을 한 대시보드에 넣는 것입니다.

한 화면에 50개의 차트가 있으면 오히려 중요한 정보를 놓치기 쉽습니다. 따라서 목적에 맞게 대시보드를 분리해서 사용해야 합니다.

첫 설치 완료 다시 김개발 씨의 이야기로 돌아가 봅시다. 박시니어 씨의 설명을 들은 김개발 씨는 Docker 명령어를 입력했습니다.

잠시 후 브라우저에서 http://localhost:3000에 접속하니 Grafana 로그인 화면이 나타났습니다. "와, 정말 쉽네요!" Grafana를 제대로 이해하면 시스템 문제를 미리 예방하고, 장애가 발생해도 빠르게 대응할 수 있습니다.

여러분도 오늘 배운 내용을 실제 프로젝트에 적용해 보세요.

실전 팁

💡 - Docker 없이도 설치 가능하지만, Docker 사용을 권장합니다 (환경 독립성)

  • 초기 비밀번호는 반드시 변경하세요 (보안 필수)
  • 무료 버전으로도 충분히 강력한 기능을 사용할 수 있습니다

2. Prometheus 데이터소스

Grafana 설치를 마친 김개발 씨는 대시보드를 만들려고 했지만, 아무것도 표시되지 않았습니다. "당연하죠.

데이터가 없는데 뭘 보여줄까요?" 박시니어 씨가 웃으며 말했습니다. "먼저 Prometheus를 연결해야 해요.

Grafana는 화면만 보여주는 거고, 실제 데이터는 Prometheus가 수집하거든요."

Prometheus는 시계열 데이터를 수집하고 저장하는 오픈소스 모니터링 시스템입니다. Grafana와 함께 사용되는 가장 대표적인 데이터 소스입니다.

마치 CCTV가 영상을 녹화하고, 모니터가 영상을 보여주는 관계처럼, Prometheus는 메트릭을 수집하고 Grafana는 이를 시각화합니다. 두 도구를 연결하면 강력한 모니터링 시스템이 완성됩니다.

다음 코드를 살펴봅시다.

// Prometheus Docker 설치
docker run -d \
  --name=prometheus \
  -p 9090:9090 \
  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus:latest

// prometheus.yml 설정 파일
global:
  scrape_interval: 15s  // 15초마다 메트릭 수집

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']  // Prometheus 자체 모니터링

김개발 씨는 Grafana 화면을 열어두고 막막함을 느꼈습니다. 아무런 데이터도 보이지 않습니다.

마치 텔레비전은 있는데 안테나가 없는 것 같은 기분입니다. 박시니어 씨가 설명을 시작했습니다.

"Grafana는 데이터를 직접 수집하지 않아요. 대신 다양한 데이터 소스에서 데이터를 가져와서 보여주는 역할만 합니다." 데이터 소스란 무엇일까요? 쉽게 비유하자면, Grafana는 뉴스 앵커이고 데이터 소스는 취재 기자입니다.

기자가 현장에서 정보를 수집하면, 앵커는 이를 정리해서 시청자에게 전달합니다. 마찬가지로 Prometheus가 서버에서 메트릭을 수집하면, Grafana는 이를 보기 좋은 차트로 보여줍니다.

왜 Prometheus를 사용할까요? 데이터 소스는 여러 종류가 있습니다. MySQL, PostgreSQL, InfluxDB, Elasticsearch 등 다양합니다.

하지만 시스템 모니터링에서는 Prometheus가 사실상 표준입니다. Prometheus는 Pull 방식으로 데이터를 수집합니다.

각 서버에서 메트릭을 Prometheus에게 보내는 것이 아니라, Prometheus가 주기적으로 서버에 접속해서 메트릭을 가져옵니다. 이렇게 하면 서버 부하가 줄어들고 중앙에서 수집 주기를 관리할 수 있습니다.

Prometheus 설정 파일 이해하기 위의 prometheus.yml 파일을 살펴보겠습니다. scrape_interval: 15s는 15초마다 메트릭을 수집한다는 의미입니다.

이 값이 너무 짧으면 네트워크 부하가 증가하고, 너무 길면 실시간성이 떨어집니다. 일반적으로 10~30초 사이를 사용합니다.

scrape_configs는 어디서 메트릭을 수집할지 정의합니다. 위 예제에서는 Prometheus 자신의 메트릭을 수집하도록 설정했습니다.

실무에서는 여기에 애플리케이션 서버, 데이터베이스 서버 등을 추가합니다. Grafana에 Prometheus 연결하기 이제 두 도구를 연결해볼 차례입니다.

Grafana 웹 화면에서 왼쪽 메뉴의 Configuration → Data Sources를 클릭합니다. "Add data source" 버튼을 누르고 Prometheus를 선택합니다.

URL에 http://localhost:9090을 입력하고 "Save & Test" 버튼을 누르면 연결이 완료됩니다. 박시니어 씨가 김개발 씨의 화면을 보며 고개를 끄덕입니다.

"초록색으로 'Data source is working'이라고 나오면 성공이에요." 실무에서의 활용 예를 들어 쿠버네티스 클러스터를 운영한다고 가정해봅시다. 각 Pod마다 Prometheus 메트릭을 노출하도록 설정합니다.

Prometheus는 자동으로 새로운 Pod를 발견하고 메트릭을 수집합니다. 이렇게 수집된 데이터를 Grafana에서 시각화하면, 클러스터 전체의 상태를 한눈에 파악할 수 있습니다.

흔한 실수와 해결법 하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 방화벽 문제입니다.

Prometheus가 9090 포트로 실행 중인데, 방화벽에서 막혀있으면 Grafana에서 접속할 수 없습니다. 로컬 환경에서는 문제없지만, 서버 환경에서는 반드시 포트를 열어야 합니다.

또 다른 실수는 Docker 네트워크 문제입니다. Grafana와 Prometheus를 각각 Docker로 실행하면, localhost로는 서로 통신할 수 없습니다.

같은 Docker 네트워크에 연결하거나, 호스트 IP를 사용해야 합니다. 연결 완료 김개발 씨는 화면에 초록색 성공 메시지를 보고 환호했습니다.

"됐어요!" 박시니어 씨가 미소를 지으며 말했습니다. "이제 진짜 시작이에요.

대시보드를 만들어 봅시다." 데이터 소스 연결은 Grafana의 핵심입니다. Prometheus 외에도 다양한 데이터 소스를 연결할 수 있으니, 프로젝트 요구사항에 맞게 선택하세요.

실전 팁

💡 - Prometheus와 Grafana를 같은 Docker 네트워크에 배치하면 연결이 쉽습니다

  • 데이터 소스는 여러 개 추가할 수 있습니다 (MySQL, Prometheus 동시 사용 가능)
  • 연결 테스트는 필수입니다. 빨간색 오류가 나오면 URL과 방화벽을 먼저 확인하세요

3. 대시보드 생성

데이터 소스 연결을 마친 김개발 씨는 드디어 대시보드를 만들 준비가 되었습니다. "처음부터 만들려면 복잡하니까, 먼저 기본 템플릿을 사용해 보세요." 박시니어 씨가 Grafana 공식 대시보드 저장소 페이지를 열어주었습니다.

"여기 12만 개가 넘는 대시보드가 공유되어 있어요."

대시보드는 여러 개의 패널(차트)을 모아놓은 화면입니다. Grafana에서는 대시보드를 직접 만들 수도 있고, 커뮤니티에서 공유된 템플릿을 가져올 수도 있습니다.

마치 파워포인트 템플릿처럼, 목적에 맞는 대시보드를 선택해서 바로 사용할 수 있습니다. 처음에는 템플릿으로 시작해서, 점차 커스터마이징하는 것이 좋은 학습 방법입니다.

다음 코드를 살펴봅시다.

// Grafana 대시보드 JSON 설정 예제
{
  "dashboard": {
    "title": "시스템 모니터링",
    "tags": ["prometheus", "system"],
    "timezone": "browser",
    "refresh": "5s",  // 5초마다 자동 새로고침
    "panels": [
      {
        "id": 1,
        "title": "CPU 사용률",
        "type": "graph",
        "targets": [
          {
            "expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\"idle\"}[1m])) * 100)"
          }
        ]
      }
    ]
  }
}

김개발 씨는 Grafana 화면에서 "+" 아이콘을 클릭했습니다. "Dashboard", "Folder", "Import" 세 가지 옵션이 나타났습니다.

어떤 것을 선택해야 할까요? 박시니어 씨가 마우스를 가리켰습니다.

"처음이니까 Import를 선택하세요. 다른 사람이 만들어둔 대시보드를 가져오는 거예요." 대시보드의 개념 쉽게 비유하자면, 대시보드는 자동차의 계기판입니다.

속도계, 연료계, 엔진 온도계가 한 화면에 모여 있듯이, CPU 차트, 메모리 차트, 네트워크 차트가 한 화면에 모여 있습니다. 운전자가 계기판을 보고 차량 상태를 파악하듯이, 개발자는 대시보드를 보고 시스템 상태를 파악합니다.

왜 템플릿을 사용할까요? 처음부터 대시보드를 만들면 어떤 메트릭을 어떻게 시각화해야 할지 막막합니다. 하지만 Grafana 커뮤니티에는 이미 검증된 대시보드가 수만 개 공유되어 있습니다.

예를 들어 Node Exporter Full 대시보드는 리눅스 서버 모니터링의 표준처럼 사용됩니다. CPU, 메모리, 디스크, 네트워크 등 필요한 모든 메트릭이 이미 설정되어 있습니다.

ID 번호만 입력하면 바로 사용할 수 있습니다. 대시보드 가져오기 과정 Grafana에서 "Import" 메뉴를 선택하고 대시보드 ID를 입력합니다.

유명한 대시보드로는 1860번(Node Exporter Full)이 있습니다. 이 번호를 입력하고 "Load" 버튼을 누르면 자동으로 설정이 불러와집니다.

마지막으로 Prometheus 데이터 소스를 선택하고 "Import" 버튼을 누르면 완료됩니다. 김개발 씨가 1860을 입력하고 로드 버튼을 눌렀습니다.

순식간에 화면 가득 차트들이 나타났습니다. "우와, 이렇게 쉽게 되는 거예요?" 대시보드 설정 이해하기 위의 JSON 코드를 살펴보겠습니다.

refresh: "5s"는 5초마다 자동으로 데이터를 갱신한다는 의미입니다. 실시간 모니터링에는 510초, 일반 모니터링에는 30초1분이 적절합니다.

timezone: "browser"는 사용자의 브라우저 시간대를 따른다는 뜻입니다. panels 배열에는 대시보드에 포함될 차트들이 정의됩니다.

각 패널은 고유한 idtitle을 가지며, type으로 차트 종류를 지정합니다. 실무에서의 활용 예를 들어 쇼핑몰 서비스를 운영한다고 가정해봅시다.

다음과 같이 목적별로 대시보드를 분리합니다. 시스템 대시보드: CPU, 메모리, 디스크 등 인프라 메트릭 애플리케이션 대시보드: API 응답 시간, 에러율, 트랜잭션 수 비즈니스 대시보드: 주문 수, 매출, 동시 접속자 수 이렇게 분리하면 각 팀이 필요한 정보만 빠르게 확인할 수 있습니다.

주의할 점 하지만 주의할 점도 있습니다. 초보 개발자들이 흔히 하는 실수 중 하나는 대시보드를 너무 많이 만드는 것입니다.

목적이 불분명한 대시보드가 수십 개 쌓이면 정작 필요할 때 찾기 어렵습니다. 따라서 폴더로 체계적으로 관리하고, 더 이상 사용하지 않는 대시보드는 삭제해야 합니다.

또 다른 실수는 새로고침 주기를 너무 짧게 설정하는 것입니다. 1초마다 갱신하면 Prometheus와 Grafana에 과도한 부하가 걸립니다.

실시간성이 중요한 경우에만 5초 이하로 설정하세요. 첫 대시보드 완성 김개발 씨는 화면에 나타난 수십 개의 차트를 보며 감탄했습니다.

CPU 사용률이 실시간으로 움직이고, 메모리 그래프가 부드럽게 그려집니다. "이제 서버 상태를 한눈에 볼 수 있겠어요!" 박시니어 씨가 고개를 끄덕였습니다.

"다음 단계는 패널을 직접 수정해 보는 거예요. 템플릿을 그대로 쓰는 것보다, 우리 프로젝트에 맞게 커스터마이징하는 게 중요하거든요." 대시보드는 한 번 만들고 끝이 아닙니다.

프로젝트가 발전하면서 지속적으로 개선해야 합니다. 여러분도 오늘 배운 내용을 바탕으로 첫 대시보드를 만들어 보세요.

실전 팁

💡 - Grafana 공식 대시보드: https://grafana.com/grafana/dashboards/ 에서 검색하세요

  • Node Exporter(1860), Docker Monitoring(893), Kubernetes(12114) 등이 인기 템플릿입니다
  • 템플릿을 가져온 후에는 반드시 저장(Save)하세요. 그렇지 않으면 브라우저를 닫으면 사라집니다

4. 패널 구성

대시보드를 만든 김개발 씨는 이제 패널을 직접 수정하고 싶어졌습니다. "이 CPU 차트 색깔을 빨간색으로 바꿀 수 있나요?

그리고 경고선도 추가하고 싶어요." 박시니어 씨가 웃으며 대답했습니다. "물론이죠.

패널 제목을 클릭하고 Edit를 선택하면 됩니다. Grafana의 진짜 매력은 여기서부터예요."

패널은 대시보드를 구성하는 개별 차트입니다. 그래프, 게이지, 테이블, 히트맵 등 다양한 시각화 타입을 선택할 수 있습니다.

각 패널은 쿼리로 데이터를 가져오고, 시각화 옵션으로 표현 방식을 설정하며, 임계값으로 경고 색상을 지정할 수 있습니다. 패널 구성을 잘하면 복잡한 데이터도 직관적으로 이해할 수 있습니다.

다음 코드를 살펴봅시다.

// Prometheus 쿼리 예제 (PromQL)
// CPU 사용률 (백분율)
100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

// 메모리 사용률 (백분율)
(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

// 디스크 사용률 (백분율)
(node_filesystem_size_bytes - node_filesystem_free_bytes) / node_filesystem_size_bytes * 100

// HTTP 요청 속도 (초당 요청 수)
rate(http_requests_total[5m])

김개발 씨는 대시보드에 있는 CPU 차트를 클릭했습니다. 드롭다운 메뉴가 나타나고 "Edit" 옵션이 보입니다.

클릭하자 화면이 두 부분으로 나뉘었습니다. 위쪽에는 실시간 미리보기, 아래쪽에는 설정 패널이 나타났습니다.

박시니어 씨가 설명을 시작했습니다. "패널 편집 화면은 크게 세 가지 탭으로 구성되어 있어요.

Query, Transform, 그리고 Panel options죠." 패널의 구조 이해하기 쉽게 비유하자면, 패널은 레스토랑 주문서와 같습니다. Query는 "어떤 재료를 가져올까"를 정의하고, Transform은 "재료를 어떻게 손질할까"를 정의하며, Panel options는 "어떻게 예쁘게 플레이팅할까"를 정의합니다.

최종적으로 테이블에 나온 요리처럼, 사용자에게 보기 좋은 차트가 제공됩니다. PromQL 쿼리 작성하기 가장 중요한 부분은 Query 탭입니다.

여기서 Prometheus 쿼리 언어인 PromQL을 작성합니다. 위 코드의 첫 번째 쿼리를 살펴봅시다.

node_cpu_seconds_total{mode="idle"}는 CPU가 놀고 있는 시간을 의미합니다. rate(...[5m])는 최근 5분간의 변화율을 계산합니다.

마지막으로 100에서 빼면 실제로 사용 중인 CPU 비율이 나옵니다. 김개발 씨가 쿼리를 입력하자 그래프가 실시간으로 변했습니다.

"오, 바로 반영되네요!" 박시니어 씨가 고개를 끄덕였습니다. "Grafana는 타이핑하는 동안 계속 미리보기를 보여줘요.

쿼리가 맞는지 즉시 확인할 수 있죠." 시각화 타입 선택하기 오른쪽 패널에서 Visualization을 클릭하면 다양한 차트 타입이 나타납니다. Time series: 시간에 따른 변화를 보여주는 선 그래프 (CPU, 메모리에 적합) Gauge: 현재 값을 게이지로 표시 (사용률, 진행률에 적합) Stat: 숫자 하나를 크게 표시 (총 사용자 수, 에러 건수에 적합) Bar chart: 항목 간 비교 (서버별 트래픽 비교에 적합) Heatmap: 분포를 색상으로 표현 (응답 시간 분포에 적합) 김개발 씨는 CPU 차트를 Time series로 두고, 메모리는 Gauge로 변경해 봤습니다.

"확실히 용도에 따라 다른 타입이 더 보기 좋네요." 임계값과 색상 설정하기 Panel options 탭에서 Thresholds를 설정할 수 있습니다. 예를 들어 CPU 사용률에 경고선을 추가해 봅시다.

70% 이상이면 노란색, 90% 이상이면 빨간색으로 표시되도록 설정합니다. 이렇게 하면 문제가 발생하기 전에 시각적으로 경고를 받을 수 있습니다.

박시니어 씨가 화면을 가리켰습니다. "보세요, 이제 CPU가 80%를 넘으니까 그래프가 노란색으로 변하죠?

이게 바로 임계값의 힘이에요." 실무에서의 활용 예를 들어 웹 애플리케이션을 모니터링한다고 가정해봅시다. 다음과 같은 패널 구성을 추천합니다.

상단: Stat 패널로 핵심 지표 표시 (평균 응답 시간, 에러율, 동시 접속자) 중단: Time series로 트렌드 파악 (시간대별 트래픽, API 호출 수) 하단: Table로 상세 정보 제공 (느린 쿼리 목록, 에러 로그) 이렇게 구성하면 한눈에 전체 상황을 파악하고, 필요하면 상세 정보를 바로 확인할 수 있습니다. 흔한 실수와 해결법 하지만 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 쿼리 범위를 너무 넓게 설정하는 것입니다. rate(...[1d])처럼 하루 범위로 설정하면 최근 변화를 감지하기 어렵습니다.

실시간 모니터링에는 1~5분 범위가 적절합니다. 또 다른 실수는 범례를 너무 복잡하게 만드는 것입니다.

서버가 100대면 범례도 100줄이 됩니다. 이럴 때는 avg by (environment) 같은 집계 함수로 그룹화해야 합니다.

패널 완성 김개발 씨는 CPU 패널을 완전히 자기 스타일로 바꿨습니다. 제목을 한글로 변경하고, 색상을 조정하고, 임계값을 추가했습니다.

"이제 정말 제 대시보드 같아요!" 박시니어 씨가 미소를 지었습니다. "잘하셨어요.

다음은 알람을 설정해서, CPU가 임계값을 넘으면 자동으로 알림을 받도록 만들어 봅시다." 패널 구성은 Grafana의 핵심 기능입니다. 처음에는 기본 설정으로 시작해서, 점차 프로젝트에 최적화된 패널을 만들어 가세요.

실전 팁

💡 - PromQL은 처음에 어렵지만, 기본 함수(rate, sum, avg)만 알아도 대부분 해결됩니다

  • 패널 제목에 단위를 명시하세요 (예: "CPU 사용률 (%)", "응답 시간 (ms)")
  • 색상은 일관성 있게 사용하세요 (노란색=경고, 빨간색=위험)

5. 알람 규칙 설정

패널 설정을 마친 김개발 씨는 뿌듯한 마음으로 퇴근했습니다. 그런데 다음 날 아침, 팀장님께 질책을 받았습니다.

"어젯밤 서버 CPU가 100%까지 올라갔는데 왜 아무도 모르고 있었어요?" 김개발 씨는 당황했습니다. "대시보드를 만들어 뒀는데요..." 박시니어 씨가 작게 웃으며 말했습니다.

"대시보드는 사람이 직접 봐야 하잖아요. 알람을 설정해야 해요."

알람 규칙은 특정 조건이 만족되면 자동으로 알림을 보내는 기능입니다. Grafana에서는 Alert Rules를 설정해서 Slack, 이메일, 문자 메시지 등으로 알림을 받을 수 있습니다.

마치 화재 경보기처럼, 문제가 발생하면 즉시 담당자에게 알려줍니다. 24시간 대시보드를 모니터링할 수 없기 때문에, 알람 설정은 필수입니다.

다음 코드를 살펴봅시다.

// Grafana Alert Rule 설정 예제 (YAML)
apiVersion: 1
groups:
  - name: system_alerts
    interval: 1m  // 1분마다 체크
    rules:
      - uid: cpu_alert
        title: CPU 사용률 높음
        condition: A  // 아래 쿼리 결과가 조건을 만족하면 알람
        data:
          - refId: A
            queryType: promql
            expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m  // 5분 동안 지속되면 알람
        annotations:
          summary: "서버 CPU 사용률이 80%를 초과했습니다"

김개발 씨는 반성했습니다. 아무리 예쁜 대시보드를 만들어도, 항상 화면을 보고 있을 수는 없습니다.

특히 밤에는 모니터링할 사람이 없습니다. 그렇다면 어떻게 해야 할까요?

박시니어 씨가 Grafana 왼쪽 메뉴의 "Alerting" 아이콘을 클릭했습니다. "여기서 알람 규칙을 만들 수 있어요.

조건을 설정하면 자동으로 알림을 보내줍니다." 알람의 필요성 쉽게 비유하자면, 알람은 자동차의 경고등입니다. 운전자가 계기판을 계속 보지 않아도, 엔진 과열이나 오일 부족이 발생하면 경고등이 켜집니다.

마찬가지로 개발자가 대시보드를 계속 보지 않아도, CPU 과부하나 메모리 부족이 발생하면 알람이 울립니다. 알람이 없으면 어떻게 될까요? 실제로 많은 회사에서 알람 설정 부재로 큰 장애를 겪습니다.

한밤중에 데이터베이스 디스크가 가득 찼는데 아무도 몰랐습니다. 아침에 출근해서 확인했을 때는 이미 서비스가 몇 시간째 중단된 상태였습니다.

만약 디스크 사용률 90% 알람이 설정되어 있었다면, 담당자가 새벽에 일어나서 디스크를 정리할 수 있었을 것입니다. 알람 규칙 만들기 Grafana 화면에서 Alerting → Alert rules → New alert rule을 클릭합니다.

먼저 Rule name을 입력합니다. 예를 들어 "CPU 사용률 80% 초과"처럼 명확하게 작성합니다.

다음으로 Query를 설정합니다. 위 코드처럼 CPU 사용률이 80%를 넘는지 확인하는 PromQL을 입력합니다.

김개발 씨가 쿼리를 입력하자 아래쪽에 그래프가 나타났습니다. "현재 CPU가 30%니까 알람이 안 울리는 게 정상이네요." 알람 조건 설정하기 위 코드의 for: 5m 부분을 살펴봅시다.

이 설정은 5분 동안 지속적으로 조건을 만족해야 알람을 발생시킨다는 의미입니다. 순간적으로 CPU가 튀는 것은 정상일 수 있습니다.

예를 들어 배치 작업이 실행되면 1분 정도 CPU가 올라갈 수 있습니다. 이런 경우 알람을 받으면 오히려 방해가 됩니다.

따라서 for 값을 적절히 설정해야 합니다. 일반적으로 3~10분 사이로 설정합니다.

알림 채널 연결하기 알람 규칙을 만들었으면, 이제 어디로 알림을 보낼지 설정해야 합니다. Alerting → Contact points로 이동합니다.

"New contact point" 버튼을 누르고 Slack, Email, Webhook 등을 선택합니다. Slack을 선택했다면 Webhook URL을 입력합니다.

테스트 버튼을 누르면 실제로 Slack에 메시지가 도착합니다. 박시니어 씨가 자신의 핸드폰을 보여줬습니다.

Slack 메시지가 와 있습니다. "CPU 사용률이 80%를 초과했습니다." 김개발 씨가 감탄했습니다.

"우와, 진짜 오네요!" 실무에서의 활용 예를 들어 이커머스 서비스를 운영한다고 가정해봅시다. 다음과 같은 알람을 설정합니다.

P1 (긴급): 서비스 중단, API 응답 없음 → 즉시 전화 알림 P2 (중요): CPU 90% 이상, 에러율 5% 이상 → Slack 알림 P3 (경고): 디스크 80% 이상, 응답 시간 느림 → 이메일 알림 이렇게 우선순위를 나눠서, 정말 중요한 알람만 즉시 확인하도록 합니다. 알람 피로 주의하기 하지만 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 알람을 너무 많이 설정하는 것입니다. 하루에 100개의 알람이 오면 사람들은 알람을 무시하게 됩니다.

"또 알람이네" 하면서 확인조차 하지 않습니다. 이를 알람 피로라고 합니다.

따라서 정말 중요한 것만 알람으로 설정하고, 나머지는 대시보드에서 모니터링하는 것으로 충분합니다. 알람 임계값도 너무 낮게 설정하지 마세요.

첫 알람 설정 완료 김개발 씨는 CPU, 메모리, 디스크 세 가지 알람을 설정했습니다. "이제 안심하고 퇴근할 수 있겠어요." 박시니어 씨가 웃으며 대답했습니다.

"네, 하지만 알람이 오면 바로 대응해야 해요. 알람만 받고 아무것도 안 하면 의미가 없거든요." 알람 설정은 모니터링의 완성입니다.

사람이 24시간 모니터링할 수 없기 때문에, 시스템이 대신 감시하도록 만드는 것입니다.

실전 팁

💡 - 알람 조건은 처음에는 보수적으로 설정하고, 점차 조정하세요

  • 알람 메시지에는 "무엇이 문제인지"와 "어떻게 해결하는지"를 함께 작성하세요
  • 주말이나 휴일에도 알람을 받을지 정책을 정하세요 (On-call 순번 운영)

6. 대시보드 공유

완벽한 대시보드를 만든 김개발 씨는 팀장님께 자랑하고 싶었습니다. "팀장님, 제가 대시보드를 만들었는데 한번 보실래요?" 그런데 팀장님 컴퓨터에서는 Grafana에 로그인할 수 없었습니다.

"계정을 만들어 드려야 하나요?" 박시니어 씨가 웃으며 말했습니다. "공유 기능을 사용하면 돼요.

링크만 보내면 누구나 볼 수 있어요."

대시보드 공유는 다른 사람에게 대시보드를 보여주는 기능입니다. Grafana에서는 권한 설정, 스냅샷, 퍼블릭 링크 등 다양한 방법으로 공유할 수 있습니다.

마치 구글 문서를 공유하듯이, 대시보드도 읽기 전용으로 공유하거나 편집 권한을 줄 수 있습니다. 팀 협업에서 가장 중요한 기능 중 하나입니다.

다음 코드를 살펴봅시다.

// Grafana API를 이용한 대시보드 공유 (cURL)
// 스냅샷 생성하기
curl -X POST http://localhost:3000/api/snapshots \
  -H "Content-Type: application/json" \
  -u admin:admin \
  -d '{
    "dashboard": {
      "panels": [...],
      "title": "시스템 모니터링"
    },
    "expires": 3600  // 1시간 후 만료
  }'

// 응답 예시
{
  "deleteKey": "abc123",
  "deleteUrl": "http://localhost:3000/api/snapshots-delete/abc123",
  "key": "xyz789",
  "url": "http://localhost:3000/dashboard/snapshot/xyz789"
}

김개발 씨는 대시보드 화면 상단의 "Share" 버튼을 클릭했습니다. 팝업 창이 나타나고 여러 가지 공유 옵션이 보였습니다.

Link, Snapshot, Export 세 가지 탭이 있습니다. 박시니어 씨가 설명을 시작했습니다.

"공유 방법은 상황에 따라 달라요. 팀원에게는 링크를, 외부에는 스냅샷을, 백업에는 Export를 사용합니다." 공유의 필요성 쉽게 비유하자면, 대시보드 공유는 회의실 프레젠테이션과 같습니다.

혼자 보는 모니터링이 아니라, 팀 전체가 같은 화면을 보면서 문제를 논의할 수 있습니다. 특히 장애 대응 상황에서는 여러 사람이 동시에 같은 대시보드를 보면서 협업해야 합니다.

링크 공유하기 가장 간단한 방법은 링크 공유입니다. Share 팝업의 Link 탭에서 현재 대시보드 URL을 복사할 수 있습니다.

단, 이 방법은 상대방도 Grafana에 로그인할 수 있어야 합니다. 회사 내부 팀원들에게 공유할 때 사용합니다.

"Lock time range" 옵션을 켜면 현재 시간 범위가 고정됩니다. 예를 들어 "어제 오후 3시에 문제가 있었어요"라고 말하면서 해당 시간대로 고정된 링크를 보낼 수 있습니다.

스냅샷 만들기 외부 사람이나 로그인 없이 공유하고 싶다면 스냅샷을 사용합니다. Snapshot 탭에서 "Publish to snapshots.raintank.io" 버튼을 누르면 현재 화면이 이미지처럼 저장됩니다.

생성된 URL은 누구나 접속할 수 있습니다. 단, 스냅샷은 정적 데이터입니다.

실시간으로 업데이트되지 않고, 스냅샷을 만든 순간의 데이터만 보여줍니다. 김개발 씨가 스냅샷 URL을 팀장님께 카카오톡으로 보냈습니다.

팀장님이 클릭하자 로그인 없이 바로 대시보드가 보였습니다. "오, 편하네요!" 위의 API 코드는 프로그래밍으로 스냅샷을 만드는 방법입니다.

expires 값으로 만료 시간을 설정할 수 있습니다. 보안이 중요한 데이터라면 1시간이나 24시간 후 자동 삭제되도록 설정하세요.

권한 관리하기 팀 내부에서는 권한 관리가 중요합니다. Dashboard settings → Permissions로 이동하면 사용자별로 권한을 설정할 수 있습니다.

View(보기만 가능), Edit(수정 가능), Admin(삭제 가능) 세 단계가 있습니다. 예를 들어 주니어 개발자에게는 View 권한만 주고, 시니어 개발자에게는 Edit 권한을 줍니다.

이렇게 하면 실수로 대시보드가 삭제되는 것을 막을 수 있습니다. 대시보드 내보내기 백업이나 버전 관리를 위해서는 Export 기능을 사용합니다.

Share → Export → Save to file을 클릭하면 JSON 파일로 다운로드됩니다. 이 파일을 Git에 저장하면 대시보드의 변경 이력을 추적할 수 있습니다.

또한 다른 Grafana 서버에 똑같은 대시보드를 만들 때도 유용합니다. 박시니어 씨가 조언했습니다.

"중요한 대시보드는 주기적으로 Export해서 백업하세요. Grafana 서버가 날아가면 모든 대시보드가 사라질 수 있거든요." 실무에서의 활용 예를 들어 스타트업에서 투자 유치를 한다고 가정해봅시다.

투자자에게 "우리 서비스는 이렇게 모니터링됩니다"라고 보여주고 싶습니다. 이때 스냅샷을 만들어서 공유하면, 로그인 없이도 전문적인 모니터링 시스템을 보여줄 수 있습니다.

또 다른 예로, 장애 보고서를 작성할 때 특정 시간대의 대시보드를 스냅샷으로 첨부하면 상황을 명확하게 설명할 수 있습니다. 보안 주의사항 하지만 주의할 점도 있습니다.

초보 개발자들이 흔히 하는 실수 중 하나는 민감한 데이터를 퍼블릭 스냅샷으로 공유하는 것입니다. 스냅샷은 누구나 접속할 수 있으므로, 내부 IP 주소나 서버 이름 같은 정보가 노출될 수 있습니다.

외부 공유가 필요하다면 민감한 정보는 가린 후 공유하세요. 또 다른 실수는 만료 시간을 설정하지 않는 것입니다.

스냅샷이 영구적으로 남아있으면 보안 위험이 됩니다. 가능한 한 짧은 만료 시간을 설정하세요.

공유 완료 김개발 씨는 이제 팀 전체가 대시보드를 볼 수 있도록 권한을 설정했습니다. 또한 주간 회의용 스냅샷도 만들어서 공유 폴더에 저장했습니다.

"이제 팀 전체가 서버 상태를 한눈에 볼 수 있어요!" 박시니어 씨가 만족스럽게 고개를 끄덕였습니다. "잘하셨어요.

이제 Grafana의 기본은 모두 배웠네요. 앞으로 실무에서 활용하면서 더 많은 기능을 익혀 보세요." 대시보드 공유는 협업의 시작입니다.

혼자만 보는 대시보드가 아니라, 팀 전체가 공유하는 모니터링 문화를 만들어 보세요.

실전 팁

💡 - 스냅샷은 만료 시간을 반드시 설정하세요 (보안 필수)

  • 중요한 대시보드는 JSON으로 Export해서 Git에 저장하세요
  • 팀원에게는 View 권한을, 담당자에게만 Edit 권한을 주세요 (실수 방지)

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Grafana#Prometheus#Dashboard#Monitoring#Alerting#마이크로서비스

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.

함께 보면 좋은 카드 뉴스