(http://www.digimoon.net/)
Step 1) Administration -> Media types 설정


파라미터 |
설정 |
Name |
원하는 Media Name을 선택 (예: Email) |
Type |
|
SMTP server |
보내는 SMTP 서버 주소를 입력 (예: mail.foobar.com) |
SMTP server port |
SMTP 서버가 사용하는 포트 입력 (예: 25) |
SMTP helo |
‘SMTP server’와 동일하게 입력 (예: mail.foobar.com) |
SMTP email |
SMTP 서버에 인증 액세스할 수 있는, ‘@’를 포함한 Email 주소 입력 (예: user@foobar.com) |
Connection security |
SMTP 서버 정보에 맞게 입력 (예: None) |
Authentication |
SMTP 서버 정보에 맞게 입력 (예: None) |
Username |
SMTP 서버를 사용하는 Email 계정 이름이나 ‘@’를 포함한 Email 주소 입력 |
Password |
Email 계정의 패스워드 입력 |
Enabled |
V 체크 |
다 입력했으면 최하단 Update 눌러 적용

Adminisration -> Users -> Alias 필드에서 원하는 User -> Media 탭-> Add

파라미터 |
설정 |
Type |
앞의 Media Type에서 만들었던 Media의 Name들이 펼침메뉴로 제공된다. |
Send to |
Alarm을 수신할 메일주소를 입력한다. Media 만들 당시 입력했던 SMTP서버와는 무관하므로 원하는 메일주소를 자유롭게 입력 |
When active |
기본값 그대로 사용 |
Use if severity |
Alarm을 받기 원하는 severity를 선택 (예: 모두 선택) |
Enabled |
V 체크 |

여기까지 진행하였으면 4가지 sub tab menu가 확인될 것이다.

파라미터 |
설정 |
Name |
원하는 Action 이름을 입력 |
Conditions |
아래 “New condition”을 통해 만든 conditon이 나열된다. 삭제를 원하면 우측 “Remove” 클릭 |
New condition |
본 문서에서는 어떤 장비이든지 특정 Trigger 이벤트 발생하면 모두 원하는 Action이 일어나도록(여기서는 alarm) 하는 설정을 할 것이다. 왼쪽 드롭다운 메뉴에서 “Trigger severity” 선택, 중간 드롭다운 메뉴의 연산자로는 “>=” 선택, 맨 오른쪽 드롭다운 메뉴에서 “Select” 선택한다. |
Enabled |
V 체크 |
Add를 한 뒤의 설정 모습

파라미터 |
설정 |
Default operation step duration |
1h |
Default subject |
이벤트 수신 내용의 제목 형식을 설정한다. 기본값 그대로 사용 |
Default message |
이벤트 수신 내용의 상세 메시지 형식을 설정한다. 기본값 그대로 사용 Problem name: {TRIGGER.NAME} Host: {HOST.NAME} Severity: {TRIGGER.SEVERITY}
Original problem ID: {EVENT.ID} {TRIGGER.URL} |
Pause operations while in maintenance |
V 체크 |
Operation details |
New 클릭
Steps : 기본값 사용 (1-1) Conditions : N/A |
3번째 sub tab menu “Recovery operations”은 “Operations”와 동일한 방법으로 기본값을 그대로 사용하는 설정을 한다. 4번째 menu “Acknowledgement operations”는 생략한다.
Recovery operations
파라미터 |
설정 |
Default subject |
이벤트 수신 내용의 제목 형식을 설정한다. |
Default message |
이벤트 수신 내용의 상세 메시지 형식을 설정한다. Problem name: {TRIGGER.NAME} Host: {HOST.NAME} Severity: {TRIGGER.SEVERITY}
Original problem ID: {EVENT.ID} {TRIGGER.URL} |
Operation details |
New 클릭
|
Operations, Recovery operations 설정을 마쳤으면 아래 Add 아이콘을 클릭하여 설정을 마무리한다.

