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 웹 페이지가 뜬다.

../../../_images/1.png

next를 누르면 다음 화면으로 넘어간다.

../../../_images/2.png

/etc/zabbix/apache.conf 설정이 잘 됐는지 확인하는 창인것 같다.

위에 10번 PHP 설정을 안하면 date관련 오류가 하나 발생한다.

오류가 없으면 next

../../../_images/3.png

DB설정하는 창이다.

따로 password만 입력해주고 넘어가자.

../../../_images/4.png

name만 zabbix로 입력해주고 넘어가자.

../../../_images/5.png

지금까지 구성한 설정을 보여준다.

확인 후 next

../../../_images/6.png

설치완료!!!

finish를 누르면 로그인창으로 넘어간다.

../../../_images/7.png

기본 ID : Admin PW: zabbix

A를 대문자로 해야한다 안그럼 로그인 실패!

../../../_images/8.png

접속까지 완료!

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 검색
../../../_images/17.png

대화를 시작하면 하단에 start가 보인다. 눌러주자.

../../../_images/18.png

start를 누르면 채팅창이 뜬다.

거기서 /newbot을 클릭해주자.

../../../_images/19.png

사용할 봇의 이름을 적어주면 된다. ( 끝에 bot만 들어가면 된다 )

그러면 토큰을 받을 수 있다.

그 토큰을 다른데다 저장해 놓자.

../../../_images/20.png

이제 인터넷 주소창에 다음과 같은 형식으로 들어가보자.

https://api.telegram.org/< bot에게 받은 token >/getUpdates

예제 : https://api.telegram.org/bot737469595:AAHh0rOzGn0CEmhjB3vE405Kxa2BmhYAghg/getUpdates

그러면 다음과 같은 메시지를 가진 페이지로 넘어간다.

../../../_images/21.png

6) zabbix user생성

zabbix user를 생성해주자.

../../../_images/22.png

Administrator > Users > create User

유저는 test용이기 때문에 간단하게 만든다.

../../../_images/23.png

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을 찾아본다.

../../../_images/24.png

start 클릭

../../../_images/25.png

그리고 다시 한번 입력하면!!

../../../_images/26.png

나한테 쪽지가 온다.

성공이다.

이제 zabbix에 연동시켜보자.

5. zabbix, telegram 연동

1) media type생성

media type란 ?

어떻게 알람을 받을 것인지 설정하는 것이다.

Email,SMS,script등 다양하게 선택이 가능하다.

Administration > Media types 탭으로 가면 생성이 가능하다.

../../../_images/12.png

Create media type를 눌러서 생성을 해보자.

../../../_images/13.png

위 와 같이 설정하였다.

그리고 저장

2) media type설정

설정하는 법은 간단하다.

../../../_images/27.png
../../../_images/28.png

Adminstrator > Users > admin > Media로 들어가서 추가해주면 된다.

../../../_images/29.png

3) action 생성

Configuration > Action을 누르면 Action을 생성이 가능하다.

../../../_images/15.png

오른쪽 상단에 Create action을 눌러 Action을 생성해보자.

지금 부터 조금 복잡하다 잘 따라와야 한다.

../../../_images/30.png
../../../_images/31.png

그리고 하단에 select을 누른다.

hostname이 바뀌면 알려주는 트리거이다.

이제 Operations로 넘어가서

../../../_images/32.png
../../../_images/33.png

다 했으면 Recorvery operations로 넘어가자

../../../_images/34.png
../../../_images/35.png

Default message 부분이다.

Last value:{ITEM.LASTVALUE1} ({TIME})
zbxtg;graphs
zbxtg;graphs_period=10800
zbxtg;itemid:{ITEM.ID1}
zbxtg;title:{HOST.HOST} - {TRIGGER.NAME}

다 설정을 하였으면 add를 눌러서 생성을 해주자.

../../../_images/36.png

그럼 생성이 된 것을 확인이 가능하다.

좀 더 빨리 확인을 하기위해 몇가지 설정을 해보자.

../../../_images/38.png
../../../_images/39.png
../../../_images/40.png
../../../_images/41.png
../../../_images/42.png
../../../_images/43.png

위 설정을 마치면…

../../../_images/37.png

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 생성

이제 봇을 생성하고!

../../../_images/44.png

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?"
../../../_images/45.png

잘 된다.

이제 zabbix에서 설정을 해보자.

4) media 생성

telegram에 대한 media를 생성하자.

../../../_images/46.png

다 했으면 저장

5) action 생성

action을 생성하자

../../../_images/47.png
../../../_images/48.png
../../../_images/49.png

6) admin 계정에 적용

이제 만든 media를 admin 계정에 적용시키자.

../../../_images/50.png

7) test

마지막으로 test를 진행해보자.

gitlab VM의 zabbix-agent를 내리고 기다려보자.

../../../_images/51.png

잘 된다.

good!