{{tag>zabbix telegram notificaciones alarma aviso}} ===== 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/getUpdates para obtener el id usuario y el id grupo. El token te llega en un mensaje de telegram Ojo el bot tiene su propio id, que es distinto del id para el grupo 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 ==== 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 {{ :seguridad:monitorizacion:zabbix3:parametrostelegram.png?nolink&600 |}} * 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 {{ :seguridad:monitorizacion:zabbix3:telegramuser.png?nolink&600 |}} * 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}] {{ :seguridad:monitorizacion:zabbix3:zabbix-action.png?direct&600 |}} - Click en el menú **operations** y configuramos {{ :seguridad:monitorizacion:zabbix3:zabbix-telegram2.png?direct&600 |}} para saber si las alarmas se están enviado correctamente ir a: Zabbix->Reports->Action log ==== 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 ===== Referencias ===== * http://zabbixecuador.blogspot.com.es/2016/05/integrar-telegram-en-zabbix.html * https://www.zabbix.com/forum/showthread.php?t=45600 * [[https://github.com/ableev/Zabbix-in-Telegram|Zabbix Notifications with graphs in Telegram]]