이제 Trigger 이벤트 발생 시 Email로 alarm을 받게 될 것이다.
참고문서
2 Operations
https://www.zabbix.com/documentation/3.4/manual/config/notifications/action/operation
3 Recovery operations
https://www.zabbix.com/documentation/3.4/manual/config/notifications/action/recovery_operations
4 Acknowledgement operations
$2
Telegram alarm을 받기 위해서는 Telegram Bot과, Bot을 call하는 python 스크립트가 필요하다.
본 문서에서는 CentOS 7에 설치된 Zabbix Server에 구성하는 법을 다룬다.
Step 1) Zabbix Server에 python-pip 설치
[root@zabbix-server ~]# wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
[root@zabbix-server ~]# rpm -ivh epel-release-latest-7.noarch.rpm
[root@zabbix-server ~]# yum install python-pip
Step 2) Zabbix Server에 python-pip가 설치되었으면 request module for python, python-telegram-bot module for python 추가 설치
[root@zabbix-server ~]# pip install requests
[root@zabbix-server ~]# pip install python-telegram-bot --upgrade
Step 3) alertscript를 사용할 수 있도록 Zabbix Server 설정
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# systemctl restart zabbix-server
※ pacemaker HA 구성한 Zabbix Server 환경에서는 Zabbix Server를 그냥 재시작하면 안 된다. HA를 maintenance mode로 변경한 뒤 재시작해야 한다.
pacemaker HA resources에 maintenance mode 적용 및 확인
[root@zabbix-server ~]# pcs property set maintenance-mode=true
[root@zabbix-server ~]# pcs status
pacemaker HA resources의 maintenance mode 해제
[root@zabbix-server ~]# pcs property unset maintenance-mode
[root@zabbix-server ~]# pcs status
Step 4) Telegram bot 만들어 HTTP API token 얻기
Telegram bot을 만들기 위해서는 자신의 Telegram 계정이 하나 필요하다. 자신의 전화번호로 계정을 하나 만든다.
다음으로 Bot을 만들기 위해 Telegram client 에서 대화상대로 BotFather를 찾는다.

BotFather와의 대화창으로 들어간다.

BotFather에게 대화를 걸어본다. "/start"라고 입력해 보자. bot 생성을 위해서는 "/newbot"을 입력하면 되는 것으로 응답내용에서 확인할 수 있다.



bot 테스트를 해보자. 아래 URL 형식을 지켜 웹브라우저 주소창에 입력하자. 빨간색 부분을 자신의 HTTP API token 값으로 바꾸어 입력한다.
https://api.telegram.org/bot52946xxxx:EETRNJU3jQEGWQdjNv3llb4bnDSDREGuuuL/getUpdates
“ok” 내용을 포함하는 JSON 포맷의 응답 내용이 확인되면 bot을 이제 컨트롤할 수 있다.
나의 계정을 이용하여 telegram bot을 움직여 bot이 메시지를 보내는 테스트를 해 보자. 테스트 결과는 bot으로부터 메시지를 수신하는 것이다. 테스트를 위해서는 bot을 만드는 데 쓰인 내 telegram 계정의 chat_id를 알아야 한다(bot의 chat_id가 아님에 유의한다). telegram서버와 통신 가능하며, python 실행이 가능한 아무 시스템에서 아래 python code를 작성한다. 빨간색 부분을 자신의 token으로 입력한다.
[root@zabbix-server ~]# vi find_chat_id.py
#!/usr/bin/env python
import telegram
import requests
my_token = '52946xxxx:AAH1KMyc3rVYVeg3aS5miS60jg03GVTAViQ'
bot = telegram.Bot(token = my_token)
updates = bot.getUpdates()
for u in updates :
print(u.message)
chat_id를 확인하였다(여기서는 38510xxx).
[root@zabbix-server ~]# python find_chat_id.py
{'delete_chat_photo': False, 'new_chat_photo': [], 'from': {'username': u'amogae-son', 'first_name': u'Gil-Dong', 'last_name': u'Hong', 'is_bot': False, 'language_code': u'ko-KR', 'id': 38510xxx}, 'text': u'/my_id', 'caption_entities': [], 'entities': [{'length': 6, 'type': u'bot_command', 'offset': 0}], 'channel_chat_created': False, 'new_chat_members': [], 'supergroup_chat_created': False, 'chat': {'username': u' amogae-son ', 'first_name': u' Gil-Dong ', 'last_name': u'Hong', 'type': u'private', 'id': 38510xxx}, 'photo': [], 'date': 1518865536, 'group_chat_created': False, 'message_id': 1523, 'new_chat_member': None}
[root@zabbix-server ~]#
확인한 chat_id를 추가 입력하는 아래 URL에 액세스해 본다. bot으로부터 “Hello” 응답이 올 것이다.

