Ubuntu에서 Grafana 설치 및 사용: 완전 가이드

모니터링 및 시각화를 위한 Grafana 설정 방법 정리

Page content

Grafana은 메트릭, 로그, 트레이스를 시각화하여 실행 가능한 통찰을 제공하는 모니터링 및 관찰 플랫폼으로, 시각적으로 인상적인 시각화를 통해 리딩 오픈소스 플랫폼입니다.

grafana 이것은 Grafana 웹사이트에서 캡처한 스크린샷입니다.

Grafana란 무엇인가요?

Grafana는 여러 플랫폼에서 사용할 수 있는 오픈소스 분석 및 상호작용형 시각화 웹 애플리케이션입니다. 지원되는 데이터 소스에 연결되면 웹에서 차트, 그래프, 경고를 제공합니다. Grafana는 DevOps에서 인프라, 애플리케이션, 서비스를 모니터링하는 데 널리 사용됩니다.

주요 기능:

  • 유니버설 대시보드 유연한 템플릿을 사용하여 아름다운, 동적인 대시보드를 생성
  • 다중 데이터 소스 Prometheus, InfluxDB, Elasticsearch, MySQL, PostgreSQL 등 150개 이상의 데이터 소스에 연결
  • 경고 Slack, PagerDuty, 이메일, 웹훅을 포함한 통합 경고 시스템
  • 팀 협업 대시보드 공유, 팀 생성, 사용자 권한 관리
  • 플러그인 생태계 패널, 데이터 소스, 앱으로 기능 확장
  • 클라우드 네이티브 Kubernetes, Docker, 클라우드 환경에 완벽하게 적합

왜 Ubuntu에서 Grafana를 사용해야 하나요?

Ubuntu LTS 버전은 Grafana를 호스팅하기 위한 안정적이고 보안적인 기반을 제공합니다. 새로 시작하거나 모니터링 인프라를 위한 새로운 Ubuntu 환경을 설정해야 한다면, Ubuntu 24.04 설치 방법에 대한 우리의 포괄적인 가이드를 확인하여 시스템을 준비하세요.

이점은 다음과 같습니다:

  • 장기 지원 및 보안 업데이트
  • 대규모 커뮤니티 및 광범위한 문서
  • Grafana Labs에서 제공하는 네이티브 APT 저장소 지원
  • 우수한 Docker 호환성
  • 개발 및 프로덕션 환경 모두에 적합

설치 방법

방법 1: APT 저장소를 통해 설치 (추천)

이 방법은 Ubuntu의 패키지 관리자를 통해 자동 업데이트를 제공하는 가장 간단한 방법입니다. Ubuntu 터미널 작업에 익숙하지 않거나 생산성을 높이려면, 우리의 Ubuntu 키보드 단축키 가이드를 확인하여 시스템 내비게이션을 더 효율적으로 할 수 있습니다.

단계 1: 필수 조건 설치

sudo apt-get install -y apt-transport-https software-properties-common wget

단계 2: Grafana GPG 키 추가

sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

단계 3: Grafana APT 저장소 추가

안정적인 릴리스를 위한:

echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

단계 4: 업데이트 및 Grafana 설치

sudo apt-get update
sudo apt-get install grafana

단계 5: Grafana 서비스 시작 및 활성화

sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server.service

단계 6: 설치 확인

sudo systemctl status grafana-server

이제 Grafana는 http://localhost:3000에서 실행됩니다.

방법 2: Docker를 사용하여 설치

Docker는 컨테이너화된 배포에 고립 및 더 쉬운 관리를 제공합니다.

단계 1: Docker 설치 (아직 설치하지 않은 경우)

sudo apt-get update
sudo apt-get install docker.io
sudo systemctl start docker
sudo systemctl enable docker

단계 2: Grafana 컨테이너 실행

docker run -d \
  --name=grafana \
  -p 3000:3000 \
  -v grafana-storage:/var/lib/grafana \
  grafana/grafana-oss

설정을 유지하려면:

docker run -d \
  --name=grafana \
  -p 3000:3000 \
  -v grafana-storage:/var/lib/grafana \
  -v $(pwd)/grafana.ini:/etc/grafana/grafana.ini \
  -e "GF_SERVER_ROOT_URL=http://your-domain.com" \
  -e "GF_SECURITY_ADMIN_PASSWORD=your-secure-password" \
  grafana/grafana-oss

