Enviando alerta do Zabbix via Gtalk

Este post tem o objetivo de demonstrar como criar um script para que o Zabbix possa enviar os alertas via Gtalk.

Instalação dos pre-requisitos

apt-get install python python-xmpp python-dnspython

Criação do script
Verificar o local de armazenamento dos script no arquivo de configuração do zabbix, o parâmetro a ser verificado é AlertScriptsPath. No meu caso está em /usr/lib/zabbix/alertscripts

Crie o arquivo, nomeado gtalk.py, com o conteúdo abaixo no local indicado. No meu caso em /usr/lib/zabbix/alertscripts/gtalk.py

#!/usr/bin/python -W ignore::DeprecationWarning
import sys, os, xmpp, getopt, syslog

def main(argv):
	login="your_email@gmail.com"
	pwd="xxxxxx"
	_debug = 0

	if len(sys.argv) < 3:
		usage()
		sys.exit(2)

	#log dos parametros recebidos
	#log(' '.join(sys.argv[1:]))

	rcptto=None
	subject=None
	msg=None

	rcptto=sys.argv[1]
	subject=sys.argv[2]
	msg=sys.argv[3]

	if subject != None and msg == None:
		msg = subject;
		subject = None;

	if rcptto == None or msg == None:
		usage()
		sys.exit(2)

	log(msg)

	print "Starting process..."

	def presenceHandler(conn, presence):
		if presence:
			if presence.getType() == "subscribe":
				cl.PresenceManager.ApproveSubscriptionRequest(pres.From)

	login=xmpp.protocol.JID(login)

	if _debug == 1:
		cl=xmpp.Client(login.getDomain())
	else:
		cl=xmpp.Client(login.getDomain(),debug=[])

	print "Connecting..."
	if cl.connect( server=('google.com',5222)  ) == "":
			print "not connected"
			sys.exit(0)

	print "Authentication..."
	if cl.auth(login.getNode(),pwd) == None:
			print "authentication failed"
			sys.exit(0)

	# habilita que este cliente aceite automaticamente requisicao de contato
	#cl.RegisterHandler('presence',presenceHandler)
	#cl.sendInitPresence()

	print "Add user "+rcptto
	pres = xmpp.Presence(to=rcptto, typ='subscribe')
	cl.send(pres)

	print "Sending message to "+rcptto
	cl.send(xmpp.protocol.Message(rcptto,msg,"chat"))
	cl.disconnect()

	print "Message Sent!"

def usage():
	print "Usage:  {-d} [to] [subject] [body]"
	print ""
	print "Options:"
	print "  [to]	destination of messages"
	print "  [subject]	subect of message"
	print "  [body]	destination of messages"

def log(text):
	syslog.syslog(syslog.LOG_ERR, text)

if __name__ == "__main__":
	main(sys.argv[1:])

Altere as linhas abaixo (no script) para o e-mail e senha que serão a origem do Gtalk

login="your_email@gmail.com"
pwd="xxxxxx"

Defina as permições para este arquivo

chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts/
chmod +x /usr/lib/zabbix/alertscripts/gtalk.py

Realize um teste de execução do script com o comando abaixo, apenas alterando seu e-mail.

sudo -u zabbix /usr/lib/zabbix/alertscripts/gtalk.py seu_email@gmail.com "Teste 001" "Mensagem de teste Gtalk"

Configurando o Zabbix para enviar os alertas através deste script

Vá em Administration > Media Types

001

Clique em Create Media e preencha os campos conforme demonstrado abaixo e clique em Save

002

Vá em Administration > Users, selecione o usuário que deseja receber o alerta através do Gtalk, clique em Media e depois em Add

003

Preencha as informações, alterando o Type para Gtalk e o Send to para o e-mail do gmail que receberá via Gtalk e clique em Add.

004

Pronto, seu usuário será alertado via gtalk.

Helvio Junior

Helvio Junior

Gerente de Infraestrutura de TI e Telecomunicações em Fael, uma empresa do grupo Apollo Global
Especialista em redes e segurança de sistemas pela PUC-PR, consultor de redes e segurança da informação. CEO e CTO da SafeTrend, com um produto de single sign-on e gestão de identidades e acessos. Especialista em Segurança da Informação, Controle de Acesso, ambientes e ferramentas de segurança, telefonia VoIP com Asterisk, administração de redes em ambientes híbridos e realização de penetration test (pentest).
Helvio Junior

Últimos posts por Helvio Junior (exibir todos)

3 respostas
  1. Bruno Lino
    Bruno Lino says:

    Amigo fiz todo o procedimento, mas quando realizo o teste dá falha de autenticação, porém está certo o user e password. Pode me ajudar ?

    Responder

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios são marcados com *