Zabbix 인프라 모니터링 구축 – 03. 핵심 개념: 아이템·트리거·LLD 한 번에 정리 (Trapper·Discovery)

2026.09.23

·

1~2편에서 Zabbix 서버를 구동하고 알림 채널을 연결했다면, 이제 실제 모니터링 항목을 만들 차례입니다. 그 전에 Zabbix의 핵심 구조를 이해하지 않으면 설정이 복잡해질수록 어디서 무엇이 잘못됐는지 파악하기 어렵습니다.

이번 편에서는 아이템, 트리거, LLD 세 가지 개념을 실전 관점에서 정리합니다.


아이템(Item): 데이터를 수집하는 단위

아이템은 Zabbix가 수집하는 개별 데이터 포인트입니다. 하나의 아이템이 하나의 메트릭에 대응합니다. 아이템 타입에 따라 데이터를 수집하는 방식이 달라집니다.

Sponsored

주요 아이템 타입 비교

타입방향설명주요 용도
Zabbix Agent (Passive)Zabbix → Agent서버가 에이전트에게 요청일반 서버 모니터링
Zabbix Agent (Active)Agent → Zabbix에이전트가 서버에 데이터 전송방화벽 안쪽 서버
Trapper외부 → Zabbixzabbix_sender로 밀어넣기커스텀 스크립트
External CheckZabbix → 스크립트Zabbix가 스크립트 실행 후 결과 수집API 폴링
SNMPZabbix → 장비SNMP OID 폴링네트워크 장비

이 시리즈에서 주로 사용하는 타입은 Trapper입니다. Proxmox, iLO, iDRAC 모두 외부 Python 스크립트가 API를 호출해 데이터를 수집하고, zabbix_sender로 Zabbix에 밀어넣는 구조입니다.

Trapper 아이템 생성 시 주의점

Trapper 아이템은 Zabbix가 능동적으로 수집하지 않습니다. 외부에서 데이터를 보내주기 전까지 값이 없습니다. 따라서 아이템 생성 시 Update interval을 설정할 필요가 없고, 설정해도 의미가 없습니다.

값 타입(Value type) 선택 기준:

수집 데이터Value type
CPU 사용률, 온도, 카운트Numeric (float) 또는 Numeric (unsigned)
노드명, 상태 문자열Text 또는 Character
JSON (LLD용)Text

문자열 타입(Text, Character)은 트렌드(Trends) 저장을 지원하지 않습니다. 아이템 생성 시 Trends 항목을 비워두거나 0으로 설정해야 오류가 발생하지 않습니다.


트리거(Trigger): 조건에 따라 알림을 발생시키는 규칙

트리거는 아이템 값이 특정 조건을 만족할 때 알림을 발생시킵니다.

Zabbix 7.0 트리거 표현식 문법

Zabbix 6.0부터 트리거 표현식 문법이 변경됐습니다. 기존 문법으로 작성된 자료를 참고할 때 주의가 필요합니다.

기존 문법 (6.0 이전):

{hostname:key.func()} > 값

신규 문법 (6.0 이후, 7.0 포함):

func(/hostname/key, 파라미터) > 값

실제 예시로 비교하면:

# 구버전 (동작 안 함)
{proxmox-cluster:proxmox.node.cpu[pve11].last()} > 90
# 신버전 (올바른 형식)
last(/proxmox-cluster/proxmox.node.cpu[pve11]) > 90

Zabbix API로 트리거를 생성할 때도 동일합니다. 구버전 형식을 사용하면 Invalid parameter 오류가 반환됩니다.

자주 쓰는 트리거 함수

