Grafana 서비스를 서브 URL 방식으로 복수 인스턴스 운영
서브 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_path
를 true
로 설정하여 서브 경로를 지원하도록 합니다.
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_url
과 serve_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 모듈이 필요합니다.
- IIS 관리자에서 기본 웹사이트의 URL Rewrite 설정으로 이동합니다.
- 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가 서브 경로에서 올바르게 작동하도록 도와줍니다.