Blog Widget by LinkWithin

2 avr. 2013

[TUTO] Superviser ses machines avec Zabbix


Ça faisait un moment que j'avais pas posté un article bien barbu, voilà qui devrait rectifier le tir :)

1) Présentation

Dans un premier temps, brève présentation pour les non-initiés : Zabbix c'est quoi?

Et bien en 2 mots, c'est ze solution de supervision, open-source. 

On peut l'utiliser pour superviser quasiment tout et n'importe quoi, des choses très simples telles que l'utilisation du CPU, de la RAM, l'espace disponible sur les disques dur... ou des choses un peu plus complexes si on sait scripter un poil (et non à poil, remarque on peut faire les deux).

Sans trop m’étaler, Zabbix repose sur 3 composants : 
  • une partie "serveur", cœur de la solution, qui va être en charge de collecter les données, les agréger, les stocker, etc...
  • une partie "agent", qui sera à déployer sur les machines que l'on souhaite superviser, et qui va être interrogée par le "serveur" (mode passif) ou qui peut lui "pousser" ses données (mode actif)
  • une partie "front-end", qui va permettre à travers une interface web de mettre en forme les données (graphiques), consulter les dernières mesures, etc... mais aussi d'administrer la solution.
En pré-requis pour l'interface web, vous aurez besoin d'un serveur web (Apache dans mon cas) et de PHP (ici PHP5).

2) Installation

Dans mon cas, l'installation sera faite sous Ubuntu  12.10, et par chance, Zabbix est présent dans ses dépôts... mais ne croyez pas que tout se fera tout seul pour autant :p

Comme précisé plus haut, il va falloir installer les 3 paquets correspondant aux composants, sachant qu'il existe plusieurs possibilités pour la partie serveur, en fonction du type de base de données que vous souhaitez utiliser  : MySQL, SQLite ou PostgreSQL. 

Ayant déjà un MySQL d'installé sur ma machine, ça serait dommage de m'en priver :

sudo apt-get install zabbix-server-mysql zabbix-agent zabbix-frontend-php

L'installation se déroule toute seule pour les parties agent et frontend, mais pour la partie serveur, il vous faudra répondre à quelques questions... si vous souhaitez que dbconfig-common s'occupe de créer la base et toutes les tables qui vont bien (conseillé) :

Il faut donc lui renseigner le password de l’utilisateur de bases de données “root” afin qu'il puisse procéder à la création de la base :
L'étape suivante va demander de définir un mot de passe pour l'utilisateur zabbix qui sera utilisé par défaut pour administrer la base :


Problème : Dans mon cas l'utilisateur Zabbix a bien été créé,  la base aussi, mais par contre elle était vide /o\
Solution : en prenant bien soin de remplacer SECRETPASSWORD par le mot de passe que vous avez défini précédemment : 
 
zcat /usr/share/zabbix-server-mysql/{schema,images,data}.sql.gz \ 
| mysql -uzabbix -pSECRETPASSWORD zabbix
 
source : /usr/share/doc/zabbix-server-mysql/README.Debian

3) Configuration

3.1) Apache et PHP

Il va falloir maintenant configurer Apache pour que le front-end soit accessible, mais ici aussi on invente rien, RTFM :)

sudo ln -s /usr/share/doc/zabbix-frontend-php/examples/apache.conf 
             /etc/apache2/conf.d/zabbix

et dans un second temps, mettre à jour la configuration de PHP5 afin qu'il soit un peu plus permissif, l'interface de Zabbix étant un poil gourmande, on édite donc le fichier :
 
sudo vi /etc/php5/apache2/php.ini

et on modifie les valeurs suivantes :


post_max_size = 16M                                                                                                                                       
max_execution_time = 300                                                                                                                                  
max_input_time = 300                                                                                                                                      
date.timezone = "Europe/Paris"


et pour que nos modifications soient prisent en compte par Apache :
 
sudo /etc/init.d/apache2 reload

Désormais vous devriez êtres en mesure d'accéder à l'interface web.

3.2) InterfaceWeb

pour vous y connecter http://adressedevotreserveur/zabbix (en local : http://localhost/zabbix), vous allez normalement tomber sur cet écran : 


Bon l'écran 2 je passe, il fait juste un check des pré-requis, normalement tout est bon ...

Écran 3 on configure les informations d'accès à la base de données : 


...ainsi que le serveur sur lequel elle se trouve...


 Il nous fait un petit récap' de ce qu'il va écrire dans son fichier de conf :

 Puis il nous affiche un beau message d'erreur sur la création du fameux fichier :


Pas d'inquiétudes c'est normal, juste un petit soucis de droits sur le répertoire (sécurité oblige...), donc cliquez sur "download" et déposez vous même le fichier de conf dans /usr/local/zabbix/frontend/conf :

 

voilà qui est mieux.

Vous pouvez maintenant vous identifier via la mire de connexion, en saisissant les identifiants par défaut, à savoir "Admin" pour le login et sans password :


Une fois loggé, vous arrivez sur la page d'accueil, avec un dashboard récapitulatif de l'état de la machine :

4) A vous de jouer


