Grafana provisioning 자동 폴더 구조 기반으로 구성하고 관리

Category
log-central
Status
Published
Tags
Grafana
Provisioning
folder-structure
Description
Published
Slug
  • grafana/dashboards/users/<유저명>/<대시보드파일>.json처럼 유저별 하위 폴더를 구성하고
  • Grafana가 이를 자동으로 폴더로 인식해서 대시보드로 띄워주는 구조 만들기

1. 디렉토리 구조 만들기

grafana/ ┣ dashboards/ ┃ ┗ users/ ┃ ┣ userA/ ┃ ┃ ┗ dashboardA.json ┃ ┣ userB/ ┃ ┃ ┗ dashboardB.json ┣ provisioning/ ┃ ┗ dashboards/ ┃ ┗ dashboards.yaml ┃ ┗ datasources/ ┃ ┗ datasource.yaml
이 구조에서 핵심은 dashboards/users 밑에 유저별 폴더가 있고,
이 폴더명을 Grafana 폴더명으로 인식하게 한다는 점
 

2. dashboards.yaml 작성 (폴더 자동 생성 설정)

apiVersion: 1 providers: - name: 'users' folder: 'All Users' # 대시보드 폴더가 안 들어있으면 이 폴더로 지정됨 type: file options: path: /etc/grafana/dashboards/users foldersFromFilesStructure: true # 핵심: 폴더 구조 그대로 반영
 

이게 있을 때 (true)

providers: - name: 'users' type: file options: path: /etc/grafana/dashboards/users foldersFromFilesStructure: true
  • Grafana가 /users/userA/, /users/userB/ 하위 구조를 감지해서
  • 유저별로 자동으로 폴더 생성해서 대시보드를 넣어줌
  • 예: userA/dashboardA.json → Grafana 내 userA 폴더 아래에 자동 생성
 

3. Docker Compose 설정

Grafana 컨테이너의 볼륨 마운트가 핵심
grafana: image: grafana/grafana:10.2.0 container_name: grafana environment: - GF_SECURITY_ADMIN_USER=admin - GF_SECURITY_ADMIN_PASSWORD=admin - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Viewer - GF_SECURITY_ALLOW_EMBEDDING=true ports: - 23000:3000 volumes: - grafana-data:/var/lib/grafana - ./grafana/provisioning:/etc/grafana/provisioning - ./grafana/dashboards:/etc/grafana/dashboards restart: unless-stopped
 
  • Grafana는 /etc/grafana/dashboards만 마운트해 두면 /users 이하 서브폴더도 자동으로 접근할 수 있음
  • /etc/grafana/dashboards/users/userA/*.json → 실제로는 ./grafana/dashboards/users/userA/*.json이 대응됨.
  • 추가로 /grafana/dashboards/users만 따로 마운트할 필요 없음.

 

4. 대시보드 JSON 만들기

예시 dashboardA.json (간단 버전)
{ "id": null, "uid": "userA-db1", "title": "User A - Dashboard 1", "timezone": "browser", "schemaVersion": 38, "version": 1, "panels": [], "time": { "from": "now-6h", "to": "now" } }
이걸 grafana/dashboards/users/userA/dashboardA.json에 저장

5. Grafana 시작

docker-compose up -d # 또는 docker restart grafana

 

6. 확인 방법

  1. 브라우저에서 http://localhost:23000 접속
  1. 좌측 메뉴 > Dashboards > Manage
  1. 아래처럼 자동으로 폴더/대시보드가 생김:
userA ┗ User A - Dashboard 1 userB ┗ User B - Dashboard 1

작동 방식 요약

구성 요소
설명
foldersFromFilesStructure: true
폴더명을 그대로 Grafana 폴더로 사용
.json 파일
각각의 대시보드 정의
/etc/grafana/dashboards/...
Grafana 내부 디렉토리. 도커에서 ./grafana/dashboards로 연결됨
docker-compose 재시작
YAML 자체 변경 시 필요. JSON만 바꾸면 종종 반영됨 (100% 보장 아님)

장점

  • 코드 기반으로 폴더/유저 대시보드 관리 가능
  • 폴더 단위로 격리된 대시보드 제공
  • iframe 링크 생성 시 접근 구분 용이

 

바로 반영하려면

실시간 반영 방법 정리

updateIntervalSeconds 설정 활용

providers: - name: 'users' folder: 'All Users' type: file updateIntervalSeconds: 1 options: path: /etc/grafana/dashboards/users foldersFromFilesStructure: true
  • Grafana가 해당 디렉토리 내 .json 파일들을 1초 주기로 감시하고, 변경 시 자동 반영함.
  • 파일 수정/덮어쓰기만 해도 적용됨.
  • 폴더 트리 구조도 유지됨 (foldersFromFilesStructure: true)

주의

  • .yaml 설정 파일이 아니라 대시보드 JSON만 실시간 반영됨.
  • 너무 짧은 주기는 디스크 I/O에 부담을 줄 수 있음 (운영에선 5~10초 권장)


 

새로고침 없이 실시간 UI 반영하려면?

  • Grafana UI는 자동으로 대시보드를 polling해서 다시 불러오지 않음
  • 그러나 iframe으로 embed한 경우에는 refresh=10s 같은 파라미터를 통해 주기적 새로고침 가능:
<iframe src="http://your-grafana-url/d/abc123/your-dashboard?orgId=1&refresh=10s" width="100%" height="600"> </iframe>