Zabbix 인프라 모니터링 구축 – 14. 환경 분리: DEV·PRD를 하나의 Zabbix로 운영하기 (호스트그룹·권한)

2026.10.08

·

이 시리즈의 인프라는 DEV(개발)와 PRD(운영) 두 환경이 공존합니다. Zabbix 서버는 하나지만 두 환경을 명확히 분리해서 운영해야 합니다. 분리가 느슨하면 운영 알림이 개발 채널로 가거나, 개발 환경의 오탐이 운영 알림과 섞이는 문제가 생깁니다.

이번 편에서는 Zabbix 안에서 DEV/PRD를 분리하는 전체 구조를 다룹니다.


분리 레이어 설계

DEV/PRD 분리는 다섯 개 레이어에서 동시에 이루어집니다:

Sponsored

레이어DEVPRD
호스트 그룹DEV (ID: 26)PRD (ID: 27)
호스트 이름proxmox-clusterproxmox-cluster-prod
API 토큰DEV 전용 토큰PRD 전용 토큰
수집 스크립트*_collector.py*_collector_prod.py
Slack 채널DEV WebhookPRD Webhook

각 레이어가 독립적으로 분리되어 있어야 한 환경의 변경이 다른 환경에 영향을 주지 않습니다.


호스트 그룹 분리

Zabbix의 호스트 그룹은 단순한 분류 이상의 역할을 합니다. 권한과 Action 필터의 기준이 됩니다.

그룹 생성 후 각 호스트를 해당 그룹에 배정합니다:

DEV 그룹:
  - proxmox-cluster (DEV 클러스터)
  - opnsense-hq-01 (HQ 방화벽 — DEV 관리)
  - truenas-dev    (DEV NAS)
PRD 그룹:
  - proxmox-cluster-prod (PRD 클러스터)
  - proxmox-prd-cluster  (PRD 클러스터 상태)
  - opnsense-idc         (IDC 방화벽)
  - truenas-prd          (PRD NAS)
  - proxmox-idc-02-ilo   (iLO)
  - pbs-idc-01-idrac     (iDRAC)

Proxmox API 토큰 분리

DEV와 PRD Proxmox 클러스터는 완전히 다른 네트워크 대역에 있고, 각각 별도의 API 토큰을 발급합니다:

# DEV 수집 스크립트
PROXMOX_HOSTS = ["10.0.91.21", "10.0.91.22", "10.0.91.23"]
API_TOKEN = "PVEAPIToken=zabbix-monitor@pve!zabbix=DEV용-UUID"
ZABBIX_HOST = "proxmox-cluster"
# PRD 수집 스크립트
PROXMOX_HOSTS = ["10.0.92.11", "10.0.92.12", "10.0.92.13"]
API_TOKEN = "PVEAPIToken=zabbix-monitor@pve!zabbix=PRD용-UUID"
ZABBIX_HOST = "proxmox-cluster-prod"

토큰이 분리되어 있으면 PRD 토큰이 유출되어도 DEV에는 영향이 없고, DEV 토큰을 교체해도 PRD 수집이 중단되지 않습니다.


수집 스크립트 네이밍 규칙

환경별 스크립트를 구분하는 네이밍 규칙을 일관되게 유지합니다:

proxmox_vm_collector.py           # DEV VM
proxmox_vm_collector_prod.py      # PRD VM
proxmox_node_collector.py         # DEV 노드
proxmox_node_collector_prod.py    # PRD 노드
proxmox_cluster_collector.py      # DEV 클러스터
proxmox_cluster_collector_prod.py # PRD 클러스터

_prod 접미사 규칙을 일관되게 사용하면 crontab에서 DEV/PRD를 한눈에 구분할 수 있습니다.


Slack 알림 채널 분리

2편에서 설명한 것처럼 DEV와 PRD 각각 별도의 Slack Webhook URL을 발급합니다. Zabbix에서는 이를 두 개의 Media Type으로 등록합니다:

Media Type 이름Webhook URL상태
Slack Webhook (DEV)DEV 채널 URLEnabled
Slack Webhook (PRD)PRD 채널 URLEnabled

Media Type 생성 후 반드시 Enabled 상태 확인 — 기본값이 Disabled이기 때문입니다. (2편 참조)


Action으로 알림 라우팅

Action의 Conditions에서 호스트 그룹을 필터로 사용해 DEV/PRD 알림을 분리합니다:

DEV Action 설정:

Conditions 탭:

  • Host group = DEV
  • Trigger severity >= Warning

Operations 탭:

  • Send to users: Admin
  • Send only to: Slack Webhook (DEV)

PRD Action 설정:

Conditions 탭:

  • Host group = PRD
  • Trigger severity >= Warning

Operations 탭:

  • Send to users: Admin
  • Send only to: Slack Webhook (PRD)

이렇게 하면 DEV 그룹 호스트의 트리거는 DEV 채널로, PRD 그룹 호스트의 트리거는 PRD 채널로 자동 라우팅됩니다.


사용자 권한 분리

외부 팀원이나 협력업체에게 특정 환경의 조회 권한만 부여할 때 호스트 그룹 기반 권한을 활용합니다:

사용자 그룹접근 가능 호스트 그룹권한
DEV-ViewersDEVRead
PRD-ViewersPRDRead
AdminsDEV + PRDRead-Write

User group에 호스트 그룹 권한을 설정하면, 해당 그룹 소속 사용자는 지정된 호스트만 볼 수 있습니다.


호스트 이름 네이밍 규칙

호스트 이름만 봐도 어느 환경인지 알 수 있도록 일관된 규칙을 정합니다:

