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}
