meta data de esta página
  •  

¡Esta es una revisión vieja del documento!


Notificaciones de Zabbix por Telegram

Con un script bash

https://github.com/diegosmaia/zabbix-telegram

Se descarga el script en el directorio AlertScriptsPath directory.

El path a dicho directorio está definido en el fichero zabbix_server.conf. En mi caso AlertScriptsPath=/usr/lib/zabbix/alertscripts

se le da permisos de ejecución

chmod +x zabbix-telegram.sh

En el script hay que modificarlo para añadir los parámetros correspondientes a nuestra configuración. En mi caso particular he modificado el script que te descargas desde la página de https://github.com/diegosmaia/zabbix-telegram y he modificado alguna de las llamadas a curl añadiendo la opción –noproxy '*' para evitar errores de ejecución ya que mi servidor utiliza un proxy para salir a internet.

Para saber el id del grupo creas un grupo nuevo y añades al bot a dicho grupo y desde el navegador accedes a la página https://api.telegram.org/bot<token>/getUpdates para obtener el id usuario y el id grupo. El token te llega en un mensaje de telegram

Para hacer una prueba ejecutamos el siguiente comando desde la consola situandonos en el directorio donde está localizado el script

./zabbix-telegram.sh -123456789 "prueba 12:43"  "Item Graphic: [37502]" 
. Al ejecutarlo debería de llegarnos varios mensajes y un gráfico

-123456789 hay que cambiarlo por nuestro id de grupo que debemos obtener anteriormente

Configuramos el zabbix para que envie las alarmas

  • Añadimos en zabbix→Administration→Media types→Create Media type.
  • Ahora vamos a zabbix→Administration→User. Elegimos el usuario con el que enviamos las alarmas y pinchamos sobre el menú Media y después en add para añadir los parámetros de configuración

  • Por último vamos al menú zabbix→Configuration→Actions y pulsamos sobre el botón Create action o modificamos una de las acciones existentes. En nuestro caso creamos una nueva acción con los siguientes datos
    1. Name → Enviar alarmas por telegram
    2. Default subject → {HOSTNAME}:{TRIGGER.NAME}-Status-{TRIGGER.STATUS}
    3. Default message →

Trigger:{TRIGGER.NAME}
Trigger status:{TRIGGER.STATUS}
Trigger severity:{TRIGGER.SEVERITY}
Trigger URL:{TRIGGER.URL}

Item values:
1.{ITEM.NAME1}({HOST.NAME1}:{ITEM.KEY1}):{ITEM.VALUE1}

Item Graphic:[{ITEM.ID1}]

  1. Click en el menú operations y configuramos

para saber si las alarmas se están enviado correctamente ir a: Zabbix→Reports→Action log

#!/bin/bash

##########################################################################
# Zabbix-Telegram envio de alerta por Telegram com graficos dos eventos
# Filename: zabbix-telegram.sh
# Revision: 2.1
# Date: 24/04/2016
# Author: Diego Maia - diegosmaia@yahoo.com.br Telegram - @diegosmaia
# Aproveitei algumas coisas:
# Script getItemGraph.sh Author: Qicheng
# https://github.com/GabrielRF/Zabbix-Telegram-Notification @GabrielRF
# Obs.: Se añade la opción de usar el script en caso de estar detras de un proxy (wiki.intrusos.info)
##########################################################################

MAIN_DIRECTORY="/usr/lib/zabbix/alertscripts/"

USER=$1
SUBJECT=$2
SUBJECT="${SUBJECT//,/ }"
MESSAGE="chat_id=${USER}&text=$3"
GRAPHID=$3
GRAPHID=$(echo $GRAPHID | grep -o -E "(Item Graphic: \[[0-9]{7}\])|(Item Graphic: \[[0-9]{6}\])|(Item Graphic: \[[0-9]{5}\])|(Item Graphic: \[[0-9]{4}\])|(Item Graphic: \[[0-9]{3}\])")
GRAPHID=$(echo $GRAPHID | grep -o -E "([0-9]{7})|([0-9]{6})|([0-9]{5})|([0-9]{4})|([0-9]{3})")

ZABBIXMSG="/tmp/zabbix-message-$(date "+%Y.%m.%d-%H.%M.%S").tmp"

#############################################
# URL donde esta el Zabbix (modificar)
#############################################
ZBX_URL="http://192.168.0.102/zabbix"

##############################################
# Usuario y clave para logearse en el  Zabbix (modificar)
##############################################

USERNAME="admin"
PASSWORD="zabbix"

############################################
# Bot-Token de ejemplo (modificar)
############################################

BOT_TOKEN='161080402:AAGah3HIxM9jUr0NX1WmEKX3cJCv9PyWD58'

#############################################
# Si enviar o no GRAFICOS / ENVIA_GRAFICO = 0
# Si enviar o no MESAJES  / ENVIA_MESSAGE = 0
#############################################

ENVIA_GRAFICO=1
ENVIA_MESSAGE=1

# Se não receber o valor de GRAPHID ele seta o valor de ENVIA_GRAFICO para 0

case $GRAPHID in
    ''|*[!0-9]*) ENVIA_GRAFICO=0 ;;
    *) ENVIA_GRAFICO=1 ;;
esac


##############################################
# Graficos
##############################################

WIDTH=800
CURL="/usr/bin/curl"
COOKIE="/tmp/telegram_cookie-$(date "+%Y.%m.%d-%H.%M.%S")"
PNG_PATH="/tmp/telegram_graph-$(date "+%Y.%m.%d-%H.%M.%S").png"