# DEV 환경
proxmox-cluster       # DEV 클러스터 노드용
proxmox-dev-cluster   # DEV 클러스터 상태용
truenas-dev           # DEV NAS
# PRD 환경
proxmox-cluster-prod  # PRD 클러스터 노드용
proxmox-prd-cluster   # PRD 클러스터 상태용
truenas-prd           # PRD NAS
proxmox-idc-02-ilo    # IDC 서버 02 iLO
pbs-idc-01-idrac      # IDC PBS 서버 iDRAC

-dev, -prd, -prod 접미사를 일관되게 붙이면 Zabbix 대시보드에서 환경 구분이 쉬워집니다.


로그 파일 분리

수집 스크립트 로그도 환경별로 분리합니다:

# DEV
>> /data/zabbix/scripts/collector.log
>> /data/zabbix/scripts/collector_node.log
>> /data/zabbix/scripts/collector_cluster.log
# PRD
>> /data/zabbix/scripts/collector_prod.log
>> /data/zabbix/scripts/collector_node_prod.log
>> /data/zabbix/scripts/collector_cluster_prod.log

로그 분리의 이점:

  • PRD 스크립트 오류가 DEV 로그에 섞이지 않음
  • tail -f collector_prod.log로 PRD만 실시간 모니터링 가능
  • 로그 크기 관리가 수월함

DEV 환경에서만 다르게 처리하는 항목

DEV와 PRD가 구조는 같지만 세부 처리가 다른 경우가 있습니다.

디스크 Health UNKNOWN 처리:

PRD 노드는 실제 SAS/SATA 디스크가 있어 Health가 OK 또는 degraded로 명확하지만, DEV 노드는 일부 디스크가 논리 볼륨(LOGICAL_VOLUME)으로 UNKNOWN을 반환합니다.

# PRD: UNKNOWN을 이상(1)으로 처리해도 무방
health_val = 0 if health_str == "OK" else 1
# DEV: UNKNOWN은 -1로 처리해 오탐 방지
health_val = 0 if health_str == "OK" else (1 if health_str != "UNKNOWN" else -1)

이처럼 DEV에서는 오탐을 유발할 수 있는 항목의 임계값을 더 느슨하게 설정합니다.


트러블슈팅: 잘못된 채널로 알림이 가는 경우

분리 설정 후에도 알림이 잘못된 채널로 가는 경우가 있습니다. 원인별 확인 방법:

1. 호스트가 잘못된 그룹에 있는 경우

2. Action의 Host group 조건이 빠진 경우

> [Alerts > Actions > 해당 Action > Conditions 탭 확인]

3. User Media에 두 채널이 모두 등록된 경우

User Media에 DEV와 PRD Webhook이 둘 다 등록되어 있고, Action의 Send only to 설정이 없으면 두 채널 모두에 발송됩니다.

> [Alerts > Actions > Operations > Send only to 값 확인]


마치며

이번 편에서 다룬 핵심 포인트입니다:

  • 호스트 그룹이 권한과 Action 필터의 기준 — 반드시 정확히 분류
  • API 토큰, 스크립트, 로그를 환경별로 분리해 독립성 확보
  • Action의 Host group 조건 + Send only to 조합으로 알림 채널 정확히 분리
  • DEV는 오탐 방지를 위해 일부 임계값을 느슨하게 설정
  • 호스트 이름에 -dev/-prd 규칙을 일관되게 적용

다음 편은 이 시리즈의 마지막으로, 실제 운영 중 마주친 오탐·누락·설정 오류를 모아 정리합니다.


MORE POSTS

다른 글 보기

테크 랩

PMBOK 완독기 – 00. 오리엔테이션: 왜 정석을 완독하나 + 6판·7판 지도

PMBOK을 목차대로 완독하며 IT 현장에 번역하는 시리즈 시작. 6판(10지식영역)·7판(원칙·테일러링) 지도와 15편 로드맵.
2026.10.22
guniq 인사이트 썸네일 — 중소기업 OpenLDAP 통합 인증 구축 – 07. 백업·로그·운영 자동화: 장애 없는 LDAP 서버 유지하기
테크 랩

중소기업 OpenLDAP 통합 인증 구축 – 07. 백업·로그·운영 자동화: 장애 없는 LDAP 서버 유지하기

LDAP 서버는 설치 후가 더 중요합니다. 데이터 유실을 막는 백업 전략(daily/weekly/monthly), slapd 로그 관리와 logrotate 설정, 헬스체크 자동화까지 — 실제 운영 중인 스크립트를 바탕으로 LDAP 서버를 안정적으로 유지하는 방법을 정리합니다.
2026.10.21
guniq 인사이트 썸네일 — 중소기업 OpenLDAP 통합 인증 구축 – 06. Synology NAS LDAP 연동: DSM 설정과 그룹 권한 매핑
테크 랩

중소기업 OpenLDAP 통합 인증 구축 – 06. Synology NAS LDAP 연동: DSM 설정과 그룹 권한 매핑

Synology DSM의 LDAP 클라이언트를 커스텀 프로파일로 설정하는 방법을 정리합니다. groupPosixAux 필터, memberUid 매핑, LDAPS 인증서 처리까지 — 표준을 지킨 LDAP 구조가 NAS 연동을 얼마나 단순하게 만드는지 확인합니다.
2026.10.20

프로젝트 문의 환영합니다

기획부터 개발, 운영까지 함께 만들어 드립니다.

무료 3분 자가진단

우리 회사, 자체 클라우드가 답일까?

AWS vs 자체 인프라 · 11개 항목 3분 체크