Il ne vous reste plus qu'à mettre en place vos sondes. Dans un premier temps, vous pouvez utiliser les "templates génériques" proposés par types d'OS (Linux, Windows, AIX, ...), ils sont assez complets et permettent de monitorer l'essentiel.

Par la suite vous pouvez créer vos propres sondes, en utilisant la fonction userparameter .

Par exemple j'ai souhaité mesurer la température du processeur ainsi que celle de tous mes disques

J'ai donc rajouté mes sondes à la fin du fichier de configuration de l'agent /etc/zabbix/zabbix_agentd.conf


UserParameter=temp.hdd1,hddtemp /dev/sda|cut -d ":" -f 3|cut -c 1-3
UserParameter=temp.hdd2,hddtemp /dev/sdb|cut -d ":" -f 3|cut -c 1-3
UserParameter=temp.hdd3,hddtemp /dev/sdc|cut -d ":" -f 3|cut -c 1-3
UserParameter=temp.hdd4,hddtemp /dev/sdd|cut -d ":" -f 3|cut -c 1-3
UserParameter=temp.hdd5,hddtemp /dev/sde|cut -d ":" -f 3|cut -c 1-3
UserParameter=temp.cpu0,sensors|grep Core\ 0|cut -d "(" -f 1|cut -d "+" -f 2|cut -c 1-4
UserParameter=temp.cpu1,sensors|grep Core\ 1|cut -d "(" -f 1|cut -d "+" -f 2|cut -c 1-4

/!\ Attention /!\ : depuis la v2.0.2, si vous voulez que ces sondes marchent, il faut rajouter dans ce même fichier un paramètre qui va autoriser l'utilisation de caractères étendus, typiquement ici le pipe
donc rajoutez dans ce même fichier :
 
UnsafeUserParameters=1
NB : j'y ai été en mode "no brain" histoire d'aller vite, mais on aurait pu s'en sortir de manière beaucoup plus classe en utilisant un caractère "joker", qui aurait donné un truc du style :

UserParameter=temp.[*],hddtemp /dev/"$1"|cut -d ":" -f 3|cut -c 1-3

et lors de la déclaration des items dans l'interface Zabbix : temp.[sda] pour l'item 1, temp.[sdb] pour l'item 2, etc...

Voici le résultat une fois le tout agrégé dans un beau graph :


5) Pour aller plus loin


Maintenant que vous avez une supervision au top du top, l'étape suivant est d'être prévenu en cas d'évènement inopiné.

Par exemple, il existe des applications Android pour ça : personnellement j'utilise AndZabbix



Enfin sachez qu 'il est également possible d'interfacer Zabbix avec un serveur Jabber...

10 commentaires :

  1. Très bon tuto, merci !

    RépondreSupprimer
    Réponses
    1. Merci pour ton commentaire :)

      Supprimer
    2. De rien, je débute en Zabbix et ce tuto m'a particulierement aidé :) . Penses tu faire d'autres tuto sur Zabbix à l'avenir ?

      Supprimer
    3. C'est pas prévu pour l'instant, mais des fois qu'il me prenne l'envie de pousser un peu plus mon utilisation de l'outil je ne manquerai pas de le partager via le blog!

      Supprimer
  2. Interfacer la supervision avec Jabber ? Ca me rappelle quelque chose ;)

    RépondreSupprimer
  3. Bonjour et merci pour ce tuto ,
    j'aurais aimé avoir un peu plus de renseignement sur la façon d'on vous aez remonté les temperature de vos hotes.
    surtout les items dans zabbix

    d'avance merci

    D.vallerant

    RépondreSupprimer
    Réponses
    1. Salut, pour configurer les items c'est très facile, il suffit d'appeler le nom de la sonde que tu as créé :
      si on reprends mon exemple pour la température CPU, qui s'appuie sur le package lm-sensors, la sonde est UserParameter=temp.cpu0,sensors|grep Core\ 0|cut -d "(" -f 1|cut -d "+" -f 2|c
      dans l'item, il suffit de le déclarer en tant que type "zabbix agent" remplir le champ "key" avec la valeur : temp.cpu0
      Pour avoir un affichage de données valide, il faut également sélectionner le type d'information "Numeric float"
      Le reste des paramètres étant sans réelle importance

      Supprimer
  4. Bonjour
    Pourriez-vous m'aider svp, l'adresse http://localhost/zabbix retourne 404 Not found
    D'avance merci

    Cordialement,

    RépondreSupprimer
  5. je suis débutant et j'arrive pas connecter a cette application avec l'address "http://127.0.0.1/zabbix/api_jsonrpc.php " avec une Error "RPC Call failed: ru.sonic.zabbix.base.ZabbixAPIException: API Communication error: failed to connect to /127.0.0.1 (port 80) after 5000ms: isConnected failed: ECONNREFUSED (Connection refused)"

    RépondreSupprimer
  6. bonjour je suis débutant
    j'ai installé mon server zabbix sur vm ware,mais je ne parvient pas a suivre ma machine physique. j'ai un message d'erreur qui est le suivant: get value from agent failed to (address ip) interrupted system call. comment je fait resourdre le probleme?

    comme sur internet la machine n'a pas d'ip fixe, qu'elle address dois je utiliser

    RépondreSupprimer