모니터링/Zabbix

zabbix 텔레그램 연동

배움엔 끝이없다 2022. 1. 12. 15:59
728x90
반응형

자빅스 텔레그램 연동

 

텔레그렘 봇 생성

 

 

 

□ 텔레그램 로그인 → 검색창에 ‘botfather’ 검색 → ‘시작’ 클릭 → ‘/newbot’ 입력 → 원하는 봇 이름 입력 → 사용자 명 입력 (마지막에 bot으로 끝나야함.)

 

 

□ 생성 한 봇을 검색하여 추가

 

 

* https://api.telegram.org/bot[api값입력]/getUpdates

봇을 제대로 시작하고, URL로 들어가면 아래와 같은 텍스트가 출력 (봇 시작 생략하면 404 에러 뜸)

 

 

 

2.2 텔레그렘 ID 확인 방법 

 

□ 텔레그램에서 ‘IDBot’ 검색 → ‘시작’ 클릭 → ‘/start’ 입력 → ‘/getid’ 입력 → id 값 확인

 

 

2.3 자빅스 홈페이지 설정

□ zabbix 페이지 접속 → “관리” → “미디어 타입” → “연락 방법 작성”

 

□ 미디어 타입 설정

- 이름은 원하는 대로 설정

- 종류는 Webhook 선택

- 파라미터는 다음과 같이 설정

이름
Message {ALERT.MESSAGE}
ParseMode HTML
Subject {ALERT.SUBJECT}
To {ALERT.SENDTO}
Token HTTP API 값 기재 (봇 생성할 때 나오는 값)

 

- 스크립트 설정

var Telegram = {
token: null,
to: null,
message: null,
proxy: null,
parse_mode: null,


sendMessage: function() {
var params = {
chat_id: Telegram.to,
text: Telegram.message,
disable_web_page_preview: true,
disable_notification: false
},
data,
response,
request = new CurlHttpRequest(),
url = 'https://api.telegram.org/bot' + Telegram.token + '/sendMessage';


if (Telegram.parse_mode !== null) {
params['parse_mode'] = Telegram.parse_mode;
}


if (Telegram.proxy) {
request.SetProxy(Telegram.proxy);
}


request.AddHeader('Content-Type: application/json');
data = JSON.stringify(params);


// Remove replace() function if you want to see the exposed token in the log file.
Zabbix.Log(4, '[Telegram Webhook] URL: ' + url.replace(Telegram.token, '<TOKEN>'));
Zabbix.Log(4, '[Telegram Webhook] params: ' + data);
response = request.Post(url, data);
Zabbix.Log(4, '[Telegram Webhook] HTTP code: ' + request.Status());


try {
response = JSON.parse(response);
}
catch (error) {
response = null;
}


if (request.Status() !== 200 || typeof response.ok !== 'boolean' || response.ok !== true) {
if (typeof response.description === 'string') {
throw response.description;
}
else {
throw 'Unknown error. Check debug log for more information.'
}
}
}
}


try {
var params = JSON.parse(value);


if (typeof params.Token === 'undefined') {
throw 'Incorrect value is given for parameter "Token": parameter is missing';
}


Telegram.token = params.Token;


if (params.HTTPProxy) {
Telegram.proxy = params.HTTPProxy;
}


if (['Markdown', 'HTML', 'MarkdownV2'].indexOf(params.ParseMode) !== -1) {
Telegram.parse_mode = params.ParseMode;
}


Telegram.to = params.To;
Telegram.message = params.Subject + '\n' + params.Message;
Telegram.sendMessage();


return 'OK';
}
catch (error) {
Zabbix.Log(4, '[Telegram Webhook] notification failed: ' + error);
throw 'Sending failed: ' + error + '.';
}

 

 

□ Message templates 설정

- 5개의 template을 추가 후 갱신합니다.

장애


위험: {EVENT.NAME}


