Indisponibilidade de internet via Telegram + Zabbix 5.0.6

Enviando notificações de indisponibilidade de internet com Zabbix e Telegram.

Instalando os pacotes necessários

*Alpine GNU/LInux

apk upgrade --no-cache build-base python3 python3-dev nmap && apk add --update --no-cache tg curl py-pip speedtest-cli && pip install pyTelegramBotAPI && pip install --upgrade pip && rm -rf /usr/share/man /tmp/* /var/cache/apk/*

Script

vi /usr/lib/zabbix/alertscripts/zabbix-telegram.sh
#!/bin/bash
# Preencha os dados de acordo com o seu cenário, linhas 17,19,20,25.
#

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 "(Grafico detalhado: \[[0-9]{7}\])|(Grafico detalhado: \[[0-9]{6}\])|(Grafico detalhado: \[[0-9]{5}\])|(Grafico detalhado: \[[0-9]{4}\])|(Grafico detalhado: \[[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"
# Endereço do Zabbix
ZBX_URL="http://192.168.x.x:8282"
# Conta de usuário do Zabbix
USERNAME="login"
PASSWORD="senha"
# Zabbix Versao >= 3.4.1
# 0 para nao e 1 para sim
ZABBIXVERSION34="1"
# Token Telegram
BOT_TOKEN='SEU TOKEN'

case $GRAPHID in

	''|*[!0-9]*) ENVIA_GRAFICO=0 ;;

	*) ENVIA_GRAFICO=1 ;;

esac

ENVIA_GRAFICO=1
ENVIA_MESSAGE=1

# 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"

PERIOD=now-1h

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

echo "$MESSAGE" > $ZABBIXMSG

${CURL} -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} -k -s -c ${COOKIE} -b ${COOKIE} --data-binary @${ZABBIXMSG} -X GET "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage" > /dev/null

fi

if [ $(($ENVIA_GRAFICO)) -eq '1' ]; then

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

	if [ "${GRAPHID}" == "000001" ]; then

		GRAPHID="00002";

		${CURL} -k -s -c ${COOKIE} -b ${COOKIE} -d "graphid=${GRAPHID}&from=${PERIOD}&to=now&width=${WIDTH}" ${ZBX_URL}"/chart2.php" -o "${PNG_PATH}";

	elif [ "${GRAPHID}" == "000002" ]; then

		GRAPHID="00003";

		${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "graphid=${GRAPHID}&from=${PERIOD}&to=now&width=${WIDTH}" ${ZBX_URL}"/chart2.php" -o "${PNG_PATH}";

	elif [ "${GRAPHID}" == "000003" ]; then

		GRAPHID="00004";

		${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "graphid=${GRAPHID}&from=${PERIOD}&to=now&width=${WIDTH}" ${ZBX_URL}"/chart2.php" -o "${PNG_PATH}";

	else
		
		# Download do gráfico e envio

		if [ "${ZABBIXVERSION34}" == "1" ]; then

			${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "from=${PERIOD}&to=now&itemids%5B0%5D=${GRAPHID}&width=${WIDTH}&period=86400&type=0&profileIdx=web.item.graph" ${ZBX_URL}"/chart.php" -o "${PNG_PATH}";

		else

			${CURL} -k -s -c ${COOKIE}  -b ${COOKIE} -d "from=${PERIOD}&to=now&itemids%5B0%5D=${GRAPHID}&width=${WIDTH}" ${ZBX_URL}"/chart.php" -o "${PNG_PATH}";

		fi

	fi

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

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

Permissão no script

cd /usr/lib/zabbix/alertscripts/ && chmod +x * && chown zabbix:zabbix *

Testes

*Exemplo de um gráfico cujo id é 38002

http://192.168.0.243:8282/history.php?itemids%5B0%5D=38002&action=showgraph

*Entre na pasta dos scripts

cd /usr/lib/zabbix/alertscripts
./zabbix-telegram.sh IDgrupoAQUI "Internet indisponível {EVENT.AGE}" "Grafico detalhado: [38002]"

Configuração do Zabbix

Importe o host hosts_internet.xml, no seu Zabbix.

Administração
Tipos de mídias

Nome: Telegram Gráficos
Tipo: Script
Nome script: zabbix-telegram.sh

Parâmetros do script: {ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
Administração
Usuários
Admin

Mídia:
Adicionar:

Tipo: Telegram Gráficos
Enviar para: ID do seu grupo
Ativo quando: 1-7,00:00-24:00
Configuração
Ações

Origem do evento: Triggers

Ação:

Nome: Reportar Problema no Telegram (Queda de link de internet)

Nova condição 

Incidente suprimido | não
Trigger | igual SELECIONE:

Grupo: Internet | Host: Internet
[x] Unavailable by ICMP ping 
Operações:

Duração padrão do passo da operação: 1h
Detalhes de operação

Tipo da operação: Enviar mensagem
Enviar para usuários: Admin (Zabbix Administrator)
Enviar apenas para: Telegram Gráficos
Mensagem personalizada[x]

Assunto: ATENÇÃO
Mensagem: Grafico detalhado: [{ITEM.ID1}]
IP/DNS: {HOST.CONN}
Internet restabelecida às: {EVENT.RECOVERY.TIME}
Indisponibilidade: {EVENT.AGE}

Deixe um comentário

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