방법 3: Docker Compose를 사용하여 설치

docker-compose.yml 파일을 생성합니다:

version: '3.8'

services:
  grafana:
    image: grafana/grafana-oss:latest
    container_name: grafana
    restart: unless-stopped
    ports:
      - '3000:3000'
    volumes:
      - grafana-storage:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=your-secure-password
      - GF_USERS_ALLOW_SIGN_UP=false
      - GF_SERVER_ROOT_URL=http://your-domain.com

volumes:
  grafana-storage:

다음 명령어로 시작합니다:

docker-compose up -d

초기 설정

첫 로그인

  1. http://your-server-ip:3000으로 이동
  2. 기본 자격 증명:
    • 사용자 이름: admin
    • 비밀번호: admin
  3. 즉시 비밀번호를 변경하도록 요청됩니다 (강력히 추천!)

첫 번째 데이터 소스 설정

예시: Prometheus 추가

  1. 설정 (기어 아이콘) → 데이터 소스 클릭
  2. 데이터 소스 추가 클릭
  3. Prometheus 선택
  4. 설정:
    • 이름: Prometheus
    • URL: http://localhost:9090 (Prometheus 인스턴스에 맞게 조정)
    • 접근: 서버 (기본값)
  5. 저장 및 테스트 클릭

예시: InfluxDB 추가

  1. InfluxDB를 데이터 소스로 선택
  2. 설정:
    • 쿼리 언어: Flux 또는 InfluxQL
    • URL: http://localhost:8086
    • 데이터베이스: your_database_name
    • 사용자/비밀번호: 사용자 자격 증명
  3. 저장 및 테스트 클릭

첫 번째 대시보드 생성

  1. 생성 (+ 아이콘) → 대시보드 클릭
  2. 새 패널 추가 클릭
  3. 데이터 소스 선택
  4. 쿼리 작성 (Prometheus 예시):
rate(http_requests_total[5m])
  1. 시각화 설정:
    • 패널 유형 선택 (그래프, 게이지, 스탯, 테이블 등)
    • 범례, 축, 임계값 설정
    • 필요한 경우 변환 추가
  2. 패널 저장을 위해 적용 클릭
  3. 대시보드 저장 (디스크 아이콘) 클릭

고급 설정

Grafana 설정 구성

메인 설정 파일을 편집합니다:

sudo nano /etc/grafana/grafana.ini

중요 설정:

[server]
# 프로토콜 (http, https, h2, socket)
protocol = http
http_port = 3000
domain = your-domain.com
root_url = http://your-domain.com

[security]
admin_user = admin
admin_password = your-secure-password
secret_key = your-secret-key

[users]
# 사용자 가입 비활성화
allow_sign_up = false
allow_org_create = false

[auth.anonymous]
enabled = false

[smtp]
enabled = true
host = smtp.gmail.com:587
user = your-email@gmail.com
password = your-app-password
from_address = your-email@gmail.com
from_name = Grafana

변경 후 재시작:

sudo systemctl restart grafana-server

역방향 프록시 설정 (Nginx)

Nginx 설치:

sudo apt install nginx

Nginx 설정 파일 생성:

sudo nano /etc/nginx/sites-available/grafana
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

활성화 및 재시작:

sudo ln -s /etc/nginx/sites-available/grafana /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

Let’s Encrypt을 사용하여 HTTPS 활성화

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your-domain.com

경고 설정 구성

단계 1: 알림 채널 구성

  1. 경고연락처 지점으로 이동
  2. 새 연락처 지점 클릭
  3. 유형 선택 (이메일, Slack, PagerDuty, 웹훅 등)
  4. 설정 구성 (예: Slack 웹훅 URL)
  5. 테스트 및 저장

단계 2: 경고 규칙 생성

  1. 대시보드의 패널을 편집
  2. 경고 탭 클릭
  3. 조건 구성:
    • 언제: avg()
    • 어디서: query(A, 5m, now)
    • 80 이상: 80
  4. 평가 간격 설정
  5. 알림 채널 추가
  6. 저장

인기 있는 사용 사례

인프라 모니터링

스택: Prometheus + Node Exporter + Grafana

