Custom Grafana 인수인계 문서
Custom Grafana 인수인계 문서
- 위치:
- Git:
http://10.10.30.238:8980/98_personal/observability-all-in-one/-/tree/main/custom-grafana?ref_type=heads - 디렉터리:
observability-all-in-one/custom-grafana/
- Git:
이 문서는 Custom Grafana 이미지가 어떤 역할을 하는지, 어디를 수정해야 하는지, 어떻게 빌드/배포하는지를 새 담당자가 빠르게 파악할 수 있도록 정리한 인수인계용 가이드입니다.
세부 구조 설명은 custom-grafana/README.md 내용을 기반으로 하며, 운영상 자주 쓰는 관점 위주로 재구성했습니다.
1. 이 배포본이 하는 일
1.1 목적
Custom Grafana 배포본은 아래 세 가지를 하나의 Docker 이미지로 묶어서 배포하기 위한 프로젝트입니다.
- 커스텀 UI (
public/) - 사전 설치 플러그인 (
data/plugins/) - 대시보드·데이터소스·알림·권한 등 프로비저닝 리소스 (
conf/provisioning/)
운영상 의미는 다음과 같습니다.
- 새 환경(Kubernetes / VM 등)에 배포할 때, **“이미지만 교체하면 동일한 Grafana 구성을 복제”**할 수 있습니다.
- UI·대시보드·알림·플러그인 구성이 Git으로 버전 관리되기 때문에, 변경 이력 추적과 롤백이 용이합니다.
- 오프라인/폐쇄망 환경에서도 필요한 플러그인 및 자산을 이미지 안에 포함해서 바로 사용 가능합니다.
1.2 주요 특징 정리
- 베이스 이미지:
grafana/grafana:12.2.0 - 플러그인 설치:
- Dockerfile 내
GF_INSTALL_PLUGINS환경 변수를 통해 기본 플러그인 설치 - 추가/고정 버전이 필요하면 이 값을 수정
- Dockerfile 내
- UI 교체:
/usr/share/grafana/public전체를custom-grafana/public/로 교체- React/TypeScript 기반 프론트엔드 구조 유지
- 프로비저닝:
conf/provisioning/이하 YAML을 통해 대시보드, 데이터소스, 알림, 플러그인, 권한 자동 생성
- 데이터 보존:
data/폴더를 외부 볼륨에 마운트하면 알림 상태·로그·플러그인 캐시 유지 가능
2. 코드/파일 구조
2.1 최상위 구조
custom-grafana/ 디렉터리의 상위 구조는 다음과 같습니다.
custom-grafana/
├── Dockerfile # 베이스 이미지 + 커스텀 자산 복사
├── docker-compose.yml # 단일 Grafana 서비스 실행 정의 (로컬 테스트용)
├── build.sh / make-dockerfile.sh
├── conf/ # Grafana 설정, 프로비저닝 리소스, 백업본
├── data/ # 실행 시 참조되는 영속 데이터(플러그인, 로그 등)
├── plugins-bundled/ # Grafana 동봉 예제 플러그인 (참고용)
└── public/ # 커스텀 UI 소스/빌드/에셋 전체실제 운영/개발 시, 자주 건드리게 될 부분은 아래 네 가지입니다.
- Grafana 설정/프로비저닝:
conf/, 특히conf/provisioning/ - 대시보드/알림 JSON/YAML:
conf/provisioning/dashboards/json/,conf/provisioning/alerting/ - 이미지 빌드/배포 스크립트:
Dockerfile,build.sh,make-dockerfile.sh
3. 로컬에서 확인하는 방법 (필수 절차)
3.1 요구 사항
- Docker 24.x 이상
- (선택) Docker Compose v2 (
docker compose명령) - 레지스트리로 push 할 경우, 해당 레지스트리 로그인 정보
3.2 로컬에서 Grafana 띄워보기
- 리포지토리 클론 후 디렉터리 이동
git clone http://10.10.30.238:8980/98_personal/observability-all-in-one.git
cd observability-all-in-one/custom-grafana- Docker 이미지 빌드
docker compose build- 컨테이너 실행 (기본 3000 포트 사용)
docker compose up -d- 로그 확인
docker compose logs -f grafana-
브라우저 접속
- URL:
http://localhost:3000 - 계정 정보는 공용 운영 정책에 따름 (공유된 관리자 계정 혹은 SSO/LDAP)
- URL:
3.3 홈 대시보드 및 데이터 경로
docker-compose.yml에서 기본 홈 대시보드는 다음 경로로 고정되어 있습니다.GF_PATHS_DEFAULT_HOME_DASHBOARD_PATH=/etc/grafana/provisioning/dashboards/json/통합/00. 모니터링 오버뷰 대시보드.json
- 장기 테스트가 필요하다면 아래처럼
data/를 로컬 볼륨에 마운트할 수 있습니다. (기본 compose 파일에서는 이미지에 포함시키는 전략이라 주석 처리되어 있음)
# docker-compose.yml 예시
# volumes:
# - ./data:/var/lib/grafana4. 환경별 빌드/배포 절차
4.1 기본 이미지 빌드/태그 (단일 환경용)
간단한 테스트/단일 환경용 이미지는 make-dockerfile.sh 로 빌드합니다.
cd observability-all-in-one/custom-grafana
bash make-dockerfile.sh- 기본 태그 예시:
metabuild-monitoring-dashboard:0.0.1 - 필요 시 스크립트 내부에서 이미지 이름/태그 수정
4.2 다중 타깃(국1/NIPA 등) 빌드/태그/푸시
실제 운영용 배포는 build.sh 를 기준으로 합니다.
build.sh내부에 국1 쿠버네티스, NIPA(실시간/이상탐지/통합/관리자) 등 여러 타깃 환경에 맞춘docker build/docker tag/docker push명령이 주석 형태로 정리되어 있습니다.- 새 담당자는 아래 순서로 사용하면 됩니다.
build.sh열기- 현재 사용하는 레지스트리 주소, 프로젝트 경로, 태그를 확인
- 필요한 라인(해당 환경)만 주석 해제
- 이미지명/태그가 최신 정책에 맞는지 확인 후 스크립트 실행
bash build.sh운영 정책 변경 시(레지스트리 URL 변경, 네이밍 룰 변경 등) 반드시 이 스크립트를 함께 업데이트해야 합니다.
5. 디렉터리별 상세 설명 (운영상 관점)
5.1 conf/ – Grafana 설정 및 프로비저닝
5.1.1 핵심 설정 파일
| 파일 | 역할 |
|---|---|
conf/grafana.ini |
서버 포트, 도메인, 보안, 로그 레벨, 플러그인 디렉터리 등 전체 Grafana 동작을 제어하는 메인 설정 파일. Dockerfile에서 /etc/grafana/grafana.ini 로 복사됩니다. |
conf/ldap.toml, conf/ldap_multiple.toml |
LDAP/AD 연동 템플릿. 실제 LDAP 서버 정보를 넣고, grafana.ini 의 [auth.ldap] 섹션과 함께 사용합니다. |
conf/fav32.png, conf/meta.svg |
파비콘/아이콘 교체용 파일. 서비스 브랜딩 변경 시 여기서 관리합니다. |
5.1.2 대시보드 백업 (conf/backup/)
-
G1_Kubernetes,tenant,모니터링,실시간,이상탐지등 환경/기능별 폴더에 Grafana에서 export 한 JSON 원본이 들어 있습니다. -
역할:
- 기존 대시보드가 깨졌을 때 수동 복구용
- 새로운 프로비저닝 구조로 옮기기 전에 참고용
-
실제 자동 배포에 사용되는 파일은
conf/provisioning/dashboards/json/입니다.
5.1.3 conf/provisioning/ 구조
| 서브폴더 | 역할 |
|---|---|
dashboards/ |
json/ 이하에 관리자/실시간/이상탐지/통합 등 폴더별 대시보드가 정리되어 있습니다. sample.yaml 에서 options.path 로 JSON 폴더 경로를 지정합니다. |
datasources/datasource.yaml |
Prometheus, ClickHouse 등 데이터소스 템플릿이 주석으로 들어 있습니다. 실제 환경 정보(호스트, 포트, 인증)를 채워 넣고 주석을 해제하면 부팅 시 자동으로 데이터소스가 생성됩니다. |
alerting/alert.yaml |
ClickHouse SQL 기반 알림 예제(CPU/에러응답 등)입니다. contactPoints.yaml, notificationPolicies.yaml 와 함께 Alerting v2 구성을 완성합니다. |
notifiers/sample.yaml |
Slack/Email 알림 채널 템플릿. 실제 URL/이메일 주소를 넣고 활성화합니다. |
plugins/sample.yaml |
grafana-pyroscope-app, grafana-exploretraces-app 등 앱 플러그인을 자동 활성화하기 위한 예제입니다. |
access-control/sample.yaml |
Role/Team/권한 매핑 템플릿입니다. 조직별 권한 정책이 정리되면 이 파일을 기반으로 자동화 가능합니다. |
민감정보(비밀번호, 토큰 등)는 아래 방식으로 관리하는 것을 권장합니다.
- YAML 내
secureJsonData필드 사용 - Docker 시크릿/환경변수에 실제 값을 두고 템플릿 엔진/배포 파이프라인에서 주입
5.2 data/ – 플러그인, 알림 상태, 로그
| 경로 | 역할 |
|---|---|
data/plugins/ |
ClickHouse, Clock, Polystat, Kafka 데이터소스 등 외부 플러그인 바이너리를 미리 포함해 오프라인에서도 바로 사용이 가능하도록 합니다. Dockerfile에서 /var/lib/grafana/plugins 로 복사됩니다. |
data/alerting/1, data/alerting/2 |
Alerting v2 상태 저장소(평가 상태, 사일런스 정보 등). 조직 번호에 따라 디렉터리가 나뉩니다. |
data/log/ |
grafana.log 및 날짜별 로그 파일. 이 디렉터리를 호스트 볼륨으로 마운트하면 운영 장애 분석에 유용합니다. |
data/csv/, data/png/ |
CSV/PNG 내보내기 임시 디렉터리. 필요 시 정리/백업 가능합니다. |
실운영 환경에서는 일반적으로 data/ 를 별도 Volume/PVC 로 분리하여 컨테이너 재배포 시에도 상태를 유지합니다.
5.3 public/ – 커스텀 UI (건드릴 필요 없습니다.)
- Grafana 12.2.0 기준
/usr/share/grafana/public폴더와 동일한 구조를 따르며, 여기에 사내 요구사항에 맞게 수정이 적용되어 있습니다. - 이 경로는 수정할 필요가 없으며, 요구사항에 따라 favicon, logo 등은 아래의 설명에 따라 변경하시면 됩니다.
주요 경로 역할:
public/app/- React/TypeScript 소스 코드.
app.ts,AppWrapper.tsx,initApp.ts등에서 Grafana Core 초기화.core/,features/,plugins/,routes/등으로 기능별 분리.- UI/기능 수정 시 여기서 개발 → 빌드 결과가
public/build/에 생성됩니다.
public/build/- 실제 브라우저에 서빙되는 번들(JS/CSS).
- 직접 수정은 지양하고, 항상
app/수정 후 빌드로 생성합니다.
public/img/,public/fonts/,fav32.png,meta.svg- 로고, 아이콘, 폰트 리소스.
public/locales/- 다국어(i18n) 리소스(ko-KR 포함). 번역 수정 시 사용.
UI 작업 절차는 다음과 같습니다.
public/app/에서 소스 수정- Grafana 프런트엔드 빌드 파이프라인 실행 (
yarn build등, 프로젝트 내 정의된 방식 따름) - 빌드 결과(
public/build/)가 업데이트 되었는지 확인 - Docker 이미지 재빌드 (
docker compose build또는make-dockerfile.sh/build.sh)
5.4 plugins-bundled/
- Grafana가 기본적으로 동봉하는 예제 플러그인 목록입니다.
- 실제 운영용 플러그인은 아래 두 방식으로 관리합니다.
data/plugins/에 바이너리 포함- Dockerfile 의
GF_INSTALL_PLUGINS환경 변수에 플러그인명@버전 명시
6. 프로비저닝 / 아이콘 변경
6.1 대시보드 추가/수정
- Grafana UI에서 대시보드 수정
- JSON으로 export
conf/provisioning/dashboards/json/<폴더>/에 해당 파일 저장 (예:통합/00. 모니터링 오버뷰 대시보드.json)conf/provisioning/dashboards/sample.yaml의options.path가 올바른 폴더를 가리키는지 확인- Docker 이미지 재빌드 후 재배포
- 새 컨테이너에서 홈 대시보드가 정상 노출되는지 확인
6.2 데이터소스 추가/수정
conf/provisioning/datasources/datasource.yaml열기- 사용하지 않는 예제는 그대로 두고, 실제 필요한 데이터소스 섹션의 주석을 해제
url,database, 인증 정보 등 환경에 맞게 수정 (민감정보는secureJsonData+ 시크릿 방식 사용 권장)- 이미지 재빌드 후 재배포
- Grafana UI의 데이터소스 메뉴에서 정상 연결 여부 확인
6.3 알림 설정
conf/provisioning/alerting/alert.yaml- 알림 조건(SQL, 임계치, 윈도우 등)을 수정
conf/provisioning/alerting/contactPoints.yaml,notificationPolicies.yaml- 알림 대상/라우팅 정책 조정
notifiers/sample.yaml에서 텔레그램 등 ID 및 봇 토큰 정의 후 적용- 재배포 후 Alert Rule 테스트로 실제 알림 동작 확인
7. 운영 팁 및 주의사항
-
플러그인 버전 고정
Dockerfile의GF_INSTALL_PLUGINS는plugin@version형식을 지원합니다.- 운영 중 자동 업데이트로 인한 호환성 문제가 생기지 않도록, 가능하면 명시적 버전 고정을 사용합니다.
-
로그 관리
data/log/grafana.log.*용량이 커지면 로테이션 정책을 설정하거나, 외부 로그 수집 시스템(예: Loki 등)과 연계하여 관리합니다.- 필요 시
GF_LOG_MODE=json으로 변경해 중앙 수집에 유리하게 구성할 수 있습니다.
-
보안 설정
- LDAP/SSO, 알림 채널, 데이터소스 인증 정보는 Git에 평문으로 남기지 않습니다.
- 배포 파이프라인(ArgoCD, Jenkins 등)에서 템플릿 + 시크릿 조합으로 주입합니다.
-
문제 발생 시 우선 확인 포인트
docker compose logs -f grafana또는 K8skubectl logs로 Grafana 로그 확인conf/grafana.ini의 포트/도메인 설정 확인conf/provisioning/*.yaml문법 오류 여부 (잘못된 인덴트나 필드명)- 데이터소스 연결 상태 (네트워크/방화벽/인증 등)
8. 새 담당자가 처음 할 일 체크리스트
- 상단 Repo 링크로 접속해
custom-grafana/구조를 한 번 훑어본다. - 로컬 PC에서
docker compose build && docker compose up -d로 Grafana를 실제로 띄워본다. - 브라우저에서 홈 대시보드를 열어, 어떤 대시보드들이 기본 제공되는지 확인한다.
conf/provisioning/디렉터리를 열어 대시보드/데이터소스/알림/권한이 어떻게 나뉘어 있는지 파악한다.build.sh를 열어 현재 사용 중인 레지스트리/태그 정책을 확인하고, 운영 환경에서 어떤 태그가 배포되고 있는지 인지한다.- 변경 요청(예: “대시보드 추가”, “새 데이터소스 연결”)이 들어올 때, 위 플로우를 기준으로 어디를 수정해야 하는지 감이 잡히면 기본 이해는 완료된 것입니다.
이 문서와 함께 custom-grafana/README.md 를 참고하면, 신규 담당자도 리포지토리 구조와 배포 흐름을 빠르게 이해하고, 안전하게 Custom Grafana 이미지를 유지·확장할 수 있습니다.