Invio di notifiche Nagios con Telegram

From RVM Wiki
Jump to navigation Jump to search

Tramite Bot

L'utilizzo di un Bot evita di dover creare un account telegram fittizio.

Creazione del Bot

  • Da un account Telegram qualsiasi, aggiungere il bot BotFather, cliccando sul link [1]
  • Scrivere il comando
/newbot
  • Alla domanda, inserire il nome descrittivo del Bot, ad esempio
My Example Bot
  • Alla domanda, inserire lo username del Bot, che dovrà terminare in "bot", ad esempio
my-example-bot
  • A questo punto si riceverà la il token del Bot, del tipo:
 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
  • Da Telegram, inviare ora DUE MESSAGGI qualsiasi al BOT per inizializzarlo, altrimenti lo script python successivo darà errore.

Installazione dello script di notifica

  • Lo script già pronto ed agggiornato, contenente tutte le librerie si trova sul repository git, contentente tutte librerie necessarie. Il suo template è:
#!/usr/bin/env python

import ConfigParser
import os
import sys
libpath=os.path.expanduser('~') + "/nagios-telegram-bot/lib"
sys.path.append(libpath)
import telegram

conffile=os.path.expanduser('~') + "/nagios-telegram-bot.ini"
Config = ConfigParser.ConfigParser()
Config.read(conffile)
bot_token = Config.get("main", "token")
#print ("Token=%s" % bot_token)
bot = telegram.Bot(token=bot_token)
chat_id = bot.getUpdates()[-1].message.chat_id
message = sys.argv[1]
bot.sendMessage(chat_id=chat_id, text=message)
  • Diventare utente nagios e posizionarsi nella home directory
sudo -u nagios bash --login
cd
pwd
  • Clonare lo script:
git clone https://mnt.vvngrl@assistenza.rvmgroup.it/git/nagios-telegram-bot
  • Inserire il token nel file di configurazione:
cp nagios-telegram-bot/nagios-telegram-bot.ini .
vi nagios-telegram-bot.ini
[main]
token=110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
  • Testare l'invio di un messaggio:
 nagios-telegram-bot/nagios-telegram-bot.py "Messaggio di test ore 15:06"
  • Il messaggio dovrebbe essere ricevuto dal Bot.
  • In nagios si configurerà un solo contatto dinotifica, quello che richiama lo script del bot
  • Chi vorrà ricevere i messaggi del Bot, dovrà iscriversi al Bot

Configurazione di Nagios

  • Assicurarsi che la variabile HOME che punta alla home di nagios sia impostata al valore rilevato precedentemente:
sudoedit /etc/default/nagios3
export HOME="/var/log/nagios"
  • Definire il contact group:
sudoedit /etc/nagios3/conf.d/contacts.cfg
define contactgroup{
    contactgroup_name               nagios-admins-telegram
    alias                           Nagios Administrators Telegram
    members                         telegram-bot
}
  • Definire il contatto del Bot ed aggiungere i comandi di notifica (notare che il bot non ha ne indirizzo email, ne pager):
sudoedit /etc/nagios3/conf.d/contacts.cfg
define contact{
    contact_name                    telegram-bot
    alias                           Nagios Telegram Bot
    host_notification_period        24x7
    service_notification_period     24x7
    host_notification_options       d,r
    service_notification_options    w,c,r,u
    host_notification_commands      notify-host-by-telegram
    service_notification_commands   notify-service-by-telegram
}
  • Definire i comandi di notifica (per i percorsi, verificare la hom directory di nagios dove si è installato lo script):
sudoedit /etc/nagios3/conf.d/commands.cfg
define command{
    command_name    notify-host-by-telegram
    command_line    /var/log/nagios/nagios-telegram-bot/nagios-telegram-bot.py "$HOSTNAME$ $HOSTSTATE$ ($SHORTDATETIME$) $NOTIFICATIONTYPE$ $NOTIFICATIONCOMMENT$"
}

define command{
    command_name    notify-service-by-telegram
    command_line    /var/log/nagios/nagios-telegram-bot/nagios-telegram-bot.py "$HOSTNAME$/$SERVICEDESC$ $SERVICESTATE$ ($SHORTDATETIME$) $NOTIFICATIONTYPE$ $NOTIFICATIONCOMMENT$"
}
  • Definire i template di host che dovranno essere notificati via telegram (aggiungere oltre a nagios-admins-telegram anche tutti gli altri contact groups per le notifiche via mail)
sudoedit templates_hosts.cfg
define host{
    name                            telegram-host
    use                             generic-host
    notification_options            d,r
    contact_groups                  nagios-admins-telegram,nagios-admins
    register                        0
}
  • Definire i template di services che dovranno essere notificati via telegram (aggiungere oltre a nagios-admins-telegram anche tutti gli altri contact groups per le notifiche via mail)
sudoedit templates_services.cfg
define service{
    name                            telegram-service
    use                             generic-service
    contact_groups                  nagios-admins-telegram,nagios-admins
    notification_options            c,r
    register                        0
}

  • Definire gli host e servizi che dovranno essere notifiati, usando i templates appena creati:
define host{
    use             telegram-host
    host_name       host.example.com
    alias           Wxample host
	# ...
}
define service{
    use                 telegram-service
    host_name           host.example.com
    service_description EXAMPLE_SERVICE
	# ....
}
  • Testare la configurazione e Riavviare nagios