시스템 메트릭 모니터링:

  • CPU, 메모리, 디스크 사용량
  • 네트워크 트래픽
  • 시스템 부하
  • 디스크 I/O

NVIDIA GPU 모니터링을 위해 특히, Grafana와 잘 통합되는 Linux/Ubuntu GPU 모니터링 앱을 탐색하는 것이 좋습니다.

대시보드 ID: 1860 (Node Exporter Full)

Kubernetes 모니터링

스택: Prometheus + kube-state-metrics + Grafana

K8s 클러스터 모니터링:

  • Pod 및 컨테이너 메트릭
  • 클러스터 리소스 사용량
  • 배포 상태
  • Ingress/서비스 모니터링

대시보드 ID: 15757 (Kubernetes 클러스터 모니터링)

애플리케이션 성능 모니터링

스택: Loki + Promtail + Grafana

애플리케이션 로그 및 메트릭 모니터링:

  • 요청 레이트 및 지연 시간
  • 오류 레이트
  • 로그 집합 및 필터링
  • 분산 추적

데이터베이스 모니터링

MySQL, PostgreSQL, MongoDB 모니터링:

  • 쿼리 성능
  • 연결 풀
  • 느린 쿼리
  • 복제 상태

대시보드 최고 실천 방법

  1. 목적에 따라 정리: 다른 팀/서비스에 대한 별도의 대시보드 생성
  2. 변수 사용: 템플릿 변수를 사용하여 동적 대시보드 생성
  3. 적절한 시간 범위 설정: 의미 있는 시간 창으로 기본 설정
  4. 주석 추가: 배포 및 사고 표시
  5. 폴더 사용: 대시보드를 논리적으로 정리
  6. 버전 관리 활성화: 대시보드 변경 추적
  7. 갱신 간격 설정: 실시간 요구사항과 성능 사이의 균형 유지
  8. 문서 추가: 메트릭 설명을 위한 텍스트 패널 사용

일반적인 문제 해결

Grafana 서비스가 시작되지 않음

# 로그 확인
sudo journalctl -u grafana-server -f

# 설정 확인
sudo grafana-cli admin reset-admin-password newpassword

데이터 소스 연결 문제

  • 네트워크 연결 확인: telnet datasource-host port
  • 방화벽 규칙 확인
  • 자격 증명 확인
  • 데이터 소스 서비스 로그 확인

성능 문제

  • 쿼리 시간 범위 축소
  • 데이터 소스 쿼리 최적화
  • 서버 자원 증가
  • 가능한 경우 캐싱 사용
  • 쿼리 결과 캐싱 고려

대시보드가 로드되지 않음

  • 브라우저 캐시 지우기
  • 브라우저 콘솔에서 오류 확인
  • 대시보드 JSON이 손상되지 않았는지 확인
  • Grafana 서버 로그 확인

백업 및 유지보수

Grafana 데이터베이스 백업

# Grafana 중지
sudo systemctl stop grafana-server

# SQLite 데이터베이스 백업
sudo cp /var/lib/grafana/grafana.db /backup/grafana-$(date +%Y%m%d).db

# 설정 백업
sudo cp /etc/grafana/grafana.ini /backup/grafana-ini-$(date +%Y%m%d).bak

# Grafana 시작
sudo systemctl start grafana-server

자동 백업 스크립트

다음은 Grafana 백업을 자동화하는 bash 스크립트입니다. bash 스크립팅 문법 및 명령어에 대한 빠른 참조가 필요하다면, 우리의 Bash 가이드를 확인하세요.

#!/bin/bash
BACKUP_DIR="/backup/grafana"
mkdir -p $BACKUP_DIR
DATE=$(date +%Y%m%d_%H%M%S)

# 데이터베이스 백업
sudo cp /var/lib/grafana/grafana.db $BACKUP_DIR/grafana-$DATE.db

# 대시보드를 API를 통해 백업
curl -H "Authorization: Bearer YOUR_API_KEY" \
  http://localhost:3000/api/search?type=dash-db | \
  jq -r '.[] | .uid' | \
  xargs -I{} curl -H "Authorization: Bearer YOUR_API_KEY" \
  http://localhost:3000/api/dashboards/uid/{} > $BACKUP_DIR/dashboards-$DATE.json

