본문 바로가기
서버구축 (WEB,DB)

Grafana 서비스를 서브 URL 방식으로 복수 인스턴스 운영

by 날으는물고기 2024. 8. 1.

Grafana 서비스를 서브 URL 방식으로 복수 인스턴스 운영

Set up Grafana for high availability - Grafana documentation

서브 URL로 Grafana를 서비스하기 위해 Grafana의 root_url을 설정하고, Nginx를 리버스 프록시로 구성하는 방법을 설명하겠습니다. 이는 Kubernetes의 Ingress나 다른 프록시 설정에서 유용할 수 있습니다.

Docker Compose 파일 구성

먼저 docker-compose.yml 파일을 작성하여 Grafana와 Nginx 컨테이너를 설정합니다.

version: '3.8'

services:
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - "3000:3000"
    volumes:
      - grafana-data:/var/lib/grafana
      - ./grafana.ini:/etc/grafana/grafana.ini
    environment:
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=admin

  nginx:
    image: nginx:latest
    container_name: nginx
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - grafana

volumes:
  grafana-data:

Grafana 설정 파일 구성

Grafana 설정 파일인 grafana.ini를 작성합니다. 이 파일은 Grafana의 서버 설정을 지정합니다.

[server]
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
root_url = http://%(domain)s/grafana/
serve_from_sub_path = true

위 설정에서 root_url을 설정하여 Grafana가 /grafana 경로에서 서비스되도록 하고, serve_from_sub_pathtrue로 설정하여 서브 경로를 지원하도록 합니다.

Nginx 설정 파일 구성

Nginx 설정 파일인 nginx.conf를 작성합니다. 이 파일은 Nginx가 리버스 프록시로 작동하도록 설정합니다.

server {
    listen 80;

    location /grafana/ {
        proxy_pass http://grafana: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;
        proxy_redirect / /grafana/;
    }
}

위 설정은 /grafana/ 경로로 들어오는 요청을 Grafana 컨테이너로 프록시하고, 필요한 헤더를 설정하며, proxy_redirect를 통해 리디렉션 경로를 /grafana/로 수정합니다.

Docker Compose 실행

다음 명령어로 Docker Compose를 실행합니다.

docker-compose up -d

Grafana 접근

브라우저에서 http://<your_domain>/grafana에 접속하여 Grafana가 /grafana 경로에서 올바르게 서비스되는지 확인할 수 있습니다. 여기서 <your_domain>은 실제 도메인 이름이나 IP 주소로 대체합니다.

 

참고로, Grafana를 단일 Docker 명령어로 실행할 때도 동일한 설정을 적용할 수 있습니다.

docker run -ti --rm --name=grafana -e GF_SERVER_ROOT_URL='http://%(domain)s/grafana' -p 3000:3000 grafana/grafana

이 설정을 통해 Grafana의 모든 경로와 리디렉션이 /grafana 경로를 포함하도록 구성됩니다. 이를 통해 프록시가 경로를 재작성하지 않고도 각 애플리케이션이 자체 경로 접두사를 가질 수 있게 됩니다.

 

Grafana를 리버스 프록시 뒤에서 서브 URL로 서비스하는 방법에 대해 여러 가지 프록시 서버(Nginx, HAProxy, IIS, Traefik)를 사용하여 Grafana를 설정하는 방법을 정리했습니다.

Grafana 설정

Grafana의 grafana.ini 설정 파일을 수정하여 root_urlserve_from_sub_path를 설정해야 합니다.

[server]
domain = example.com
root_url = %(protocol)s://%(domain)s:%(http_port)s/grafana/
serve_from_sub_path = true
  • domain: Grafana가 사용할 도메인 이름을 설정합니다.
  • root_url: Grafana가 서브 URL에서 서비스될 수 있도록 설정합니다.
  • serve_from_sub_path: 서브 경로에서 서비스를 활성화합니다.

이 설정을 저장한 후 Grafana를 재시작합니다.

Nginx 설정

Nginx를 사용하여 Grafana를 리버스 프록시로 설정하는 방법입니다.

# WebSocket 연결을 위한 설정
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

upstream grafana {
  server localhost:3000;
}

server {
  listen 80;
  server_name example.com;

  location /grafana/ {
    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;
    proxy_pass http://grafana;
    proxy_redirect off;
    rewrite ^/grafana/(.*) /$1 break;
  }

  # Grafana Live WebSocket 연결 프록시
  location /grafana/api/live/ {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Host $host;
    proxy_pass http://grafana;
  }
}

위 설정은 Grafana가 /grafana 경로에서 서비스될 수 있도록 합니다. Nginx 설정을 저장한 후 Nginx를 재시작합니다.

sudo systemctl restart nginx

HAProxy 설정

HAProxy를 사용하여 Grafana를 리버스 프록시로 설정하는 방법입니다.

frontend http-in
  bind *:80
  acl is_grafana path_beg /grafana
  use_backend grafana_backend if is_grafana

backend grafana_backend
  server grafana localhost:3000
  http-request set-path %[path,regsub(^/grafana/,/)]

위 설정은 Grafana가 /grafana 경로에서 서비스될 수 있도록 합니다. HAProxy 설정을 저장한 후 HAProxy를 재시작합니다.

sudo systemctl restart haproxy

IIS 설정

IIS를 사용하여 Grafana를 리버스 프록시로 설정하는 방법입니다. IIS에서는 URL Rewrite 모듈이 필요합니다.

  1. IIS 관리자에서 기본 웹사이트의 URL Rewrite 설정으로 이동합니다.
  2. Inbound Rule을 추가합니다.
    • 패턴: grafana(/)?(.*)
    • Ignore case 체크박스 선택
    • Rewrite URL을 http://localhost:3000/{R:2}로 설정
    • Append query string 체크박스 선택
    • Stop processing of subsequent rules 체크박스 선택

web.config 파일 예시

<rewrite>
    <rules>
        <rule name="Grafana" enabled="true" stopProcessing="true">
            <match url="grafana(/)?(.*)" />
            <action type="Rewrite" url="http://localhost:3000/{R:2}" logRewrittenUrl="false" />
        </rule>
    </rules>
</rewrite>

Traefik 설정

Traefik을 사용하여 Grafana를 리버스 프록시로 설정하는 방법입니다. Docker provider와 라벨을 사용하여 설정할 수 있습니다.

Docker Compose 파일

version: '3'

services:
  traefik:
    image: traefik:v2.1
    volumes:
      - './traefik.yml:/etc/traefik/traefik.yml'
    ports:
      - '80:80'
      - '8080:8080'

  grafana:
    image: grafana/grafana:latest
    environment:
      - GF_SERVER_ROOT_URL=/grafana
      - GF_SERVER_SERVE_FROM_SUB_PATH=true
    labels:
      - "traefik.http.routers.grafana.rule=Host(`example.com`) && PathPrefix(`/grafana`)"
      - "traefik.http.services.grafana.loadbalancer.server.port=3000"

Traefik 동적 설정 파일

http:
  routers:
    grafana:
      rule: Host(`example.com`) && PathPrefix(`/grafana`)
      service: grafana

  services:
    grafana:
      loadBalancer:
        servers:
          - url: http://grafana:3000

Docker Compose를 사용하여 서비스를 실행합니다.

docker-compose up -d

위 방법들을 통해 다양한 리버스 프록시 설정에서 Grafana를 서브 URL로 서비스할 수 있습니다. 각 설정은 Grafana가 서브 경로에서 올바르게 작동하도록 도와줍니다.

728x90

댓글