zabbix와 telegram 연동
zabbix가 보낸 메일을 좀 더 빠르게 확인을 하기위해
zabbix와 telegram을 연동해보려고 한다.
1. 시나리오
서초 IDC에 있는 zabbix-server와 똑같이 VM을 하나 생성 하고
zabbix-server를 똑같은 버전으로 설치한다.
그리고 agent로 내부 서버를 추가하고
zabbix와 telegram을 연동 설정을 한다.
그리고 test를 진행한다.
agent에서 disk 사용량 문제를 발생하여 경고메일을 보낼때
telegram에도 문자를 보내는지 확인한다.
문자를 받으면 성공
문자를 성공적으로 받으면 서초에 있는 zabbix-server에 똑같이 적용한다.
2. zabbix test서버 구성
일단 zabbix test서버를 구성해보자.
기존 서버와 비슷하게 구성하겠다.
debian_version = 8.6
zabbix_version = 3.2.4
cpu = 1
ram = 1
disk = 1G : swap
10G : /
9G : 나머지
network = xenbr0 : 192.168.0.246 (외부)
xenbr1 : 10.0.0.246 (내부,zabbix)
hostname = zabbix
vm 설치를 완료하였으면
zabbix를 설치해보자.
패키지 파일은
https://repo.zabbix.com/zabbix/
위 사이트에서 다운받을 수 있다.
3.2.4버전을 찾을 수 없어서
3.2-1 버전을 설치하도록 하겠다.
1 - deb패키지 다운로드
zabbix:~$ sudo wget --no-check-certificate https://repo.zabbix.com/zabbix/3.2/debian/pool/main/z/zabbix-release/zabbix-release_3.2-1%2Bjessie_all.deb
2 - deb패키지 설치
zabbix:~$ sudo dpkg -i zabbix-release_3.2-1+jessie_all.deb
3 - deb패키지 설치 확인
zabbix:~$ dpkg -l |grep zabbix
ii zabbix-release 3.2-1+jessie all Zabbix official repository configuration
4 - zabbix 서버 설치
zabbix:~$ sudo apt update
zabbix:~$ sudo apt install zabbix-server-mysql zabbix-frontend-php zabbix-agent
* 설치 중간에 zabbix DB password 설정이 나온다
* 나는 사내 패스워드로 등록
5 - DB 생성
zabbix:~$ mysql -uroot -p
Enter password: 설정한 패스워드
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '패스워드 설정';
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
6 - 초기 스키마와 데이터 가져오기
zabbix:~$ zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
위 방법이 안된다면 다른 방법을 쓴다.
zabbix:~$ cd /usr/share/zabbix-server-mysql/
zabbix:/usr/share/zabbix-server-mysql$ ls
data.sql.gz images.sql.gz schema.sql.gz zabbix_server.conf
data.sql.gz images.sql.gz schema.sql.gz 3개의 파일로 설정을 해주자.
zcat ./schema.sql.gz | mysql -uzabbix -p zabbix
zcat ./images.sql.gz | mysql -uzabbix -p zabbix
zcat ./data.sql.gz | mysql -uzabbix -p zabbix
7 - zabbix server 파일 편집
zabbix:~$ sudo vi /etc/zabbix/zabbix_server.conf
DBPassword='설정 패스워드 입력'
8 - zabbix 시작
zabbix:~$ sudo systemctl start zabbix-server zabbix-agent
zabbix:/$ sudo systemctl enable zabbix-server zabbix-agent
9 - zabbix 확인
zabbix:/$ sudo ss -nltp |grep zabbix
LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",pid=10852,fd=5),("zabbix_agentd",pid=10851,fd=5),("zabbix_agentd",pid=10850,fd=5),("zabbix_agentd",pid=10849,fd=5),("zabbix_agentd",pid=10848,fd=5),("zabbix_agentd",pid=10846,fd=5))
LISTEN 0 128 :::10050 :::* users:(("zabbix_agentd",pid=10852,fd=6),("zabbix_agentd",pid=10851,fd=6),("zabbix_agentd",pid=10850,fd=6),("zabbix_agentd",pid=10849,fd=6),("zabbix_agentd",pid=10848,fd=6),("zabbix_agentd",pid=10846,fd=6))
10 - PHP 설정
zabbix:~$ sudo vi /etc/zabbix/apache.conf
# php_value date.timezone Europe/Riga
php_value date.timezone Asia/Seoul <--- 추가
11 - 아파치 시작
zabbix:~$ sudo systemctl start apache2
zabbix:~$ sudo systemctl enable apache2
apache 시작까지 하면 모든 작업이 완료되었다.
이제 zabbix frontend로 접속해보자.
http://server ip//zabbix
접속하면 zabbix 웹 페이지가 뜬다.
next를 누르면 다음 화면으로 넘어간다.
/etc/zabbix/apache.conf 설정이 잘 됐는지 확인하는 창인것 같다.
위에 10번 PHP 설정을 안하면 date관련 오류가 하나 발생한다.
오류가 없으면 next
DB설정하는 창이다.
따로 password만 입력해주고 넘어가자.
name만 zabbix로 입력해주고 넘어가자.
지금까지 구성한 설정을 보여준다.
확인 후 next
설치완료!!!
finish를 누르면 로그인창으로 넘어간다.
기본 ID : Admin PW: zabbix
A를 대문자로 해야한다 안그럼 로그인 실패!
접속까지 완료!
3. zabbix agent설정
server를 설치했으니 관리할 대상 서버가 필요하다.
설정을 해보자.
agent는 기존에 있던 VM으로 하겠다.
agent 설치부터 해보자.
~$ sudo apt install zabbix-agent
설치 후 이제 설정파일을 수정해보자.
~$ sudo vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.0.246 <-- zabbix 서버 IP
이제 zabbix와 telegram연동을 해보자!
참조
https://www.zabbix.com/download?zabbix=3.0&os_distribution=debian&os_version=jessie&db=MySQL
https://www.zabbix.com/documentation/3.0/manual/installation/install#installing_frontend
4. telegram bot 생성 및 설정
https://github.com/ableev/Zabbix-in-Telegram
위 github를 참조해서 연동하도록 하겠다.
1) pip 설치
python pip를 설치해자.
# sudo apt install python-pip
2) pip upgrade
pip upgrade를 하자.
# sudo pip install --upgrade pip
3) requsets 설치
requsets를 설치하자.
# sudo pip install requests
4) zabbix_server.conf 파일에 alertscript 경로 설정
zabbix_server.conf 파일에 alertscript 경로 설정을 해주자.
# sudo vi /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/etc/zabbix/bin
- 경로는 아무대나 지정해줘도 상관이 없다.
5) telegram bot 설정
이제 텔레그램을 켜서 botfather를 대화상대로 찾자.
- 외쪽 상단의 메뉴 > Contacts > botfather 검색
대화를 시작하면 하단에 start가 보인다. 눌러주자.
start를 누르면 채팅창이 뜬다.
거기서 /newbot을 클릭해주자.
사용할 봇의 이름을 적어주면 된다. ( 끝에 bot만 들어가면 된다 )
그러면 토큰을 받을 수 있다.
그 토큰을 다른데다 저장해 놓자.
이제 인터넷 주소창에 다음과 같은 형식으로 들어가보자.
https://api.telegram.org/< bot에게 받은 token >/getUpdates
예제 : https://api.telegram.org/bot737469595:AAHh0rOzGn0CEmhjB3vE405Kxa2BmhYAghg/getUpdates
그러면 다음과 같은 메시지를 가진 페이지로 넘어간다.
6) zabbix user생성
zabbix user를 생성해주자.
Administrator > Users > create User
유저는 test용이기 때문에 간단하게 만든다.
7) zbxtg 스크립트 다운 및 설정
zbxtg 스크립트를 다운받아야 한다.
https://github.com/ableev/Zabbix-in-Telegram 가면 받을 수 있다.
다운받고 아까 alertscript경로로 지정한
/etc/zabbix/bin에 넣는다.
그리고 zbxtg_setting.example.py의 이름을 zbxtg_setting.py로 변경하고
vi를 이용하여 열어준다.
# mv zbxtg_setting.example.py zbxtg_settings.py
# vi zbxtg_settings.py
telegram bot token설정
- tg_key = "XYZ"
+ tg_key = "799857259:AAG9WaApwtBiIPqq-nQFSLsuIMGg-XXmGkM"
zabbix server설정
- zbx_server = "http://127.0.0.1/zabbix/"
+ zbx_server = "http://192.168.0.246/zabbix/"
zabbix user 설정
- zbx_api_user = "api"
- zbx_api_pass = "api"
+ zbx_api_user = "test"
+ zbx_api_pass = "123"
저장
8) bot 작동 확인
위에 설정을 다 마쳤으면 이제 bot이 제대로 작동을 하는지 확인을 해보자.
/etc/zabbix/bin/zbxtg.py "binogood" "hello" "how are you?"
- binogood : telegram username ( 만드는 법 : settings > Edit profile > add username )
오류1
만약에 아래와 같은 에러가 발생하다면 zbxtg_settings의 이름이 제대로 되어있는지 확인해라.
Traceback (most recent call last):
File "/etc/zabbix/bin/zbxtg.py", line 17, in <module>
import zbxtg_settings
ImportError: No module named zbxtg_settings
오류2
No such file or directory 오류가 발생한다면
zbxtg.py파일을 열어서
:set fileformat:unix <--- 이 명령어로 파일의 포맷을 변경해줘라.
위 명령어를 입력하면
zbxtg.py: User 'binogood' needs to send some text bot in private
와 같은 에러를 출력한다.
그러면 telegram을 열고 아까 봇으로 만들었던 telegram bot을 찾아본다.
start 클릭
그리고 다시 한번 입력하면!!
나한테 쪽지가 온다.
성공이다.
이제 zabbix에 연동시켜보자.
5. zabbix, telegram 연동
1) media type생성
media type란 ?
어떻게 알람을 받을 것인지 설정하는 것이다.
Email,SMS,script등 다양하게 선택이 가능하다.
Administration > Media types 탭으로 가면 생성이 가능하다.
Create media type를 눌러서 생성을 해보자.
위 와 같이 설정하였다.
그리고 저장
2) media type설정
설정하는 법은 간단하다.
Adminstrator > Users > admin > Media로 들어가서 추가해주면 된다.
3) action 생성
Configuration > Action을 누르면 Action을 생성이 가능하다.
오른쪽 상단에 Create action을 눌러 Action을 생성해보자.
지금 부터 조금 복잡하다 잘 따라와야 한다.
그리고 하단에 select을 누른다.
hostname이 바뀌면 알려주는 트리거이다.
이제 Operations로 넘어가서
다 했으면 Recorvery operations로 넘어가자
Default message 부분이다.
Last value:{ITEM.LASTVALUE1} ({TIME})
zbxtg;graphs
zbxtg;graphs_period=10800
zbxtg;itemid:{ITEM.ID1}
zbxtg;title:{HOST.HOST} - {TRIGGER.NAME}
다 설정을 하였으면 add를 눌러서 생성을 해주자.
그럼 생성이 된 것을 확인이 가능하다.
좀 더 빨리 확인을 하기위해 몇가지 설정을 해보자.
위 설정을 마치면…
telegram으로 메시지가 온다!
완료!
6. zabbix-server에 적용
이제 우리가 사용하는 zabbix 서버에 적용을 시켜보자.
1) 설치 전 확인
먼저 패키지를 확인해보자.
zabbix-server:/# pip freeze
requests==2.18.4
패키지는 설치되어 있다.
2) script 가져오기
이제 script를 가져오자.
zabbix:/usr/lib/zabbix/alertscripts$ sudo scp -P42544 zbxtg* [email protected]:~orchard/
zbxtg.py 100% 36KB 36.5KB/s 00:00
zbxtg_settings.py 100% 1916 1.9KB/s 00:00
가져왔으면 /usr/lib/zabbix/alertscripts에 넣어주자.
mv zbxtg* /usr/lib/zabbix/alertscripts/
3) bot 생성
이제 봇을 생성하고!
zbxtg_settings.py 설정을 해보자.
tg_key = "771295100:AAEpdlS90krA3B3YatS6f83zRZI4p3KjSSo"
zbx_server = "zabbix-server.iorchard.co.kr/zabbix"
zbx_api_user = "api"
zbx_api_pass = "api"
위 설정을 했으면 이제 test를 해보자.
./zbxtg.py "binogood" "Hello" "How are you?"
잘 된다.
이제 zabbix에서 설정을 해보자.
4) media 생성
telegram에 대한 media를 생성하자.
다 했으면 저장
5) action 생성
action을 생성하자
6) admin 계정에 적용
이제 만든 media를 admin 계정에 적용시키자.
7) test
마지막으로 test를 진행해보자.
gitlab VM의 zabbix-agent를 내리고 기다려보자.
잘 된다.
good!