############################################
# Periodo do grafico em minutos Exp: 10800min/3600min=3h 
############################################

PERIOD=10800


###########################################
# Verifica se foi passado os 3 parametros
# para o script
###########################################

if [ "$#" -lt 3 ]
then
	exit 1
fi

############################################
# Envio Mensaje de Alerta usando proxy
############################################

echo "$MESSAGE" > $ZABBIXMSG
${CURL} -x http://ipproxy:puerto -k -s -c ${COOKIE} -b ${COOKIE} -s -X GET "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage?chat_id=${USER}&text=\"${SUBJECT}\""  > /dev/null

if [ "$ENVIA_MESSAGE" -eq 1 ]
then
	${CURL} -x http://ipproxy:puerto -k -s -c ${COOKIE} -b ${COOKIE} --data-binary @${ZABBIXMSG} -X GET "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage"  > /dev/null
fi
############################################
# Envio dos graficos
############################################

# Se ENVIA_GRAFICO=1 ele envia o gráfico.
if [ $(($ENVIA_GRAFICO)) -eq '1' ]; then
	############################################
	# Zabbix logando com o usuário no site
	############################################

   	# Zabbix - Ingles - Verifique no seu Zabbix se na tela de login se o botao de login é "Sign in".
	# Obs.: Caso queira mudar, abra a configuração do usuário Guest e mude a linguagem para Portugues, se fizer isso comente (#) a linha abaixo e descomente a linha Zabbix-Portugues.

    	${CURL} --noproxy '*' -k -s -c ${COOKIE} -b ${COOKIE} -d "name=${USERNAME}&password=${PASSWORD}&autologin=1&enter=Sign%20in" ${ZBX_URL}"/index.php" > /dev/null

    	# Zabbix - Portugues - Verifique no seu Zabbix se na tela de login se o botao de login é  "Conectar-se".
    	# ${CURL} -k -s -c ${COOKIE} -b ${COOKIE} -d "name=${USERNAME}&password=${PASSWORD}&autologin=1&enter=Conectar-se" ${ZBX_URL}"/index.php" > /dev/null

	# Download do gráfico e envio
	${CURL} --noproxy '*'  -k -s -c ${COOKIE}  -b ${COOKIE} -d "itemids=${GRAPHID}&period=${PERIOD}&width=${WIDTH}" ${ZBX_URL}"/chart.php" -o "${PNG_PATH}"

	${CURL} -x http://ipproxy:puerto -k -s -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendPhoto" -F chat_id="${USER}" -F photo="@${PNG_PATH}" > /dev/null

fi

############################################
# DEBUG
############################################

# Verificar valores recebidos do Zabbix ou do prompt
# cat /tmp/telegram-debug.txt
# echo "User-Telegram=$USER | Subject=$SUBJECT | Menssage=$MESSAGE | GraphID=${GRAPHID} | Period=${PERIOD} | Width=${WIDTH}" >/tmp/telegram-debug.txt

# Teste com curl tentando baixar o gráfico
# Verifique o arquivo /tmp/telegram-graph.png no seu computador para ver se o grafico esta sendo gerado corretamente
#${CURL}  --noproxy '*' -k -c  ${COOKIE}  -b ${COOKIE} -d "graphid=51179&itemids=51179&period=10800&width=800" 172.19.3.202/zabbix/chart.php > /tmp/telegram-graph2.png

#Verificando o envio da msg

# Envio da msg de texto
# Gera uma saída no script com algo parecido com isso  {"ok":true,"result":{"message_id":xxx,"from":{"id":xxxx,"first_name":"xxx","username":"xxxx"},"chat":{"id":xxxxx,"first_name":"xxx","last_name":"xxx","username":"xxxxx","type":"private"},"date":xxxx,"text":"teste"}}
# Se gerar uma saida diferente verifique o seu BOT_TOKEN ou então o UserID ou Group-ID para qual a msg esta sendo enviada
# ${CURL} -k -c ${COOKIE} -b ${COOKIE} -X GET "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage?chat_id=${USER}&text=${SUBJECT}"

# Envio do Grafico
#${CURL} -k -X POST "https://api.telegram.org/bot${BOT_TOKEN}/sendPhoto" -F chat_id="${USER}" -F photo="@${PNG_PATH}"


############################################
# Apagando os arquivos utilizados no script
############################################

rm -f ${COOKIE}
rm -f ${PNG_PATH}
rm -f ${ZABBIXMSG}
exit 0

Con un script en python

https://github.com/ableev/Zabbix-in-Telegram

Instalamos en el servidor python

yum install python
yum install python-pip

Instalamos el módulo request necesario para ejecutar los scripts

pip install requests

  • Ponemos el script zbxtg.py en el directorio AlertScriptsPath directory. El path a dicho directorio está definido en el fichero zabbix_server.conf. En mi caso AlertScriptsPath=/usr/lib/zabbix/alertscripts
  • Copiamos zbxtg_group.py en la misma localización si queremos enviar mensajes a grupos
  • Creamos el fichero zbxtg_settings.py con la configuración nuestra en el mismo directorio donde está el script
  • Creamos un bot en telegram y apuntamos la API key
  • creamos un usuario de sólo lectura en Zabbix (paa obtener los gráficos e imagenes del zabbix)
  • Si usamos proxy debe de estar configurado en el fichero de configuración zbxtg_settings.py
  • Añadimos en zabbix→Administration_>Media types→Create Media type. Dos nuevos tipos de media types para Telegram con las siguiente configuración

y otro para los grupos