함수설명예시
last()가장 최근 값last(/host/key) > 90
avg(#3)최근 3회 평균avg(/host/key,#3) > 80
min(5m)최근 5분 최솟값min(/host/key,5m) = 0
nodata(10m)10분간 데이터 없음nodata(/host/key,10m) = 1

순간 스파이크에 의한 오탐을 줄이려면 last() 대신 avg(#3) (최근 3회 평균)을 쓰는 것이 효과적입니다.

트리거 심각도 설계

심각도사용 기준
Information참고용, 알림 불필요
Warning주의 필요, 슬랙 알림
Average즉시 확인 필요
High서비스 영향 가능성
Disaster서비스 중단

Warning 이상부터 Slack 알림을 받도록 Action을 설정하면 불필요한 알림을 줄일 수 있습니다.


LLD(Low Level Discovery): 동적으로 아이템을 생성하는 메커니즘

LLD는 Zabbix에서 가장 강력한 기능 중 하나입니다. 모니터링 대상 목록이 동적으로 변할 때 아이템을 일일이 수동으로 만들지 않아도 됩니다.

동작 원리

  1. Discovery Rule: JSON 형태의 목록을 반환하는 아이템을 정의
  2. Item Prototype: 발견된 각 항목에 대해 생성할 아이템 템플릿
  3. Trigger Prototype: 발견된 각 항목에 대해 생성할 트리거 템플릿
  4. Zabbix가 Discovery Rule을 주기적으로 실행 → JSON 파싱 → Prototype 기반으로 아이템/트리거 자동 생성

Discovery JSON 형식

[
  {"{#NODE}": "pve11", "{#IP}": "10.0.92.11"},
  {"{#NODE}": "pve12", "{#IP}": "10.0.92.12"},
  {"{#NODE}": "pve13", "{#IP}": "10.0.92.13"}
]

중괄호로 감싼 대문자 키({#NODE})가 매크로입니다. Item Prototype에서 이 매크로를 키나 이름에 사용하면 발견된 항목마다 아이템이 생성됩니다.

Item Prototype 키 예시:

proxmox.node.cpu[{#NODE}]

pve11, pve12, pve13이 발견되면 Zabbix가 자동으로 아래 세 아이템을 만듭니다:

proxmox.node.cpu[pve11]
proxmox.node.cpu[pve12]
proxmox.node.cpu[pve13]

zabbix_sender로 Discovery 데이터 전송

zabbix_sender로 Discovery JSON을 전송할 때는 일반 아이템과 동일하게 키와 값을 전달합니다.

import json, subprocess
lld = [
    {"{#NODE}": "pve11", "{#IP}": "10.0.92.11"},
    {"{#NODE}": "pve12", "{#IP}": "10.0.92.12"},
]
subprocess.run(
    ["docker", "exec", "zabbix-server",
     "zabbix_sender", "-z", "127.0.0.1", "-p", "10051",
     "-s", "proxmox-cluster",
     "-k", "proxmox.node.discovery",
     "-o", json.dumps(lld)],
    capture_output=True, timeout=30
)

Discovery Rule의 키(proxmox.node.discovery)가 Trapper 타입으로 등록되어 있어야 합니다.


Trapper 아이템의 stale value 문제

Trapper 아이템을 운영할 때 반드시 알아야 할 특성이 있습니다.

Zabbix는 Trapper 아이템의 마지막 값을 무기한 유지합니다.

외부 스크립트가 데이터를 보내지 않으면 이전 값이 그대로 남습니다. 이것이 문제가 되는 경우는 모니터링 대상이 변경됐을 때입니다.

실제 발생한 사례

서버에서 RAID 컨트롤러를 P440ar(HP Smart Array)에서 LSI 9217(HBA)으로 교체했습니다. P440ar에 연결된 물리 드라이브 8개의 health 아이템이 Zabbix에 등록되어 있었는데, 교체 후 스크립트가 P440ar 드라이브 정보를 더 이상 수집하지 못하게 됐습니다.

결과: 기존 8개 아이템에 degraded 상태 값이 그대로 남아 있어 “Physical drive health degraded” 알림이 계속 발생했습니다.

해결 방법

단기 해결: 해당 아이템을 수동으로 삭제하거나 최신 값을 강제 업데이트합니다.

장기 해결: 트리거 조건에 nodata() 를 추가합니다.

# stale value 방지: 데이터가 30분 이상 없으면 트리거 비활성화
last(/host/proxmox.node.disk.health[pve13,sda]) >= 1
and nodata(/host/proxmox.node.disk.health[pve13,sda], 30m) = 0

또는 LLD Discovery를 활용해 존재하지 않는 항목은 자동으로 제거되도록 Keep lost resources period를 적절히 설정합니다.


정리: 커스텀 모니터링 구현 전 체크리스트

  • [ ] 수집 방식에 맞는 아이템 타입 선택 (커스텀 스크립트 → Trapper)
  • [ ] 문자열 값은 Trends 저장 비활성화
  • [ ] 트리거 표현식은 Zabbix 7.0 신규 문법 사용
  • [ ] 동적 대상(노드, 디스크 등)은 LLD로 구현
  • [ ] Trapper 아이템은 stale value 가능성 고려

마치며

아이템 타입의 차이, 트리거 문법 변경, LLD 구조, stale value 문제까지 이해했다면 다음 편부터 본격적인 Proxmox 모니터링 구현으로 넘어갑니다.

다음 편에서는 Proxmox API 토큰 발급과 권한 설계를 다룹니다. 어떤 권한을 어느 경로에 부여해야 하는지, 잘못 설정했을 때 어떤 오류가 발생하는지를 실제 경험 기반으로 설명합니다.


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분 체크