Linux, Monitoring, Web

Exporter les graphiques Zabbix avec un script Bash

Bonsoir a tous,

Aujourd’hui je vous release un petit script que j’utilise depuis longtemps sur ma page de statut. C’est surtout suite a la demande de Julien Berton en réalité.

Enfin bref. Pourquoi avoir fait un script bash. Tout simplement car Zabbix ne permet pas d’exporter les graphiques a l’extérieur de leur interface web. Ce que je trouve assez dommage.

Afin de trouver une solution simple, je me suis dit un simple wget sur les url des images suffiraient. Et bien non, c’est oublier que meme les images sont soumises à authentification (Enfin une application qui a des normes de sécurité correcte).

Du coup, il a fallu tricher un peu et faire que le script se connecte a notre interface Zabbix. Pour des raisons de sécurité je vous conseille de créer un utilisateur qui aura un droit de lecture seul sur l’ensemble des éléments que vous souhaitez pouvoir exporter. Attention ce script ne fonctionne que avec des nom d’utilisateurs et mot de passes contenant uniquement des caractères alphanumériques ([A-Za-z0-9]) et avec une version 1.9 ou supérieur.

Donc voici le script (je vous donne quelques explications après):

#!/bin/bash

# Copyright 2012 Julien Recurt 
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see .
#

# Configuration
# Zabbix login
zbx_login="fill-me"
zbx_pass="s3cr3t"
# Export graph width in px
width="900"
# Time Range in sec (3600 minimum)
period="86400"
# Zabbix Base url
baseurl="https://zabbix.servme.fr"
# Output
outputdir="/home/www/servme.fr/www/graph"
# Wget options
opts="--no-check-certificate --quiet"

function do_export()
{
  # Please write here the graphs and maps you want to export:
  # Sample :
  # export_map MAP_ID Output_File.png
  # export_graph MAP_ID Output_File.png
  # export_item ITEM_ID Output_File.png

  return 0
}
##############################################
#              DO NOT EDIT BELOW             #
##############################################
cookiefile="$(mktemp /tmp/zbx-dumpimage_cookie.XXXXXXXX)"
cd $outputdir
if [ -f /tmp/zbx-dumpimage.lock ]
then
  echo "Locked by /tmp/zbx-dumpimage.lock"
  echo "Please remove log file if the script has crashed"
  exit 0
fi
touch /tmp/zbx-dumpimage.lock

function export_map()
{
wget -O $2 "$baseurl/map.php?noedit=1&sysmapid=$1" --header "Cookie: zbx_sessionid=$sessionid" $opts
}

function export_graph()
{
wget -O $2 "$baseurl/chart2.php?graphid=$1&width=$width&period=$period" --header "Cookie: zbx_sessionid=$sessionid" $opts
}

function export_item()
{
wget -O $2 "$baseurl/chart.php?itemid=$1&width=$width&period=$period" --header "Cookie: zbx_sessionid=$sessionid" $opts
}

# do the login
request="request=&form_refresh=1&name=$zbx_login&password=$zbx_pass&autologin=1&enter=Sign in"
wget --cookies=on --keep-session-cookies --save-cookies $cookiefile \
        --post-data "$request" \
        "$baseurl/index.php?login=1" -O /dev/null \
        $opts
# Get the session id
sessionid=$(cat $cookiefile | grep zbx_sessionid | awk {'print $7'})
rm $cookiefile

# Do the export
do_export;

# logout the user
wget -O /dev/null "$baseurl/index.php?reconnect=1" --header "Cookie: zbx_sessionid=$sessionid" $opts

rm /tmp/zbx-dumpimage.lock

Alors de script est très simple et se découpe en 3 grande étapes.

  • 1. Connexion de l’utilisateur
  • 2. Récupération des graphiques
  • 3. Déconnexion de l’utilisateur

Pour le faire fonctionner vous n’aurez qu’a modifier les variable situées au début du script ainsi que la fonction do_export

Pour le variables voici une brève description:

Variable Description
zbx_login Login de l’utilisateur
zbx_pass Mot de passe de l’utilisateur
width Largeur du graphique (Ne comprend pas l’espace pour l’échelle)
period Durée à afficher avec le graphique (en secondes)
baseurl Url de base de l’interface Zabbix
outputdir Chemin du dossier d’exécution du script (pour la création des images)
opts Options supplémentaires pour Wget

Pour la fonction do_export() il vous suffira d’ajouter les appel aux fonctions d’export des graphiques. Vous pouvez aussi modifier les variable period et width afin de les ajuster en fonction des différents graphiques que vous voulez exporter

Voici un petit exemple:

function do_export()
{
  export_graph 425 ks-eth0.png
  export_graph 392 paris-eth0.png
  export_map 2 map.png

  period="604800"
  export_item 24101 mail-delivred.png

  period="172800"
  export_graph 429 ks-ts3.png
  return 0
}

Et voila! C’est à vous de jouer.

1 Comment

  1. patrick

    Bonjour,

    MERCI beaucoup pour le tutoriel concis et claire meme si pour les novices en Bash ca peut paraitre complique au premier abord.

    Pour ma part la partie qui me manquait etait celle du cookie car a chaque je telechargeai des images contenant des erreurs, j’ai egalement mis cette partie de code relative au cookie dans une fonction qui retourne le session ID, ce qui permet de faire un check additionnel au cas ou le login n’a pas fonctionne.

    Merci encore!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.