meta data de esta página
Notificaciones de Zabbix por Telegram
Con un script bash
https://github.com/diegosmaia/zabbix-telegram
Se descarga el script en el directorio AlertScriptsPath directory.
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 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
Configuración del zabbix para que envie las alarmas
Creamos un nuevo Media Types zabbix→Administration→Media types→Create Media type.
- Como nombre ponemos telegram, tipo script, y en Script name ponemos el nombre de nuestro script zabbix-telegram.sh y marcamos la casilla Enabled.
En la casilla de Script Parameters pinchamos en Add y añadimos los siguientes parámetros
- 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
En la casilla de Event Source seleccionamos Triggers y pulsamos sobre el botón Create action o bien modificamos una de las acciones existentes.
En nuestro caso creamos una nueva acción con los siguientes datos
- Name → Enviar alarmas por telegram
- Default subject → {HOSTNAME}:{TRIGGER.NAME}-Status-{TRIGGER.STATUS}
- 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}]
- Click en el menú operations y configuramos
Script Modificado para usar proxy
#!/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
Mediante curl
Utilizando el siguiente script podemos enviar mensajes directamente con curl
#!/bin/bash TOKEN=tutoken CHAT_ID=id del chat MESSAGE="Hola Mundo" URL="https://api.telegram.org/bot$TOKEN/sendMessage" curl -s -X POST $URL -d chat_id=$CHAT_ID -d text="$MESSAGE"
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