-
-
Save g0053/597f5af87ab32b66fe143f261180a2aa to your computer and use it in GitHub Desktop.
Nagios notifications via Telegrambot
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# file : nagiosTelegram.py | |
# purpose : send nagion notifications via Telegram bot | |
''' nagiosTelegram.py - small python script for sending nagion messages via a telegram | |
bot. Please see BotFather for more info about telegram bots | |
https://core.telegram.org/bots | |
Open telegram -> search for contacts: @BotFather | |
send the following message to BotFather | |
/newbot -> and answer the questions of BotFather | |
# getting your telegram or group id | |
1) send a message to you bot and surf to: | |
https://api.telegram.org/bot<token>/getStatus | |
2) download telegram-cli and send a message to the bot | |
usage: | |
# host event | |
./nagiosTelegram.py --token <bot toke> --contact <contact|group id> \ | |
--notificationtype 'host' --hoststate <UP|DOWN|UNREACHABLE> \ | |
--hostname <hostname> --hostaddress <ipaddress> \ | |
--output <event message> | |
# service event | |
./nagiosTelegram.py --token <bot token> --contact <contact|group_id> \ | |
--notificationtype 'service' --servicestate <'OK|WARNING|CRITICAL"UNKOWN> \ | |
--servicedesc <service descriptoin> --hostname <hostname> \ | |
--output <event message> | |
# nagios configuration | |
define command { | |
command_name notify-host-by-telegram | |
command_line /usr/local/bin/nagiosTelegram.py --token <token> \ | |
--notificationtype host --contact "$CONTACTPAGER$" --notificationtype "$NOTIFICATIONTYPE$" \ | |
--hoststate "$HOSTSTATE$" --hostname "$HOSTNAME$" --hostaddress "$HOSTADDRESS$" --output "$HOSTOUTPUT$" | |
} | |
define command { | |
command_name notify-service-by-telegram | |
command_line /usr/local/bin/nagiosTelegram.py --token <token> \ | |
--notificationtype service --contact "$CONTACTPAGER$" --notificationtype "$NOTIFICATIONTYPE$" \ | |
--servicestate "$SERVICESTATE$" --hostname "$HOSTNAME$" --servicedesc "$SERVICEDESC$" --output "$SERVICEOUTPUT$" | |
define contact { | |
contact_name nagios telegram bot | |
pager -<contact|group_id> | |
service_notification_commands notify-service-by-telegram | |
host_notification_commands notify-host-by-telegram | |
}''' | |
from __future__ import print_function | |
import sys | |
import argparse | |
import json | |
import requests | |
def parse_args(): | |
''' function for parsing arguments ''' | |
parser = argparse.ArgumentParser(description='Nagios notification via Telegram') | |
parser.add_argument('-t', '--token', nargs='?', required=True) | |
parser.add_argument('-o', '--object_type', nargs='?', required=True) | |
parser.add_argument('--contact', nargs='?', required=True) | |
parser.add_argument('--notificationtype', nargs='?') | |
parser.add_argument('--hoststate', nargs='?') | |
parser.add_argument('--hostname', nargs='?') | |
parser.add_argument('--hostaddress', nargs='?') | |
parser.add_argument('--servicestate', nargs='?') | |
parser.add_argument('--servicedesc', nargs='?') | |
parser.add_argument('--output', nargs='?') | |
args = parser.parse_args() | |
return args | |
def send_notification(token, user_id, message): | |
''' function for sending notification via Telegram bot ''' | |
url = 'https://api.telegram.org/bot' + token + '/sendMessage' | |
payload = {'chat_id': user_id, 'text': message} | |
return requests.post(url, data=payload) | |
def host_notification(args): | |
''' creating host notification message ''' | |
state = '' | |
if args.hoststate == 'UP': | |
state = u'\U00002705 ' | |
elif args.hoststate == 'DOWN': | |
state = u'\U0001F525 ' | |
elif args.hoststate == 'UNREACHABLE': | |
state = u'\U00002753 ' | |
return '{}{} ({}): {}' .format(state.encode('utf-8'), args.hostname, | |
args.hostaddress, args.output) | |
def service_notification(args): | |
''' creating service notification message ''' | |
state = '' | |
if args.servicestate == 'OK': | |
state = u'\U00002705 ' | |
elif args.servicestate == 'WARNING': | |
state = u'\U000026A0 ' | |
elif args.servicestate == 'CRITICAL': | |
state = u'\U0001F525 ' | |
elif args.servicestate == 'UNKNOWN': | |
state = u'\U00002753 ' | |
return '{}{}/{}: {}' .format(state.encode('utf-8'), args.hostname, | |
args.servicedesc, args.output) | |
def main(): | |
''' main function ''' | |
args = parse_args() | |
user_id = int(args.contact) | |
if args.object_type == 'host': | |
message = host_notification(args) | |
elif args.object_type == 'service': | |
message = service_notification(args) | |
respones = send_notification(args.token, user_id, message) | |
# if you want output, uncomment these lines. | |
# if json.loads(response.text)['ok']: | |
# got status 200 | |
# print('[+] {}: message was send to bot' .format(__FILE__)) | |
# else: | |
# got status !200 | |
# print('[-] error: {} - {}' .format(json.loads(response.text)['error_code'], | |
# json.loads(response.text)['description'])) | |
# sys.exit(1) | |
if __name__ == "__main__": | |
main() | |
sys.exit(0) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment