sexta-feira, 13 de maio de 2016

Coletando uma imagem do Zabbix sem uso de API

Alguns dias atrás compartilhei um post do Mike Santangelo que achei muito interessante, ele demonstrou como usar o wget para gerar uma imagem dos mapas do ambiente dele.

Apesar do post exibir os comandos, ele não dava detalhes de como chegou naqueles endereços, por exemplo, ao acessar um mapa, o padrão de endereço é http://<IP-Servidor>/zabbix/maps.php?sysmapid=7, mas ele usava o endereço no padrão http://<IP-Servidor>/zabbix/map.php?sysmapid=7&severity_min=0. Por que map.php e não maps.php??

Ele dizia que tinha feito um script e que em 30 segundos gerou as imagens de 21 mapas, mas nada desse script, apesar de ser simples.

A imagem era de um Zabbix 3.0, mas será que isso funcionária para um Zabbix 2.4? Será que isso funcionaria para outros itens como Gráficos?

Ele disse que num próximo post pretendia fazer uma página com gráficos, triggers e mapas, sendo alimentada de forma cíclica. Bom, com essas dúvidas na cabeça eu comecei a destrinchar os comandos, tentar entender a questão das url's e fazer meus próprios testes. Vamos ao que eu descobri ;-)

Primeiro a questão das url's, se você abrir um mapa vai ver uma url no formato http://<IP-Servidor>/zabbix/maps.php?sysmapid=7 (Zabbix 2.4) ou http://<IP-Servidor>/zabbix/zabbix.php?action=map.view (Zabbix 3.0), mas se clicar com o botão da direita na imagem e escolher visualizar a imagem, vai ver o padrão de url http://<IP-Servidor>/zabbix/map.php?sysmapid=7&severity_min=0 (Em ambas as versões). E sim, o esquema funciona para ambas as versões do Zabbix.

Tendo testado isso, rapidamente percebemos que pode ser usado para qualquer imagem do zabbix (mapas e gráficos). Isso já me deu ideias.

Vamos então resolver o problema de gerar as imagens automaticamente de forma cíclica.

Primeiro vamos criar o diretório onde serão armazenadas as imagens:
# mkdir /root/imagens

Agora vamos gerar as imagens:
# vi gera_mapas.sh

#!/bin/bash

######################################################################
# Variaveis de producao - Deve-se alterar de acordo com seu ambiente #
######################################################################

MAPAS=7 # Quantidade de Mapas no seu ambiente
DIR_IMAGENS=/root/imagens #Diretorio que vai armazenar as imagens
NOME_IMAGEM=mapa #Nome das imagens a serem geradas
DIR_COOKIE=/root #Diretorio que vai armazenar o cookie
NOME_COOKIE=zabbix.cookie
ENDERECO='http://
<IP-Servidor>/zabbix' #Url do Zabbix
USUARIO=admin # Usuario do Zabbix que tenha privilegio de visualizar todos os mapas
SENHA='zabbix' # Senha do usuario acima
SEVERIDADE=0 #Severidade minima da trigger a ser exibida no mapa

######################################################################
# Logica do Script - Nao altere a menos que saiba o que esta fazendo #
######################################################################

# Gera o cookie
wget -q --save-cookies=$DIR_COOKIE\/$NOME_COOKIE -4 --keep-session-cookies 2> /dev/null -O - -S --post-data="name=$USUARIO&password=$SENHA&enter=Sign in&autologin=1&request=" $ENDERECO\/index.php?login=1 > /dev/null

# Gera as imagens
for ((i=1; i<=$MAPAS; i++))
do
         wget -q -4 --load-cookies=$DIR_COOKIE\/$NOME_COOKIE -O $DIR_IMAGENS\/$NOME_IMAGEM$i.png "$ENDERECO/map.php?sysmapid=$i&severity_min=$SEVERIDADE"
done

# Remove o cookie
rm -rf $DIR_COOKIE/$NOME_COOKIE


Alterar a permissão do script:
# chmod 700 gera_mapas.sh

Pronto agora é só agendar no crontab de quanto em quanto tempo você quer gerar a imagem dos seus mapas ;-)

Observação

Apesar do título do meu post, e como pode ser observado no post original, a API não tem função para coletar imagens.

Referencias:

Tales of a Tech

2 comentários:

Tuban Kita disse...

This is Awesome. I going to share this with other blogger friends so that they could also participate :)...

André Déo disse...

Tuban,

Please share will and enjoy ;-)

Regards,