Step 5) 이제 Telegram bot을 call하는 python 스크립트를 Zabbix Server에 작성할 차례이다.
아래 URL에서 python 스크립트 소스를 받는다.
Zabbix-in-Telegram
https://github.com/ableev/Zabbix-in-Telegram
압축 풀어 나오는 Zabbix-in-Telegram-master 디렉토리를 /usr/lib/zabbix/alertscripts 에 위치시킨다. 각 파일들의 ownership과 permission을 아래 출력과 동일하게 설정한다.
[root@zabbix-server alertscripts]# pwd
/usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]# ls -lh
total 4.0K
drwxr-xr-x 3 zabbix zabbix 4.0K Feb 17 20:11 Zabbix-in-Telegram-master
[root@zabbix-server alertscripts]# ls -lh Zabbix-in-Telegram-master/
total 76K
drwxr-xr-x 2 zabbix zabbix 47 Feb 10 18:39 bash-old-version
-rw-r--r-- 1 zabbix zabbix 1.1K Feb 10 18:39 LICENSE.txt
-rw-r--r-- 1 zabbix zabbix 4.3K Feb 10 18:39 README.md
-rw-r--r-- 1 zabbix zabbix 41 Feb 10 18:39 requirements.txt
-rwxr--r-- 1 zabbix zabbix 6.9K Feb 10 18:39 ZbxTgDaemon.py
-rwxr--r-- 1 zabbix zabbix 8 Feb 10 18:39 zbxtg_group.py
-rwxr--r-- 1 zabbix zabbix 36K Feb 11 18:51 zbxtg.py
-rw-r--r-- 1 zabbix zabbix 1.3K Feb 10 18:39 zbxtg_settings.example.py
-rw-r--r-- 1 zabbix zabbix 1.3K Feb 12 21:36 zbxtg_settings.py
-rw-r--r-- 1 root root 1.1K Feb 12 21:43 zbxtg_settings.pyc
[root@zabbix-server alertscripts]#
zbxtg_settings.py 을 아래와 같이 작성한다. 빨간색 부분이 수정을 필요로 한다.
[root@zabbix-server Zabbix-in-Telegram-master]# vi zbxtg_settings.py
# -*- coding: utf-8 -*-
tg_key = "52946xxxx:AAH1KMyc3rVYVeg3aS5miS60jg03GVTAViQ" # telegram bot api key
zbx_tg_prefix = "zbxtg" # variable for separating text from script info
zbx_tg_tmp_dir = "/var/tmp/" + zbx_tg_prefix # directory for saving caches, uids, cookies, etc.
zbx_tg_signature = False
zbx_tg_update_messages = True
zbx_tg_matches = {
"problem": "PROBLEM: ",
"ok": "OK: "
}
zbx_server = "http://127.0.0.1/zabbix/" # zabbix server full url
zbx_api_user = "admin"
zbx_api_pass = "xxxxx"
zbx_api_verify = False # True - do not ignore self signed certificates, False - ignore
zbx_basic_auth = False
#zbx_basic_auth_user = "zabbix"
#zbx_basic_auth_pass = "xxxxx"
proxy_to_zbx = None
proxy_to_tg = None
#proxy_to_zbx = "proxy.local:3128"
#proxy_to_tg = "proxy.local:3128"
google_maps_api_key = None # get your key, see https://developers.google.com/maps/documentation/geocoding/intro
zbx_tg_daemon_enabled = False
#zbx_tg_daemon_wl_ids = ["trim703", ]
#zbx_tg_daemon_wl_u = ["xxx", ]
zbx_db_host = "localhost"
zbx_db_database = "zabbix"
zbx_db_user = "zabbix"
zbx_db_password = "xxxxx"
파라미터 |
설정 |
tg_key |
Telegram HTTP API token 입력 |
zbx_server |
본Zabbix-in-Telegram플러그인을 Zabbix Server에 설치한 관계로 |
zbx_api_user |
Zabbix dash board 로그인 username |
zbx_api_pass |
Zabbix dash board 로그인 계정의 password |
zbx_api_verify |
zbx_server url프로토콜이 https일 경우 SSL errors를 무시하도록 함. False로 설정 |
zbx_basic_auth |
False |
zbx_tg_daemon_enabled |
False |
zbx_db_host |
DB서버의 hostname이나 ip address |
zbx_db_database |
DB서버의 Zabbix DB db name |
zbx_db_user |
DB서버의 Zabbix DB user name |
zbx_db_password |
DB서버의 Zabbix DB user password |
작성했으면 CLI에서 테스트
형식)
# su - zabbix -c “/usr/lib/zabbix/alertscripts/Zabbix-in-Telegram-master/zbxtg.py “<username of telegram>” ”subject” “description” ”
※ <username of telegram>은 bot을 만드는데 사용되었던 username이다. 띄어쓰기가 없다면 각 아규먼트를 따옴표로 감싸지 않아도 된다.
예)
[root@zabbix-server Zabbix-in-Telegram-master]# su - zabbix -c "/usr/lib/zabbix/alertscripts/Zabbix-in-Telegram-master/zbxtg.py "username" "TEST" "OK""
아래와 같이 Telegram client에서 수신되는 것을 확인할 수 있다.