sudo -u nagios /usr/sbin/nagios3 -v /etc/nagios3/nagios.cfg && sudo /etc/init.d/nagios3 restart
  • Inviare una notifica custom da web gui nagios

Riferimenti

Tramite telegram-cli

Installazione telegram-cli

Instllare con uno dei tre metodi:

Installazione con pacchetto Debian

  • Prelevare i sorgenti:
cd /tmp/
git clone --recursive https://github.com/vysheng/tg.git &&  cd tg
  • Installare i tools e le dipendenze necessarie:
sudo apt-get install autotools-dev autoconf-archive libreadline-dev libconfig-dev libssl-dev lua5.1 liblua5.1-dev lua-lgi libevent-dev debhelper libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev 
  • Compilare il pacchetto:
dpkg-buildpackage -b -rfakeroot
  • Per installarlo localmente:
sudo dpkg -i ../telegram-cli_1.0.6-1_amd64.deb

Installazione da sorgente

Debian Squeeze

  • Installare le souce lts e backports
  • Installare le build-deps
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.1 liblua5.1-0-dev libevent-dev libjansson-dev make git

Debian Wheezy

  • Installare le build-deps
sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev 

Debian

cd /tmp/
git clone --recursive https://github.com/vysheng/tg.git && cd tg
./configure 
make
sudo cp bin/telegram-cli /usr/local/bin
sudo mkdir /etc/telegram-cli/
sudo cp server.pub /etc/telegram-cli/server.pub

Installazione da binario

  • Compilare su una macchina uguale
  • Copiare il binario e le chiavi server
cp bin/telegram-cli /usr/local/bin
mkdir /etc/telegram-cli/
cp server.pub /etc/telegram-cli/server.pub

Debian Squeeze

  • Installare le librerie necessarie:
sudo apt-get install libjansson4 libconfig8 liblua5.1-0

Debian Wheezy

  • Installare le librerie necessarie:
sudo apt-get install libjansson4 libconfig9 liblua5.2-0

Creazione script

sudoedit /usr/local/bin/telegram-msg
#!/bin/bash
to=$1
msg=$2
tgpath=/usr/bin
nagios_home=/var/lib/nagios
#echo "$(date) - ID=$(id) - ${tgpath}/telegram-cli -C -R -W -p /var/log/nagios/.telegram-cli -c /var/log/nagios/.telegram-cli/config -e  \"msg $to $msg\"" >> /tmp/telegram-msg.log 2>&1
${tgpath}/telegram-cli -C -R -W -p ${nagios_home}/.telegram-cli -c ${nagios_home}/.telegram-cli/config -e "msg $to $msg" # >> /tmp/telegram-msg.log 2>&1
sudo chmod +x  /usr/local/bin/telegram-msg

Registrazione account

  • Occorre avere un numero di telefono a cui ricevere sms o ricevere chiamate
  • Diventare nagios
sudo -u nagios -s /bin/bash --login
cd
  • Registrarsi con il numero e inserire il codice
telegram-cli
...
phone number: +391234567
code ('call' for phone call): inserire il codice ricevuto per sms o scrivere call per farsi chiamare
  • Aggiungere il proprio contatto a cui si vogliono ricevere le notifiche
add_contact +123456789 Nome Cognome
  • Testare ATTENZIONE: sostituire lo spazio tra Nome e Cognome con "_"):
msg Nome_Cognome Messaggio da inviare
quit
  • Verificare la home directory di nagios
cd
pwd
  • Testare lo script (verificare che la home dir usata nello script sia quella giusta)
telegram-msg Nome_Cognome Messaggio da inviare

Configurazione di Nagios

  • Assicurarsi che la variabile HOME che punta alla hoe di nagios sia impostata al valore rilevato precedentemente:
sudoedit /etc/default/nagios3
export HOME="/var/log/nagios"
  • Definire il proprio nome Telegram nel campo pager del contact nagios ed aggiunger ei comandi di notifica::
sudoedit /etc/nagios3/conf.d/contacts.cfg
define contact{
       # ...
       host_notification_commands	notify-host-by-email, notify-host-by-telegram
       service_notification_commands	notify-service-by-email, notify-service-by-telegram
       #...
       pager				Nome_Cognome
}
  • Definire i comandi di notifica:
sudoedit /etc/nagios3/conf.d/commands.cfg
# ...
define command{
	command_name	notify-host-by-telegram
	command_line	/usr/local/bin/telegram-msg  $CONTACTPAGER$ "--Nagios Host Notification-- Host: $HOSTNAME$, State: $HOSTSTATE$, Time: $LONGDATETIME$"
}

define command{
	command_name	notify-service-by-telegram
	command_line	/usr/local/bin/telegram-msg  $CONTACTPAGER$ "--Nagios Service Notification-- Host: $HOSTNAME$, State: $HOSTSTATE$ Service $SERVICEDESC$ Description: $SERVICESTATE$ Time: $LONGDATETIME$"
}
  • Testare la configurazione e Riavviare nagios
sudo -u nagios /usr/sbin/nagios3 -v /etc/nagios3/nagios.cfg && sudo /etc/init.d/nagios3 restart
  • Inviare una notifica custom

Riferimenti


Troubleshooting

sudoedit /etc/nagios3/nagios.cfg 

debug_level=2048

sudo invoke-rc.d nagios3 restart
tail -f /var/log/nagios3/nagios.debug