# 30일 이상 된 백업 삭제
find $BACKUP_DIR -mtime +30 -delete

Grafana 업데이트

# APT 방법
sudo apt update
sudo apt upgrade grafana

# Docker 방법
docker pull grafana/grafana-oss:latest
docker-compose down
docker-compose up -d

보안 강화

  1. 기본 자격 증명 즉시 변경
  2. HTTPS 사용 유효한 인증서와 함께
  3. 방화벽 구성:
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw enable
    
  4. 익명 접근 비활성화
  5. 강력한 인증 사용 (LDAP, OAuth, SAML)
  6. 정기 업데이트 Grafana 업데이트 유지
  7. 사용자 권한 제한 역할 기반 접근 제어 사용
  8. 감사 로깅 활성화
  9. 가능한 경우 읽기 전용 데이터 소스 사용
  10. 레이트 제한 적용

Grafana 자체 모니터링

Grafana 인스턴스를 모니터링하십시오:

  1. grafana.ini에서 메트릭 엔드포인트 활성화:
    [metrics]
    enabled = true
    
  2. Grafana를 Prometheus 대상으로 추가
  3. Grafana 메트릭 대시보드 가져오기

유용한 플러그인

CLI를 통해 플러그인 설치:

sudo grafana-cli plugins install <plugin-id>
sudo systemctl restart grafana-server

추천 플러그인:

  • grafana-piechart-panel: 향상된 파이 차트
  • grafana-worldmap-panel: 지리적 데이터 시각화
  • grafana-clock-panel: 시간 및 날짜 표시
  • grafana-simple-json-datasource: 커스텀 JSON API에 연결
  • alexanderzobnin-zabbix-app: Zabbix 통합

통합 예시

Grafana + Prometheus + Node Exporter

완전한 모니터링 스택 설정:

# Node Exporter 설치
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd -rs /bin/false node_exporter

# systemd 서비스 생성
sudo tee /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl start node_exporter
sudo systemctl enable node_exporter

Grafana + InfluxDB + Telegraf

시간 시리즈 모니터링 설정:

# InfluxDB 설치
wget -q https://repos.influxdata.com/influxdata-archive_compat.key
echo '393e8779c89ac8d958f81f942f9ad7fb82a25e133faddaf92e15b16e6ac9ce4c influxdata-archive_compat.key' | sha256sum -c && cat influxdata-archive_compat.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg > /dev/null
echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive_compat.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
sudo apt update && sudo apt install influxdb
sudo systemctl start influxdb
sudo systemctl enable influxdb

# Telegraf 설치
sudo apt install telegraf
sudo systemctl start telegraf
sudo systemctl enable telegraf

성능 최적화

쿼리 최적화

  • 적절한 시간 범위 사용
  • 반환되는 데이터 포인트 제한
  • 캐싱 전략 사용
  • 가능하면 소스에서 데이터 집계
  • Prometheus에서 기록 규칙 사용

서버 최적화

[database]
# 최대 연결 수 증가
max_open_conn = 300
max_idle_conn = 100

[dataproxy]
# 타임아웃 설정
timeout = 30
keep_alive_seconds = 30

[rendering]
# 동시 렌더링 제한 활성화
concurrent_render_limit = 10

유용한 링크

결론

Ubuntu에서의 Grafana는 모니터링 및 관찰에 강력하고 유연한 플랫폼을 제공합니다. 단일 서버를 모니터링하거나 대규모 Kubernetes 클러스터를 관리하더라도 Grafana의 풍부한 시각화 기능, 광범위한 데이터 소스 지원, 그리고 활발한 커뮤니티는 DevOps 팀에게 탁월한 선택이 됩니다.

APT 저장소 방법을 사용하여 간단한 설정을 시작하고, 첫 번째 데이터 소스를 연결한 후, 모니터링 기능을 점진적으로 확장하세요. Grafana 배포가 성장하면서 보안, 정기 백업, 성능 최적화를 우선시하는 것을 기억하세요.

적절한 설정과 최고 실천 방법을 통해 Grafana는 관찰 스택에서 필수적인 도구가 되며, 신뢰성 있고 성능이 우수한 시스템을 유지하는 데 실행 가능한 통찰을 제공합니다.