이제 Zabbix Server 대시보드에서 이 스크립트를 사용하는 설정만 하면 된다.
Step 6) Zabbix Server 대시보드에서 Telegram 미디어 생성
Administration -> Media types -> Create media type

파라미터 |
설정 |
Name |
원하는 Media Name을 선택 (예: Telegram) |
Type |
Script |
Script name |
Zabbix Server zabbix_server.conf의 “AlertScriptsPath” 파라미터에 정의된 Path 이하의 스크립트 소스 위치를 작성한다. |
Script parameters |
아래 3가지 파라미터 작성 |
Enabled |
V 체크 |
Step 7) 만든 Media를 User에게 할당
Adminisration -> Users -> Alias 필드에서 원하는 User -> Media 탭-> Add
파라미터 |
설정 |
Type |
앞의 Media Type에서 만들었던 Media의 Name들이 펼침메뉴로 제공된다. |
Send to |
bot을 만드는데 사용되었던 username |
When active |
기본값 그대로 사용 |
Use if severity |
Alarm을 받기 원하는 severity를 선택 (예: 모두 선택) |
Enabled |
V 체크 |
Step 8) Actions 설정
Email alarm 설정 방법과 대동소이하다.
Configuration -> Actions -> 기본값으로 “Report problems to Zabbix administrators” Action이 Disabled 상태로 생성되어 있다. 이를 그대로 사용해도 되나 본 문서에서는 신규 Action을 생성하는 방법을 설명한다. ->우측 상단 “Event source” 드롭다운 메뉴에서 “Triggers” 선택하고 Create action 클릭

여기까지 진행하였으면 4가지 sub tab menu가 확인될 것이다.

파라미터 |
설정 |
Name |
원하는 Action 이름을 입력 |
Conditions |
아래 “New condition”을 통해 만든 conditon이 나열된다. 삭제를 원하면 우측 “Remove” 클릭 |
New condition |
본 문서에서는 어떤 장비이든지 특정 Trigger 이벤트 발생하면 모두 원하는 Action이 일어나도록(여기서는 alarm) 하는 설정을 할 것이다. 왼쪽 드롭다운 메뉴에서 “Trigger” |
Enabled |
V 체크 |
Add를 한 뒤의 설정 모습

다음 Sub tab 메뉴 “Operations”을 설정한다. Operations에는 sub tab menu ”Action”에서 정의한 조건 발생 시 어떤 동작을 할 지 설정한다. 모든 입력창의 내용에 대해 Email alarm 설정에서는 기본값 그대로 사용하는 방법을 설명했으나, Telegram 용 alarm 설정에서는 python 스크립트에 의해 사용 가능해진 매크로를 사용하여 그래프 출력까지 가능한 설정을 설명한다.
Operations
파라미터 |
설정 |
Default operation step duration |
1h |
Default subject |
이벤트 수신 내용의 제목 형식을 설정한다. |
Default message |
이벤트 수신 내용의 상세 메시지 형식을 설정한다. Severity: {TRIGGER.SEVERITY} zbxtg;graphs zbxtg;graphs_period=10800 zbxtg;itemid:{ITEM.ID1} zbxtg;title:{HOST.HOST} - {TRIGGER.NAME} |
Pause operations while in maintenance |
V 체크 |
Operations detail |
New 클릭 <strongSteps>$2 : 기본값 사용 (1-1) <strongConditions>$2 : N/A |
파라미터 |
설정 |
Default subject |
이벤트 수신 내용의 제목 형식을 설정한다. |
Default message |
이벤트 수신 내용의 상세 메시지 형식을 설정한다. Severity: {TRIGGER.SEVERITY} zbxtg;graphs zbxtg;graphs_period=10800 zbxtg;itemid:{ITEM.ID1} zbxtg;title:{HOST.HOST} - {TRIGGER.NAME} |
Operation details |
New 클릭 $2 : Notify all involved (문제 event를 통지 받은 모든 사용자에게 recovery message를 송신) 선택 |
Operations, Recovery operations 설정을 마쳤으면 아래 Add 아이콘을 클릭하여 설정을 마무리한다.