문제 발생 시간: {EVENT.TIME} on {EVENT.DATE}
서버: {HOST.NAME}
심각성: {EVENT.SEVERITY}
Original problem ID: {EVENT.ID}
{TRIGGER.URL}
Problem recovery


정상: {EVENT.NAME}


정상화 시간: {EVENT.RECOVERY.TIME} on {EVENT.RECOVERY.DATE}
서버: {HOST.NAME}
심각성: {EVENT.SEVERITY}
Original problem ID: {EVENT.ID}
{TRIGGER.URL}
Problem update


Updated problem: {EVENT.NAME}


{USER.FULLNAME} {EVENT.UPDATE.ACTION} problem at {EVENT.UPDATE.DATE} {EVENT.UPDATE.TIME}.
{EVENT.UPDATE.MESSAGE}


Current problem status is {EVENT.STATUS}, acknowledged: {EVENT.ACK.STATUS}.
 
 
디스커버리


Discovery: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS}




Discovery rule: {DISCOVERY.RULE.NAME}


Device IP: {DISCOVERY.DEVICE.IPADDRESS}
Device DNS: {DISCOVERY.DEVICE.DNS}
Device status: {DISCOVERY.DEVICE.STATUS}
Device uptime: {DISCOVERY.DEVICE.UPTIME}


Device service name: {DISCOVERY.SERVICE.NAME}
Device service port: {DISCOVERY.SERVICE.PORT}
Device service status: {DISCOVERY.SERVICE.STATUS}
Device service uptime: {DISCOVERY.SERVICE.UPTIME}


Autoregistrtion


Autoregistration: {HOST.HOST}


Host name: {HOST.HOST}
Host IP: {HOST.IP}
Agent port: {HOST.PORT}

 

□ 연락 방법 설정 

- ‘id’ 설정 접속 (‘관리’ 탭에서 ‘유저’ 메뉴 접속 후 생성한 id 클릭) → ‘연락 방법’ 클릭 및

추가’ → ‘종류’에서 ‘유저그룹선택’ 미디어 타입 선택 및 ‘수신처’에 고객의 텔레그램 id 입력

 

□ 액션 설정

- ‘설정’ → ‘액션’ → ‘액션 작성’ 접속

 

- ‘이름’은 원하는대로 지정 / 조건 ‘추가’ 클릭

 

□ 호스트 그룹 부분 왼쪽에 ‘선택’ 클릭 → 생성한 그룹 선택 후 ‘추가’ 클릭

 

□ 오퍼레이션 설정 방법

- 오퍼레이션, 복구시 실행내용, 갱신시 실행내용을 각각 추가

- ‘오퍼레이션 설정’ 부분에서 ‘추가’ 클릭

 

Send to users 유저 추가
다른 미디어만 사용 생성한 타입 선택
Custom message 체크 후 아래 내용 작성
제목 [ZABBIX] 문제 발생
메시지 호스트: {HOST.NAME} ({HOST.IP})
심각도: {TRIGGER.SEVERITY}


알람 명: {TRIGGER.NAME}
발생 시기: {EVENT.DATE} , {EVENT.TIME}
Event ID: {EVENT.ID}
설명: {TRIGGER.DESCRIPTION}

 

- ‘복구시 실행내용’ 부분에서 ‘추가’ 클릭

 

Send to users 유저 추가
다른 미디어만 사용 생성한 타입 선택
Custom message 체크 후 아래 내용 작성
제목 [ZABBIX] 문제 해결(복구)
메시지 호스트: {HOST.NAME} ({HOST.IP})
심각도: {TRIGGER.SEVERITY}


알람 명: {TRIGGER.NAME}
복구 시기 : {EVENT.RECOVERY.DATE}, {EVENT.RECOVERY.TIME}
Event ID: {EVENT.ID}

 

- ‘갱신시 실행내용’ 부분에서 ‘추가’ 클릭

 

Send to users 유저 추가
다른 미디어만 사용 생성한 타입 선택

 

 

- 모두 작성 완료 하였으면 추가

 

728x90
반응형
LIST