Zabbix
1. 개요
Zabbix는 서버, 네트워크 장비, 가상화 환경 및 클라우드 서비스 등 IT 인프라 전반을 실시간으로 감시하고 장애를 탐지하는 기업급 오픈소스 모니터링 솔루션이다.
Zabbix는 엔터프라이즈 수준의 확장성을 제공하며, 단순한 상태 확인을 넘어 성능 데이터의 수집, 분석, 시각화 및 알림 기능을 통합적으로 제공한다. 주요 모니터링 대상은 다음과 같다.
* 네트워크 장비: 스위치, 라우터, 방화벽 (SNMP 기반)
* 서버 및 OS: Linux, Windows, macOS (Agent 및 Agentless 기반)
* 클라우드 및 가상화: AWS, Azure, GCP, VMware, Hyper-V
* 애플리케이션 및 DB: MySQL, PostgreSQL, Apache, Nginx, Java 애플리케이션(JMX)
2. 주요 아키텍처 및 작동 원리
Zabbix는 분산 모니터링 구조를 채택하여 대규모 환경에서도 효율적으로 작동한다. 각 구성 요소는 특정 역할을 수행하며 상호 유기적으로 통신한다.
구성 요소 및 역할
| 구성 요소 |
역할 |
통신 방향 |
비고 |
| Zabbix Server |
데이터 수집 제어, 트리거 평가, 알림 전송 |
↔ DB, ↔ Proxy/Agent |
시스템의 핵심 엔진 |
| Database |
설정 데이터 및 수집된 히스토리/트렌드 데이터 저장 |
↔ Server, ↔ Web UI |
MySQL, PostgreSQL 지원 |
| Web UI |
설정 관리, 데이터 시각화, 사용자 인터페이스 제공 |
↔ Database |
PHP 기반 웹 인터페이스 |
| Zabbix Agent / Agent 2 |
대상 호스트의 로컬 데이터 수집 및 전송 |
↔ Server/Proxy |
설치형 소프트웨어 (Passive/Active 모드) |
| Zabbix Proxy |
데이터 수집 대행 및 서버 부하 분산, 데이터 버퍼링 |
→ Server |
원격지/대규모 환경 필수 |
- Zabbix Agent 2: 기존 C 기반 에이전트를 대체하는 Go 언어 기반의 차세대 에이전트이다. 플러그인 아키텍처를 통해 확장성이 뛰어나며, 동시성 처리 능력이 향상되어 더 많은 데이터를 효율적으로 수집할 수 있다.
3. 데이터 수집 방식
Zabbix는 모니터링 대상의 특성에 따라 다양한 데이터 수집 메커니즘을 제공한다.
수집 방식별 특징
- 에이전트 기반 (Agent / Agent 2): 대상 서버에 에이전트를 설치하여 CPU, 메모리, 디스크 등 상세 OS 지표를 수집한다.
- 에이전트리스 (Agentless): SSH, Telnet 등을 통해 원격으로 명령어를 실행하여 데이터를 가져온다.
- SNMP (Simple Network Management Protocol): 네트워크 장비의 표준 프로토콜을 사용하여 트래픽, 포트 상태 등을 수집한다.
- JMX (Java Management Extensions): Java 기반 애플리케이션(Tomcat, Kafka 등)의 JVM 내부 지표를 수집한다.
- HTTP/API: REST API나 JSON-RPC를 통해 웹 서비스의 상태나 외부 API 데이터를 수집한다.
Passive vs Active 에이전트 비교
| 구분 |
Passive Agent (수동형) |
Active Agent (능동형) |
| 작동 방식 |
Server가 Agent에게 데이터를 요청 |
Agent가 Server로 데이터를 전송 |
| 통신 주체 |
Server $\rightarrow$ Agent |
Agent $\rightarrow$ Server |
| 부하 집중 |
Server에 부하가 집중됨 |
Agent가 부하를 분산 처리함 |
| 네트워크 설정 |
Agent의 포트(10050) 개방 필요 |
Server의 포트(10051) 개방 필요 |
| 특징 |
설정이 단순하며 즉각적인 제어 가능 |
방화벽 환경에 유리하며 대규모 환경에 적합 |
[선택 기준]
* 상세한 OS 지표 필요 $\rightarrow$ Agent / Agent 2
* 네트워크 장비/보안 장비 $\rightarrow$ SNMP
* 설치가 불가능한 폐쇄적 환경 $\rightarrow$ Agentless
* Java 애플리케이션 성능 분석 $\rightarrow$ JMX
4. 핵심 기능 및 설정
Zabbix의 모니터링 프로세스는 템플릿 $\rightarrow$ 아이템 $\rightarrow$ 트리거 $\rightarrow$ 액션의 단계로 구성된다.
4.1 템플릿 (Template)
템플릿은 아이템, 트리거, 그래프, 대시보드 등의 설정 묶음을 정의한 집합체이다. 동일한 OS나 애플리케이션을 사용하는 여러 호스트에 동일한 설정을 반복해서 적용할 필요 없이, 템플릿을 할당함으로써 관리 효율성을 극대화하고 설정 오류를 방지할 수 있다.
4.2 데이터 흐름 단계
- 아이템 (Item): 수집할 데이터의 정의. (예: CPU 사용률, 특정 로그 파일의 키워드)
- 트리거 (Trigger): 수집된 데이터가 특정 임계치를 넘었을 때 '장애'로 판단하는 논리 식.
- 논리식 예시:
last(/Linux by Zabbix agent/system.cpu.util) > 90 : 최신 CPU 사용률이 90%를 초과할 때
avg(/Linux by Zabbix agent/system.cpu.util, 5m) > 80 : 최근 5분간 평균 CPU 사용률이 80%를 초과할 때
nodata(/Linux by Zabbix agent/agent.ping, 5m) = 1 : 5분 동안 데이터 수집이 없을 때 (호스트 다운 판단)
- 액션 (Action): 트리거가 발생했을 때 수행할 작업. (예: 관리자에게 이메일/슬랙 알림 전송)
4.3 사용자 정의 스크립트 및 API 활용
Zabbix는 외부 스크립트를 통해 수집 범위를 확장할 수 있으며, API를 통해 자동화 설정을 지원한다.
[API 호출 예시: 호스트 정보 조회 (JSON-RPC)]
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "host"],
"filter": { "host": ["Web-Server-01"] }
},
"auth": "your_auth_token",
"id": 1
}
5. 시각화 및 리포팅
수집된 원시 데이터는 사용자가 이해하기 쉬운 형태로 시각화된다.
- 대시보드 (Dashboard): 위젯 형태로 구성되며, 실시간 상태, 그래프, 문제 목록을 한눈에 파악할 수 있다.
- 그래프 (Graph): 아이템의 히스토리 데이터를 시계열 그래프로 표현하여 추세를 분석한다.
- 맵 (Map): 네트워크 토폴로지를 시각적으로 배치하고, 각 장비의 상태를 아이콘 색상(정상: 녹색, 장애: 빨간색)으로 표시한다.
- 리포트 (Report): 특정 기간의 가동률(SLA) 및 장애 발생 빈도를 분석하여 보고서 형태로 출력한다.
6. 구축 및 운영 가이드
6.1 설치 요구사항 및 호환성
Zabbix는 LAMP(Linux, Apache, MySQL, PHP) 스택을 기반으로 동작한다.
| OS |
DB |
PHP 버전 |
권장 사항 |
| RHEL/CentOS/Ubuntu |
MySQL 8.0+ |
7.4 ~ 8.2 |
InnoDB 스토리지 엔진 사용 필수 |
| Debian/Ubuntu |
PostgreSQL 13+ |
7.4 ~ 8.2 |
TimescaleDB 확장 설치 권장 |
| Windows |
MySQL/PostgreSQL |
7.4 ~ 8.2 |
IIS 또는 Apache 연동 필요 |
6.2 성능 최적화 및 백업
- DB 튜닝:
Housekeeper 설정(데이터 보관 주기 조정)을 통해 DB 크기가 무한정 커지는 것을 방지해야 한다.
- TimescaleDB 도입: 대규모 데이터 수집 시 PostgreSQL의 TimescaleDB 확장을 사용하면 쓰기 성능과 쿼리 속도를 획기적으로 개선할 수 있다.
- 백업 전략: DB 덤프(
mysqldump 등)와 Zabbix 설정 파일(/etc/zabbix_server.conf)을 주기적으로 백업한다.
7. 추가 정보
7.1 타 모니터링 도구와의 비교
| 비교 항목 |
Zabbix |
Prometheus |
Nagios |
Datadog (SaaS) |
| 주요 특징 |
올인원 엔터프라이즈 |
시계열 데이터/K8s 최적화 |
전통적인 상태 체크 |
클라우드 네이티브/Managed |
| 데이터 수집 |
Push & Pull |
Pull 중심 |
Active/Passive Check |
Agent 기반 Push |
| 시각화 |
내장 대시보드/맵 |
Grafana 연동 필수 |
기본 제공 (단순함) |
강력한 내장 UI |
| 비용 |
무료 (Open Source) |
무료 (Open Source) |
무료/유료 버전 |
유료 (종량제) |
7.2 구축 단계별 체크리스트
- [ ] 환경 분석: 모니터링 대상 수, 데이터 수집 주기, 알림 채널 정의
- [ ] 인프라 준비: OS 설치 및 DB(MySQL/PostgreSQL) 설치 및 최적화
- [ ] Zabbix 설치: Server, Web UI, Agent 설치 및 설정 파일 수정
- [ ] 네트워크 설정: 방화벽 포트 개방 (Server ↔ Agent: 10050, 10051)
- [ ] 템플릿 적용: 대상 장비에 맞는 표준 템플릿 할당
- [ ] 알림 설정: SMTP/Webhook 연동 및 사용자 알림 그룹 설정
- [ ] 검증: 임의 장애 유발을 통한 트리거 및 알림 작동 테스트
7.3 트러블슈팅 및 FAQ
Q: Zabbix Server 로그에 "connection timeout" 에러가 발생합니다.
* A: 대상 호스트의 방화벽에서 10050 포트가 열려 있는지 확인하고, zabbix_agentd.conf 파일의 Server 항목에 Zabbix Server의 IP가 정확히 등록되었는지 확인하십시오.
Q: 대시보드 로딩 속도가 너무 느립니다.
* A: 수집하는 아이템의 주기가 너무 짧지 않은지 확인하십시오. 또한, DB의 인덱스 최적화 상태를 점검하고, 데이터 양이 많다면 TimescaleDB 도입을 검토하십시오.
Q: 특정 아이템의 값이 'Not supported'로 표시됩니다.
* A: 에이전트가 해당 데이터를 수집할 권한이 없거나, 템플릿에 정의된 키(Key) 값이 대상 OS 버전과 맞지 않는 경우입니다. zabbix_get 도구를 사용하여 서버에서 직접 데이터를 요청해 보십시오.
7.4 참조
# Zabbix
## 1. 개요
Zabbix는 서버, 네트워크 장비, 가상화 환경 및 클라우드 서비스 등 IT 인프라 전반을 실시간으로 감시하고 장애를 탐지하는 기업급 오픈소스 모니터링 솔루션이다.
Zabbix는 엔터프라이즈 수준의 확장성을 제공하며, 단순한 상태 확인을 넘어 성능 데이터의 수집, 분석, 시각화 및 알림 기능을 통합적으로 제공한다. 주요 모니터링 대상은 다음과 같다.
* **네트워크 장비**: 스위치, 라우터, 방화벽 (SNMP 기반)
* **서버 및 OS**: Linux, Windows, macOS (Agent 및 Agentless 기반)
* **클라우드 및 가상화**: AWS, Azure, GCP, VMware, Hyper-V
* **애플리케이션 및 DB**: MySQL, PostgreSQL, Apache, Nginx, Java 애플리케이션(JMX)
---
## 2. 주요 아키텍처 및 작동 원리
Zabbix는 분산 모니터링 구조를 채택하여 대규모 환경에서도 효율적으로 작동한다. 각 구성 요소는 특정 역할을 수행하며 상호 유기적으로 통신한다.
### 구성 요소 및 역할
| 구성 요소 | 역할 | 통신 방향 | 비고 |
| :--- | :--- | :--- | :--- |
| **Zabbix Server** | 데이터 수집 제어, 트리거 평가, 알림 전송 | ↔ DB, ↔ Proxy/Agent | 시스템의 핵심 엔진 |
| **Database** | 설정 데이터 및 수집된 히스토리/트렌드 데이터 저장 | ↔ Server, ↔ Web UI | MySQL, PostgreSQL 지원 |
| **Web UI** | 설정 관리, 데이터 시각화, 사용자 인터페이스 제공 | ↔ Database | PHP 기반 웹 인터페이스 |
| **Zabbix Agent / Agent 2** | 대상 호스트의 로컬 데이터 수집 및 전송 | ↔ Server/Proxy | 설치형 소프트웨어 (Passive/Active 모드) |
| **Zabbix Proxy** | 데이터 수집 대행 및 서버 부하 분산, 데이터 버퍼링 | → Server | 원격지/대규모 환경 필수 |
* **Zabbix Agent 2**: 기존 C 기반 에이전트를 대체하는 Go 언어 기반의 차세대 에이전트이다. 플러그인 아키텍처를 통해 확장성이 뛰어나며, 동시성 처리 능력이 향상되어 더 많은 데이터를 효율적으로 수집할 수 있다.
---
## 3. 데이터 수집 방식
Zabbix는 모니터링 대상의 특성에 따라 다양한 데이터 수집 메커니즘을 제공한다.
### 수집 방식별 특징
1. **에이전트 기반 (Agent / Agent 2)**: 대상 서버에 에이전트를 설치하여 CPU, 메모리, 디스크 등 상세 OS 지표를 수집한다.
2. **에이전트리스 (Agentless)**: SSH, Telnet 등을 통해 원격으로 명령어를 실행하여 데이터를 가져온다.
3. **SNMP (Simple Network Management Protocol)**: 네트워크 장비의 표준 프로토콜을 사용하여 트래픽, 포트 상태 등을 수집한다.
4. **JMX (Java Management Extensions)**: Java 기반 애플리케이션(Tomcat, Kafka 등)의 JVM 내부 지표를 수집한다.
5. **HTTP/API**: REST API나 JSON-RPC를 통해 웹 서비스의 상태나 외부 API 데이터를 수집한다.
### Passive vs Active 에이전트 비교
| 구분 | Passive Agent (수동형) | Active Agent (능동형) |
| :--- | :--- | :--- |
| **작동 방식** | Server가 Agent에게 데이터를 요청 | Agent가 Server로 데이터를 전송 |
| **통신 주체** | Server $\rightarrow$ Agent | Agent $\rightarrow$ Server |
| **부하 집중** | Server에 부하가 집중됨 | Agent가 부하를 분산 처리함 |
| **네트워크 설정** | Agent의 포트(10050) 개방 필요 | Server의 포트(10051) 개방 필요 |
| **특징** | 설정이 단순하며 즉각적인 제어 가능 | 방화벽 환경에 유리하며 대규모 환경에 적합 |
**[선택 기준]**
* 상세한 OS 지표 필요 $\rightarrow$ **Agent / Agent 2**
* 네트워크 장비/보안 장비 $\rightarrow$ **SNMP**
* 설치가 불가능한 폐쇄적 환경 $\rightarrow$ **Agentless**
* Java 애플리케이션 성능 분석 $\rightarrow$ **JMX**
---
## 4. 핵심 기능 및 설정
Zabbix의 모니터링 프로세스는 **템플릿 $\rightarrow$ 아이템 $\rightarrow$ 트리거 $\rightarrow$ 액션**의 단계로 구성된다.
### 4.1 템플릿 (Template)
템플릿은 아이템, 트리거, 그래프, 대시보드 등의 설정 묶음을 정의한 집합체이다. 동일한 OS나 애플리케이션을 사용하는 여러 호스트에 동일한 설정을 반복해서 적용할 필요 없이, 템플릿을 할당함으로써 관리 효율성을 극대화하고 설정 오류를 방지할 수 있다.
### 4.2 데이터 흐름 단계
1. **아이템 (Item)**: 수집할 데이터의 정의. (예: CPU 사용률, 특정 로그 파일의 키워드)
2. **트리거 (Trigger)**: 수집된 데이터가 특정 임계치를 넘었을 때 '장애'로 판단하는 논리 식.
* **논리식 예시**:
* `last(/Linux by Zabbix agent/system.cpu.util) > 90` : 최신 CPU 사용률이 90%를 초과할 때
* `avg(/Linux by Zabbix agent/system.cpu.util, 5m) > 80` : 최근 5분간 평균 CPU 사용률이 80%를 초과할 때
* `nodata(/Linux by Zabbix agent/agent.ping, 5m) = 1` : 5분 동안 데이터 수집이 없을 때 (호스트 다운 판단)
3. **액션 (Action)**: 트리거가 발생했을 때 수행할 작업. (예: 관리자에게 이메일/슬랙 알림 전송)
### 4.3 사용자 정의 스크립트 및 API 활용
Zabbix는 외부 스크립트를 통해 수집 범위를 확장할 수 있으며, API를 통해 자동화 설정을 지원한다.
**[API 호출 예시: 호스트 정보 조회 (JSON-RPC)]**
```json
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": ["hostid", "host"],
"filter": { "host": ["Web-Server-01"] }
},
"auth": "your_auth_token",
"id": 1
}
```
---
## 5. 시각화 및 리포팅
수집된 원시 데이터는 사용자가 이해하기 쉬운 형태로 시각화된다.
* **대시보드 (Dashboard)**: 위젯 형태로 구성되며, 실시간 상태, 그래프, 문제 목록을 한눈에 파악할 수 있다.
* **그래프 (Graph)**: 아이템의 히스토리 데이터를 시계열 그래프로 표현하여 추세를 분석한다.
* **맵 (Map)**: 네트워크 토폴로지를 시각적으로 배치하고, 각 장비의 상태를 아이콘 색상(정상: 녹색, 장애: 빨간색)으로 표시한다.
* **리포트 (Report)**: 특정 기간의 가동률(SLA) 및 장애 발생 빈도를 분석하여 보고서 형태로 출력한다.
---
## 6. 구축 및 운영 가이드
### 6.1 설치 요구사항 및 호환성
Zabbix는 LAMP(Linux, Apache, MySQL, PHP) 스택을 기반으로 동작한다.
| OS | DB | PHP 버전 | 권장 사항 |
| :--- | :--- | :--- | :--- |
| RHEL/CentOS/Ubuntu | MySQL 8.0+ | 7.4 ~ 8.2 | InnoDB 스토리지 엔진 사용 필수 |
| Debian/Ubuntu | PostgreSQL 13+ | 7.4 ~ 8.2 | TimescaleDB 확장 설치 권장 |
| Windows | MySQL/PostgreSQL | 7.4 ~ 8.2 | IIS 또는 Apache 연동 필요 |
### 6.2 성능 최적화 및 백업
* **DB 튜닝**: `Housekeeper` 설정(데이터 보관 주기 조정)을 통해 DB 크기가 무한정 커지는 것을 방지해야 한다.
* **TimescaleDB 도입**: 대규모 데이터 수집 시 PostgreSQL의 TimescaleDB 확장을 사용하면 쓰기 성능과 쿼리 속도를 획기적으로 개선할 수 있다.
* **백업 전략**: DB 덤프(`mysqldump` 등)와 Zabbix 설정 파일(`/etc/zabbix_server.conf`)을 주기적으로 백업한다.
---
## 7. 추가 정보
### 7.1 타 모니터링 도구와의 비교
| 비교 항목 | Zabbix | Prometheus | Nagios | Datadog (SaaS) |
| :--- | :--- | :--- | :--- | :--- |
| **주요 특징** | 올인원 엔터프라이즈 | 시계열 데이터/K8s 최적화 | 전통적인 상태 체크 | 클라우드 네이티브/Managed |
| **데이터 수집** | Push & Pull | Pull 중심 | Active/Passive Check | Agent 기반 Push |
| **시각화** | 내장 대시보드/맵 | Grafana 연동 필수 | 기본 제공 (단순함) | 강력한 내장 UI |
| **비용** | 무료 (Open Source) | 무료 (Open Source) | 무료/유료 버전 | 유료 (종량제) |
### 7.2 구축 단계별 체크리스트
- [ ] **환경 분석**: 모니터링 대상 수, 데이터 수집 주기, 알림 채널 정의
- [ ] **인프라 준비**: OS 설치 및 DB(MySQL/PostgreSQL) 설치 및 최적화
- [ ] **Zabbix 설치**: Server, Web UI, Agent 설치 및 설정 파일 수정
- [ ] **네트워크 설정**: 방화벽 포트 개방 (Server ↔ Agent: 10050, 10051)
- [ ] **템플릿 적용**: 대상 장비에 맞는 표준 템플릿 할당
- [ ] **알림 설정**: SMTP/Webhook 연동 및 사용자 알림 그룹 설정
- [ ] **검증**: 임의 장애 유발을 통한 트리거 및 알림 작동 테스트
### 7.3 트러블슈팅 및 FAQ
**Q: Zabbix Server 로그에 "connection timeout" 에러가 발생합니다.**
* **A**: 대상 호스트의 방화벽에서 10050 포트가 열려 있는지 확인하고, `zabbix_agentd.conf` 파일의 `Server` 항목에 Zabbix Server의 IP가 정확히 등록되었는지 확인하십시오.
**Q: 대시보드 로딩 속도가 너무 느립니다.**
* **A**: 수집하는 아이템의 주기가 너무 짧지 않은지 확인하십시오. 또한, DB의 인덱스 최적화 상태를 점검하고, 데이터 양이 많다면 TimescaleDB 도입을 검토하십시오.
**Q: 특정 아이템의 값이 'Not supported'로 표시됩니다.**
* **A**: 에이전트가 해당 데이터를 수집할 권한이 없거나, 템플릿에 정의된 키(Key) 값이 대상 OS 버전과 맞지 않는 경우입니다. `zabbix_get` 도구를 사용하여 서버에서 직접 데이터를 요청해 보십시오.
### 7.4 참조
* [Zabbix 공식 홈페이지](https://www.zabbix.com/)
* [Zabbix 공식 매뉴얼](https://www.zabbix.com/documentation/)