들어가며
Zabbix는 서버, 네트워크, 애플리케이션 등 IT 인프라의 성능과 상태를 실시간으로 모니터링하고 관리하는 오픈 소스 기반의 IT 모니터링 솔루션이다.
사용자는 Zabbix를 통해 장애 상황을 신속하게 감지하고, 데이터를 수집하여 시각적으로 확인할 수 있으며, 장애 발생 시 알림을 받아 문제를 해결할 수 있다.
Zabbix와 EDA(Event-Drivern Ansible)을 함께 사용하면 Zabbix에서 발생한 이벤트를 Ansible이 처리하는 방식으로 IT 프로세스를 자동화할 수 있다.
이 글에서는 Zabbix에서 EDA로 이벤트를 전송하고 이 이벤트를 Ansible로 자동화 하는 방법을 자세히 살펴본다.
Event-Driven Ansible(EDA) 이란?
Event-Driven Ansible(EDA) 이란, Red Hat Ansible Automation Platform의 구성 요소로, 특정 조건의 이벤트에 해당하는 대응을 정의할 수 있다.
이를 도입하여 시스템이 IT 환경 내의 다양한 이벤트에 동적으로 대응할 수 있다.
자동화 시나리오
1. 자동화된 문제 해결
- Zabbix : 웹 서버 다운이나 서비스 장애 등의 문제를 감지하고 EDA에 이벤트를 전송
- EDA : 사전 정의된 Ansible 플레이북을 실행하여 서비스를 다시 시작하거나, 애플리케이션을 다시 배포
2. 사전 예방적 시스템 유지 관리
- Zabbix : 성능 저하 또는 자원 고갈이 임계값에 접근하는 것을 감지
- EDA : 심각한 오류가 발생하기 전에 임시 파일 지우기, 디스크 공간 확장, 리소스 조정과 같은 사전 예방적 유지 관리 작업을 수행하는 Ansible 플레이북을 수행
3. 보안 사고 대응
- Zabbix : 시스템에서 의심스러운 활동이나 보안 취약점을 감지
- EDA : 감지된 이벤트를 기반으로 보안 패치를 자동으로 적용하고, 손상된 시스템을 격리하거나, 다른 보안 시정 조치를 수행하는 Ansible 플레이북을 수행
이벤트 전달 과정

Zabbix 측
- Zabbix에서 이벤트가 생성된다.
- Zabbix 서버는 이벤트가 Action의 조건을 만족하는지 확인한다. 조건을 만족하면 Action에 정의된 Operations을 수행한다.
- Operations는 EDA Media type으로 이벤트를 보내도록 설정되어 있다. User media에 지정된 주소와 포트가 목적지로 사용된다.
- Media type은 이벤트를 JSON으로 변경하여 EDA로 전송한다.
Ansible 측
- Zabbix에서 전송된 이벤트가 지정된 주소와 포트에 도착한다. 웹훅 플러그인은 이 포트를 Listen한다.
- 이벤트를 수신한 후, ansible-rulebook은 수신된 이벤트가 Conditions을 만족하는 Rule이 있는지 확인한다.
- Conditions을 만족하는 Rule이 있는 경우, 지정된 Action을 수행한다.
Zabbix 웹훅 설정
Zabbix 이벤트 알림 방법(Media type)은 이메일, SMS, 쉘 스크립트, 웹훅이 있다.
웹훅은 텔레그램, 라인과 같은 메신저, Jira, GitHub, EDA 등 외부 서비스와 연동하는데 사용된다.
EDA 웹훅을 사용하려면 EDA 주소를 가지고 있는 User를 생성해야 한다.
그런 다음 조건을 만족하는 이벤트가 발생할 때마다 지정된 User에게 알림을 보낸다.
EDA Media type 생성
- Alerts 메뉴에서Media types 선택한다.
- Event-Driven Ansible가 존재하지 않으면 화면 우상단의Import 버튼을 클릭하여media_event_driven_ansible.yaml 파일을 지정한다.
- Event-Driven Ansible가 존재하고, Disabled 상태이면 Enabled 상태로 변경한다.

알림을 받을 사용자 생성
- Users메뉴에서 Users 선택한다.
- 화면 우상단의Create user클릭하여 사용자 생성한다.

주의 : 호스트의 알림을 받기 위해서는 해당 호스트의 읽기 접근 권한이 있어야 한다.
3.Media탭에 가서 Media 박스 안에 Add 버튼 클릭한다.
4. Media를 설정한다.
- Type 을Event-Driven Ansible로 설정한다.
- Send to필드에 IP 주소와 포트를 설정한다.
- Add 버튼을 눌러서 Media를 저장한다.

5. User 설정창에서Add 를 클릭하여 사용자 저장한다.
주의: 룰북마다 별도의 포트가 필요하므로, 룰북마다 User를 생성해야 한다.
6. Action에 Event-Driven Ansible User로 이벤트를 전달하도록 설정한다.

7. 설정 완료 되었다. 조건을 만족하는 이벤트가 발생 하면 EDA로 전송된다.
EDA 웹훅 설정
- ansible-rulebook 을 설치한다. 아래 예는 RHEL9에서 pip를 이용하여 설치하였다

2. EDA에는 ansible.eda 표준 컬렉션의 웹훅 플러그인이 사용된다. 이 컬렉션이 없는 경우 다음 명령을 실행하여 설치할 수 있다.

3. 디버그 룰북을 생성한다.
ansible.eda.webhook를 이벤트 소스로 지정한다. 수신 주소와 포트를 지정한다.

rules 섹션에서 필요한 action을 설정한다.
4. 다음 명령으로 룰북을 실행할 수 있다.

위 룰북의 “debug:” action은 이벤트를 JSON 형태로 출력한다.

5. 이벤트의 세부 항목을 이용하여 원하는 조건의 이벤트를 처리하는 룰북을 만들 수 있다. 아래 룰북은 이벤트의 호스트가 “Web servers”, “Berlin” 호스트그룹에 포함되고, 이벤트 태그의 컴포넌트가 “configuration”이면 nginx를 배포하는 플레이북을 수행한다.

마치며
Zabbix와 EDA(Event-Drivern Ansible)을 함께 사용하여 Zabbix에서 발생한 이벤트를 Ansible이 처리하는 방식으로 IT 프로세스를 자동화하는 방법을 살펴 보았다.
이벤트 처리를 자동화함으로 휴먼 에러를 줄일 수 있고, 관리자들의 삶은 편해지며 프로세스를 개선하는 일에 집중할 수 있다.
# References
- https://blog.zabbix.com/forward-zabbix-events-to-event-driven-ansible-and-automate-your-workflows/25893/
- https://www.zabbix.com/integrations/ansible#event_driven_ansible
- https://ansible.readthedocs.io/projects/rulebook/en/latest/installation.html#installing-with-pip
- https://www.zabbix.com/documentation/guidelines/en/webhooks
- https://blog.zabbix.com/how-to-write-a-webhook-for-zabbix/25298/
김유성 프로
오픈소스사업부 오픈소스기술팀
Kubernetes , Istio 기술 지원을 하였으며, 현재는 Zabbix 기술 지원을 하고 있습니다.
-
이전 글
Register for Download Contents
- 이메일 주소를 제출해 주시면 콘텐츠를 다운로드 받을 수 있으며, 자동으로 뉴스레터 신청 서비스에 가입됩니다.
개인정보 수닙 및 활용에 동의하지 않으실 경우 콘텐츠 다운로드 서비스가 제한될 수 있습니다.
파일 다운로드가 되지 않을 경우 s-core@samsung.com으로 문의 주십시오.



