Installer et exploiter Zabbix™ 2.2.4 (Juin 2014)

Laurent Archambault

Historique des versions
Version 1.030 juin 2014
Publication.

Table des matières

Contexte
1. Les sources de la version 2.2.3
Les sources
zabbix_server.conf
L'agent Zabbix
Les icônes spéciaux Zabbix™.
Les images d'origines.
Début d’intégration d'un hôte
Plate-forme Gnu/Linux
Plate-forme Windows
Un élément réseau
2. Intégration d'un hôte via l'interface.
Les templates/modèles
Intégration d'un hôte
Peaufiner la supervision
Modifications de valeurs
Modification/création d'un déclencheur
Création d'un graphique
Création d'un écran
Création d'une carte(map)
3. Autres possibilités
Service WEB scénarios
Service Maintenance
La notification par méls
4. Construction d'un élément
Construire un Élément pour un agent/hôte
Construire un Élément sur le serveur.
5. Déclencheurs intéressants
6. La partie Configuration (frontend)
GUI
Nettoyage automatique
Images
Correspondances d’icônes
Expressions rationnelles
Macros
Tables de correspondance
Heures ouvrées
Sévérité des déclencheurs
Options d'affichage des déclencheurs
Autre
7. Mise à jour.
8. Surveillance du serveur
9. Supervision d'un Netasq (U70A)
Paramétrage du Netasq™.
Paramétrage de Zabbix
Intégration d'un Netasq en SNMP
Ajouts manuels d'OID SNMP
10. Conclusion.
A. Les liens utiles.
Glossary

Contexte

Ce document va tenter de vous expliquer comment installer, configurer et exploiter Zabbix™ 2.2.3, qui est sortie en avril 2014. Nous verrons également deux mises à jour avec une version en 2.2.4 RC2 puis avec la 2.2.4 (stable).

Ce choix pour Zabbix™ n'est pas un hasard. Après plusieurs essais avec Nagios (voir Install-Nagios4.html), celui ci semble ne pas suivre les évolutions nécessaires pour rester en tête. Je me suis dit qu'il était temps de regarder ailleurs et de changer. Je ne crache surtout pas sur Nagios, mais la concurrence est dure dans le domaine de la supervision open-source. Ensuite c'est aussi une expérience professionnelle qui fait que j'ai vu un produit commercial qui coûte relativement cher mais qui à mes yeux n'apporte pas grand chose, et surtout à ce prix. Bon par contre il possède une jolie interface facile d'accès aux néophytes, et ensuite rien de faisable rapidement en SNMP..., pas de plugins sans carnet de chèques...

Il est temps de faire voir au DSI qu'il est possible d'avoir une vraie supervision sans penser argent. C'est pour moi un écran(s) agréable et simple, avec des matériels/services supervisés et qui derrière tout çà, cache de la vraie supervision à tout niveau pour le technicien.

D'ou ce choix de Zabbix™ qui est bien noté dans le monde spécialisé, mais souffre d'un manque de documentation à jour, peut-être même de publicité.

Cet article va aborder l'installation, la configuration et l'exploitation de Zabbix™ 2.2.3 à l'exception (hélas) des divers équipements de types Vmware,ESXi,Vcenter 5.0 ou supérieure™, de types routeur et swicht. Le tout par faute de posséder ces équipements chez moi...

Ce document est destiné à tout les administrateurs Gnu/Linux en particulier.

Si vous souhaitez connaître encore plus Zabbix, vous avez une belle présentation en anglais ici : www.zabbix.com/presentation.php. C'est ici que j'ai découvert qu'un serveur peut encaisser une charge de 25 000 hôtes sans problème, sans toutefois décrire le serveur.

Chapter 1. Les sources de la version 2.2.3

A savoir les principaux composants à l'exception des agents s'installent uniquement sur les plates-formes suivantes: Unix/BSD/Solaris et Gnu/Linux.

Ces sources permettent au choix de produire les services suivants : Serveur, proxy, agent ou passerelle JAVA. Ce document va expliquer comment installer la partie serveur et les différents agents sur Gnu/Linux puis Windows. A l'exception de la plate-forme Windows, tout sera compilé.

Les sources

Sur le site de Zabbix™ existe une rubrique dédiée à cela, tout est disponible sur cette page : http://www.zabbix.com/download.php

Le plus compliqué avant de commencer la compilation est de résoudre les dépendances. Il est obligatoire d'installer un moteur de base de données. Zabbix™ ne manque pas de ressources à ce niveau, vous avez le choix entre: Oracle, DB2, Postgresql, Mysql. Pour ma part, j'ai choisi Mysql, qu'il faut installer par obligation.

Voici une liste de dépendances qui peut être utilisée :

apt-get install apache2 make php5-gd postfix fping fping6 snmp ntp smbclient nmap saidar traceroute \
php5-snmp curl gettext libperl-dev libgd2-xpm-dev libltdl-dev build-essential rrdtool librrds-perl \
wget build-essential libgd2-xpm libapache2-mod-php5 libgetargs-long-perl libgd-tools openssl libssh2-1\
libapache2-mod-gnutls libssl-dev mrtg libsnmp-perl libglib2.0-dev libcurl3 libnet-snmp-perl libsnmp30 \
php5-mysql phpmyadmin php-gdlibcurl4-openssl php5-json php5-curl php5-gd php5-imap ntpdate ca-certificats

J'ai ajouté optionnellement Phpmyadmin. Cette outil peut s'avérer utile pour regarder les tables et les données, en particulier pour l'insertion d'images. Également, comme ma machine (Zabbix) est virtuelle, j'ai ajouté ntpdate pour maintenir l'heure exacte. ca-certificats est obligatoire si vous utilisez la fonction d'envois de méls vers Gmail...A signaler également la non prise en compte des moyens de communication que peut utiliser Zabbix comme : Jabber et par SMS dans ma situation.

Et voilà il ne reste plus qu'à lancer la commande, mais avant il ne faut pas oublier de créer le répertoire /etc/zabbix, ou autre à votre convenance.

mkdir /etc/zabbix ; ./configure --sysconfdir=/etc/zabbix --enable-server --enable-ipv6 --with-mysql --enable-agent \
--with-libcurl -with-net-snmp -with-ssh2
[Warning]Attention
Ne pas activer --enable-static

Rien de bien particulier lors de cette phase, à remarquer que le serveur Zabbix est le seul à avoir les options --enable-server et --enable-agent. Ceci se comprend facilement.

Voici si besoin l'ensemble des options de compilation utilisables :

`configure' configures Zabbix 2.2.3 to adapt to many kinds of systems.
Usage: ./configure [OPTION]... [VAR=VALUE]...

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print `checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for `--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or `..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/zabbix]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]

Program names:
  --program-prefix=PREFIX            prepend PREFIX to installed program names
  --program-suffix=SUFFIX            append SUFFIX to installed program names
  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names

System types:
  --build=BUILD     configure for building on BUILD [guessed]
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]

Optional Features:
  --disable-option-checking  ignore unrecognized --enable/--with options
  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
  --disable-dependency-tracking  speeds up one-time build
  --enable-dependency-tracking   do not reject slow dependency extractors
  --disable-largefile     omit support for large files
  --enable-static         Build statically linked binaries
  --enable-server         Turn on build of Zabbix server
  --enable-proxy          Turn on build of Zabbix proxy
  --enable-agent          Turn on build of Zabbix agent and client utilities
  --enable-java           Turn on build of Zabbix Java gateway
  --enable-ipv6           Turn on support of IPv6

Optional Packages:
  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
  --with-ibm-db2=[ARG]    use IBM DB2 CLI from given sqllib directory
                          (ARG=path); use /home/db2inst1/sqllib (ARG=yes);
                          disable IBM DB2 support (ARG=no)
  --with-ibm-db2-include=[DIR]
                          use IBM DB2 CLI headers from given path
  --with-ibm-db2-lib=[DIR]
                          use IBM DB2 CLI libraries from given path
  --with-mysql[=ARG]      use MySQL client library [default=no], optionally
                          specify path to mysql_config
  --with-oracle=[ARG]     use Oracle OCI API from given Oracle home
                          (ARG=path); use existing ORACLE_HOME (ARG=yes);
                          disable Oracle OCI support (ARG=no)
  --with-oracle-include=[DIR]
                          use Oracle OCI API headers from given path
  --with-oracle-lib=[DIR] use Oracle OCI API libraries from given path
  --with-postgresql[=ARG] use PostgreSQL library [default=no], optionally
                          specify path to pg_config
  --with-sqlite3[=ARG]    use SQLite 3 library [default=no], optionally
                          specify the prefix for sqlite3 library

If you want to use Jabber protocol for messaging:
  --with-jabber[=DIR]     Include Jabber support [default=no]. DIR is the
                          iksemel library install directory.

If you want to use XML library:
  --with-libxml2[=ARG]    use libxml2 client library [default=no], optionally
                          specify path to xml2-config

If you want to use unixODBC library:
  --with-unixodbc[=ARG]   use ODBC driver against unixODBC package
                          [default=no], optionally specify full path to
                          odbc_config binary.

If you want to use Net-SNMP library:
  --with-net-snmp[=ARG]   use Net-SNMP package [default=no], optionally
                          specify path to net-snmp-config

If you want to use SSH2 based checks:
  --with-ssh2[=DIR]       use SSH2 package [default=no], DIR is the SSH2
                          library install directory.

If you want to check IPMI devices:
  --with-openipmi[=DIR]   Include OPENIPMI support [default=no]. DIR is the
                          OPENIPMI base install directory, default is to
                          search through a number of common places for the
                          OPENIPMI files.

If you want to check LDAP servers:
  --with-ldap[=DIR]       Include LDAP support [default=no]. DIR is the LDAP
                          base install directory, default is to search through
                          a number of common places for the LDAP files.

If you want to use cURL library:
  --with-libcurl[=DIR]    use cURL package [default=no], optionally specify
                          path to curl-config

If you want to specify iconv installation directories:
  --with-iconv=[DIR]      use iconv from given base install directory (DIR),
                          default is to search through a number of common
                          places for the iconv files.
  --with-iconv-include=[DIR]
                          use iconv include headers from given path.
  --with-iconv-lib=[DIR]  use iconv libraries from given path.

Some influential environment variables:
  CC          C compiler command
  CFLAGS      C compiler flags
  LDFLAGS     linker flags, e.g. -L<lib dir > if you have libraries in a
              nonstandard directory <lib dir >
  LIBS        libraries to pass to the linker, e.g. -l<library>
  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
              you have headers in a nonstandard directory <include dir>
  CPP         C preprocessor
  PKG_CONFIG  path to pkg-config utility
  PKG_CONFIG_PATH
              directories to add to pkg-config's search path
  PKG_CONFIG_LIBDIR
              path overriding pkg-config's built-in search path
  IKSEMEL_CFLAGS
              C compiler flags for IKSEMEL, overriding pkg-config
  IKSEMEL_LIBS
              linker flags for IKSEMEL, overriding pkg-config

Voici diverses informations avant de lancer la commande make & make install, bien vérifier que tout ce que vous souhaitez est pris en compte. On peut mémoriser que les binaires seront installés dans /usr/local

Configuration:
  Detected OS:           linux-gnu
  Install path:          /usr/local
  Compilation arch:      linux

  Compiler:              gcc
  Compiler flags:        -g -O2  -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing   -g -DNDEBUG  
                         -I/usr/local/include -I/usr/lib/perl/5.18/CORE -I. -I/usr/include     

  Enable server:         yes
  Server details:
    With database:         MySQL
    WEB Monitoring:        cURL
    Native Jabber:         no
    SNMP:                  yes
    IPMI:                  no
    SSH:                   no
    ODBC:                  no
    Linker flags:          -rdynamic -L/usr/lib/x86_64-linux-gnu -L/usr/lib/x86_64-linux-gnu  -L/usr/lib/x86_64-linux-gnu
    Libraries:             -lm -ldl  -lresolv    -lmysqlclient  -lnetsnmp -lcrypto -lm -lcrypto  -lcurl

  Enable proxy:          no

  Enable agent:          yes
  Agent details:
    Linker flags:          -rdynamic      -L/usr/lib/x86_64-linux-gnu
    Libraries:             -lm -ldl  -lresolv     -lcurl

  Enable Java gateway:   no

  LDAP support:          no
  IPv6 support:          yes

Une fois Zabbix presque installé, il faut s'occuper de Mysql, de la base puis des données à insérer.

Vous pouvez vous servir de cette page qui comprend tout les moteurs compatibles : https://www.zabbix.com/documentation/1.8/manual/installation/installation_from_source.

mysql -u root -p
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to 'zabbix'@'localhost identified by 'zabbix;
flush privileges'

Le dernier mot "zabbix" est le mot de passe, vous êtes libre de le durcir mieux que moi.

Pour insérer les données, vous avez dans les sources le répertoire database, lequel contient mysql. Il suffit de lancer les commandes suivantes pour l'insertion des fichiers.

mysql -p -u root zabbix < schema.sql
mysql -p -u root zabbix < images.sql
mysql -p -u root zabbix < data.sql 

Ne pas oublier d'adapter votre fuseau horaire à votre région, pour mémoire et en exemple (à faire depuis le répertoire /etc),

ln -sf /usr/share/zoneinfo/Europe/Paris localtime

On commence à apercevoir la fin qui approche, il ne reste plus que la partie des pages web à faire. La procédure est simple. Toujours dans les sources, prenez le répertoire frontend/php et copiez le dans le répertoire de prise en charge Apache. Pour moi ce répertoire est /var/www/html. L'ensemble des fichiers/répertoires de frontend/php ont été tous placé dans zabbix.

Il ne reste plus qu'à tester avec un navigateur avec le lien : http://localhost/zabbix/ pour commencer l'installation.

Voici les divers écrans que vous devez passer, tout doit être parfait même le plus petit détail.

Il ne manque que le dernier écran, je n'ai pas osé casser éventuellement toute mon installation pour cela... En théorie le risque est nul, car ce script ne fait que fabriquer le fichier /conf/zabbix.conf.php

[Warning]Attention
Le login/mot de passe en tant qu'administrateur est Admin et zabbix. Évidemment on peut le changer par la suite

Mais non ce n'est pas encore fini, il reste à configurer les fichiers présents dans le répertoire /etc/zabbix. Si votre installation c'est bien déroulée les fichiers suivants doivent être déjà présents zabbix_server.conf, zabbix_agent.conf et zabbix_agentd.conf

Les fichiers (serveur + agent) pour le répertoire /etc/init.d sont déjà présents en théorie, sinon ils sont tous disponibles à ce niveau : /misc/init.d/debian. Vous avez le choix, il existe plusieurs distributions.

zabbix_server.conf

Rien de bien particulier à ce niveau, voici mon fichier avec uniquement les lignes activées. A noter que le serveur écoute sur le port 10051 en TCP, et l'agent sur le port 10050 (TCP). Ces paramètres peuvent être modifiés. Le niveau DebugLevel avec la valeur maximale de 4 fournit une quantité d'information intéressante, mais en grosse quantité. J'ai utilisé plusieurs fois le mode debug pour comprendre pourquoi un paramètre utilisateur n'était pas pris en compte.

Les lignes commencant par Start... déclenche des pre-fork, selon votre réseau ne pas hésiter à placer une valeur supérieure à 1 ou 2 (max 1000).

Le fichier complet comprend environ 500 lignes, il est simple à comprendre. Il ne faut activer que le nécessaire au risque de surcharger le serveur inutilement. En ce qui concerne les paramètres pour les divers caches, les valeurs sont en bytes (!). Sinon votre serveur va démarrer puis s’arrêter sans vous expliquer pourquoi.

ListenPort=10051
SourceIP=192.168.1.25
LogFile=/tmp/zabbix_server.log
LogFileSize=1024
DebugLevel=0
PidFile=/tmp/zabbix_server.pid
DBHost=localhost
DBName=zabbix
DBSchema=zabbix
DBUser=zabbix
DBPassword=XXXXXXXXXXXXX
DBSocket=/var/run/mysqld/mysqld.sock
DBPort=3306

StartIPMIPollers=0
StartPollersUnreachable=1
StartTrappers=0
StartPingers=2
StartDiscoverers=1
StartHTTPPollers=1
StartTimers=1

L'agent Zabbix

Ce composant doit être déployé sur le serveur Zabbix™ par obligation, mais aussi sur tous les hôtes qui n'utilisent pas que des données émanant de SNMP, IPMI ou JMX. Rien n'interdit de le déployer tout de même ! Il comporte 2 fichiers de configuration dont voici mes données. Ce plugin accepte lui aussi le paramètre DebugLevel comme pour le serveur.

Le fichier : zabbix_agentd.conf

Ne sont présentées que les lignes activées.

LogFile=/tmp/zabbix_agentd.log
LogFileSize=1024
DebugLevel=0
SourceIP=192.168.1.25
EnableRemoteCommands=1
LogRemoteCommands=1
Server=192.168.1.25           [conf pour 1 agent PASSIF !]
ServerActive=192.168.1.25     [conf pour 1 agent ACTIF  !]
Hostname=zabbix
HostnameItem=zabbix
Include=/etc/zabbix/zabbix_agentd.conf.d/

Je reviendrais plus tard sur le paramètre de la dernière ligne, sinon ce fichier ne représente aucune difficulté particulière. Il est possible d'utiliser 127.0.0.1 au lieu du 192.168.1.25, puisque le serveur écoute sur les deux sans problème. C'est presque mieux pour la sécurité d'ailleurs. Pour le paramètre LogFileSize, la valeur de 1000 est souvent conseillée au niveau du tunning Zabbix.

Une attention particulière doit être faite pour le paramètre EnableRemoteCommands=1. En effet avec cette commande l'agent est autorisé à lancé des commandes shell sur l'hôte. Mais il ne faut pas oublier que l'utilisateur zabbix est en principe un simple utilisateur, sans droit particulier. Il est donc préconisé de donner des droits particuliers au moins sur les répertoires qui comportent des binaires pour Zabbix. Vous êtes libre de placer d'autres commandes selon vos besoins. Voici un exemple du fichier à modifier /etc/sudoers :

Cmnd_Alias ZABBIX_AGENT = /var/lib/zabbix/bin/*,/usr/local/sbin/*
zabbix ALL=(root) NOPASSWD: ZABBIX_AGENT

Le fichier : zabbix_agent.conf

Server=127.0.0.1
Include=/etc/zabbix/zabbix_agentd.conf.d/

Comme pour le précédent fichier, je reviendrais sur le paramètre en dernière ligne. Et là on retrouve ma remarque pour le 127.0.0.1, çà ne pose aucun problème.

Vous pouvez désormais lancer l'agent et le serveur Zabbix, tout devrait fonctionner.

Les icônes spéciaux Zabbix™.

J'attaque cette partie totalement optionnelle qui va apporter à l'interface graphique quelque chose de très bien et soigné. Comme nous allons par la suite inclure des hôtes à superviser, autant placer tout de suite de jolis icônes, ce qui évite d'y revenir. A savoir et c'est plutôt important, Zabbix stocke tout(!), et vraiment tout dans une base de données, y compris les icônes qu'il peut avoir besoin. L'insertion de ces images se fait au travers d'un fichier XML, qui bien évidemment comprend l'image incluse ou plusieurs.

Les images d'origines.

Vous avez dans le répertoire misc/images (sources), deux répertoires qui sont : png_classic et png_modern. Pour insérer un seul répertoire ou même les deux, placez vous dans misc, nous allons utiliser le script présent png_to_xml.sh. Voici un exemple :

./png_to_xml png_modern out.xml

Il suffit de choisir un répertoire puis de donner le nom du fichier XML en sortie qui comprend tout ce qu'il faut. Ce script est fiable, de plus il n'est pas nécessaire de connaître la valeur du dernier index de la table images. Il existe sur le NET un script qui demande çà, à déconseiller donc.

Maintenant il faut retourner à l'interface graphique Zabbix en tant qu'administrateur, de sélectionner Configuration, Carte puis Importer (à l’extrême droite en haut). Sélectionnez votre fichier XML ( ex out.xml) sans oublier de cocher les 2 cases Images, comme le montre l'image suivante. C'est rapide et efficace avec un bon script.

Zabbix propose via le menu configuration la visualisation de toutes les images enregistrées (voir images).

Autres sources.

Il existe plusieurs sites disponibles sur le NET pour cela, j'ai retenu ce lien : www.zabbix.com/wiki/. Il ne reste plus qu'à les télécharger et procéder comme pour les images présentes dans les sources et le tour est joué. Contrairement aux icônes classiques livrés avec Zabbix en standard, vous avez accès désormais aux formes qui vont changer de couleur en fonction de leur état, sinon à la manière d'autre un arrière plan est formé autour. Personnellement je préfère que les icônes changent de couleurs, ce qui ne surcharge pas l'écran.

Voici un exemple :

Début d’intégration d'un hôte

C'est un peu le but de Zabbix, superviser des hôtes. Nous ne verront que l'installation d'un hôte distant style modem ADSL, une station sous Seven puis une station de type serveur, lequel héberge Zabbix d'ailleurs. Le but également n'est pas uniquement de faire des ping, c'est plus de la supervision à ce niveau.

Sans rentrer dans les détails pour le moment, la carte de supervision finale ressemble à ceci :

Plate-forme Gnu/Linux

Dès que possible si vous pouvez installer l'agent Zabbix dans une machine à superviser, faites le. C'est un élément essentiel pour Zabbix, de plus ce module est configurable. Il est en mesure d'exécuter des commandes émises par le serveur, mais aussi de faire l'inverse, ce qui permet de personnaliser chaque agent si besoin.

Pour l'installer; soit vous prenez un package déjà fait, soit vous l'installez via une compilation. Pour le compiler on procède exactement comme pour le serveur Zabbix ( voir sources_server). Pour les options de compilation, il suffit de retirer --enable-server, ensuite on retrouve le même style de configuration que pour le serveur. Donc il vous faut un répertoire /etc/zabbix, le lancer au démarrage...etc

Le fichier zabbix_agent.conf

Rien de bien particulier à ce niveau, évidemment on déclare le serveur Zabbix, le fichier de log puis les paramètres utilisateurs. Ces paramètres sont une des parties puissantes et souples de Zabbix, plus besoin de travailler avec uniquement des plugins, l'agent est capable de lancer des commandes shell puis de transmettre ces données au serveur. C'est le cas pour les 2 premières lignes UserParameter, les suivantes sont imposées par un template. Je reviendrais sur la façon de créer tous ceci plus tard.

Server=192.168.1.25
Include=/etc/zabbix/zabbix_agentd.conf.d/

UserParameter=system.temperature.core[*],sensors|grep temp1 |cut -d "(" -f 1|cut -d "+" -f 2|cut -c 1-4
UserParameter=system.temperature.cpu[*],sensors|grep "Physical id 0" |cut -d "(" -f 1|cut -d "+" -f 2|cut -c 1-4
UserParameter=discovery.hard_disk,/var/lib/zabbix/bin/discover_hdd.sh
UserParameter=discovery.cpus,/var/lib/zabbix/bin/discover_cpus.sh
UserParameter=discovery.cores,/var/lib/zabbix/bin/discover_cores.sh

Le fichier zabbix_agentd.conf

Ce fichier permet de configurer votre agent pour que celui ci soit passif et/ou actif. L'option EnableRemoteCommands=1 autorise le serveur Zabbix à lancer des commandes au travers de cet agent (voir zabbix_agentd.conf). Ce même agent est capable d'exécuter des commandes personnalisées puis de transmettre ces valeurs au serveur, Server=192.168.1.25. Comme pour le précédent fichier de conf, on retrouve des paramètres UserParameter. A ce propos je me demande pourquoi ils sont présents dans les 2 fichiers de configuration et en plus l'un à coté de l'autre(?). Le répertoire Include=/etc/zabbix/zabbix_agentd.conf.d/ si activé, doit contenir des fichiers de configuration avec eux aussi des paramètres UserParameter.

[Warning]Attention
Après plusieurs essais d'un coté comme de l'autre, il apparaît que les paramètres UserParameter sont utilisées pour les fonctions suivantes : pour zabbix_agent.conf, ils sont applicables localement; rien n'est transmis au serveur. Pour le fichier : zabbix_agentd.conf aucun contrôle local, mais ils sont pris en compte ou transmis au serveur. Je pense que la solution idoine consiste à créer autant de fichier(s) de configuration avec des paramètres UserParameter à l'intérieur. La prise en compte se fait ensuite au travers d'un répertoire commun grâce au paramètre Include=/etc/zabbix/zabbix_agentd.conf.d/. Comme çà tout le monde est content y compris la maintenance.
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=1024

DebugLevel=0
SourceIP=192.168.1.2

EnableRemoteCommands=1
LogRemoteCommands=1

Server=192.168.1.25
ListenPort=10050
ListenIP=192.168.1.2

StartAgents=3

ServerActive=192.168.1.25

Hostname=serveur
Include=/etc/zabbix/zabbix_agentd.conf.d/

Astuce pour tester votre agent

Cette méthode fonctionne sur toute plate-forme, il suffit de lancer la commande zabbix_agent -p. Et une fois de plus la puissance de Zabbix est là, les données envoyées sont énormes sans pratiquement rien faire. En regardant bien, vous pouvez découvrir des erreurs (non traité car non prise en compte), mais aussi vers la fin, la prise en compte des commandes UserParameter

Également, en prenant comme exemple la 1ere ligne, l'agent nous répond qu'il ne sait pas nous donner le hostname (ZBX_NOTSUPPORTED). Donc soit vous apprenez à vous en passer, soit il faut passer par une commande UserParameter (avec un autre nom).
agent.hostname                                [m|ZBX_NOTSUPPORTED]
agent.ping                                    [u|1]
agent.version                                 [s|2.2.3]
system.localtime[utc]                         [u|1402641990]
system.run[echo test]                         [m|ZBX_NOTSUPPORTED]
web.page.get[localhost,,80]                   [t|HTTP/1.1 200 OK
web.page.perf[localhost,,80]                  [d|0.000511]
web.page.regexp[localhost,,80,OK]             [s|OK]
vfs.file.size[/etc/passwd]                    [u|2564]
vfs.file.time[/etc/passwd,modify]             [u|1400764328]
vfs.file.exists[/etc/passwd]                  [u|1]
vfs.file.contents[/etc/passwd]                [t|root:x:0:0:root:/root:/bin/bash
	daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
	bin:x:2:2:bin:/bin:/usr/sbin/nologin
	sys:x:3:3:sys:/dev:/usr/sbin/nologin
	sync:x:4:65534:sync:/bin:/bin/sync
	games:x:5:60:games:/usr/games:/usr/sbin/nologin
	debian-spamd:x:125:136::/var/lib/spamassassin:/bin/sh
	clickpkg:x:123:134::/nonexistent:/bin/false
	zabbix:x:126:137::/var/run/zabbix/:/bin/sh
	snmp:x:127:138::/var/lib/snmp:/bin/false]
vfs.file.regexp[/etc/passwd,root]             [s|root:x:0:0:root:/root:/bin/bash]
vfs.file.regmatch[/etc/passwd,root]           [u|1]
vfs.file.md5sum[/etc/passwd]                  [s|2f859e109d5eaeff650883cf3c159651]
vfs.file.cksum[/etc/passwd]                   [u|1004722115]
net.dns[,zabbix.com]                          [u|1]
net.dns.record[,zabbix.com]                   [t|zabbix.com SOA  ns1.yourhostingaccount.com admin.yourhostingaccount.com]
net.tcp.dns[,zabbix.com]                      [u|1]
net.tcp.dns.query[,zabbix.com]                [t|zabbix.com SOA  ns1.yourhostingaccount.com admin.yourhostingaccount.com]
net.tcp.port[,80]                             [u|1]
system.users.num                              [u|2]
log[logfile]                                  [m|ZBX_NOTSUPPORTED]
logrt[logfile]                                [m|ZBX_NOTSUPPORTED]
eventlog[system]                              [m|ZBX_NOTSUPPORTED]
kernel.maxfiles                               [u|805479]
kernel.maxproc                                [u|32768]
vfs.fs.size[/,free]                           [u|7150067712]
vfs.fs.inode[/,free]                          [u|804188]
vfs.fs.discovery                              [s|{
	"data":[
		{
			"{#FSNAME}":"\/",
			"{#FSTYPE}":"rootfs"},
		{
			"{#FSNAME}":"\/sys",
			"{#FSTYPE}":"sysfs"},
		{
			"{#FSNAME}":"\/proc",
			"{#FSTYPE}":"proc"},
		{
			"{#FSNAME}":"\/dev",
			"{#FSTYPE}":"devtmpfs"},
		{
			"{#FSNAME}":"\/dev\/pts",
			"{#FSTYPE}":"devpts"},
		{
			"{#FSNAME}":"\/run",
			"{#FSTYPE}":"tmpfs"},
		{
			"{#FSNAME}":"\/",
			"{#FSTYPE}":"ext4"},
		{
			"{#FSNAME}":"\/sys\/fs\/cgroup\/systemd",
			"{#FSTYPE}":"cgroup"},
		{
			"{#FSNAME}":"\/run\/user\/1000\/gvfs",
			"{#FSTYPE}":"fuse.gvfsd-fuse"}]}]
vfs.dev.read[sda,operations]                  [u|210902]
vfs.dev.write[sda,operations]                 [u|230961]
net.tcp.listen[80]                            [u|1]
net.udp.listen[68]                            [u|0]
net.if.in[lo,bytes]                           [u|168690792]
net.if.out[lo,bytes]                          [u|168690992]
net.if.total[lo,bytes]                        [u|337381984]
net.if.collisions[lo]                         [u|0]
net.if.discovery                              [s|{
	"data":[
		{
			"{#IFNAME}":"eth1"},
		{
			"{#IFNAME}":"lo"}]}]
vm.memory.size[total]                         [u|8321200128]
proc.num[inetd]                               [u|0]
proc.mem[inetd]                               [u|0]
system.cpu.switches                           [u|95570477]
system.cpu.intr                               [u|27343533]
system.cpu.util[all,user,avg1]                [m|ZBX_NOTSUPPORTED]
system.cpu.load[all,avg1]                     [d|0.450000]
system.cpu.num[online]                        [u|12]
system.uname                                  [s|Linux serveur 3.13.0-29-generic #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014 x86_64]
system.hw.chassis                             [s|To Be Filled By O.E.M. To Be Filled By O.E.M. To Be Filled By O.E.M. Desktop]
system.hw.cpu                                 [t|processor 0: GenuineIntel Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz working at 3201MHz (maximum 3201MHz)
processor 1: GenuineIntel Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz working at 1200MHz (maximum 3201MHz)
processor 2: GenuineIntel Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz working at 1200MHz (maximum 3201MHz)
processor 3: GenuineIntel Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz working at 1200MHz (maximum 3201MHz)
processor 4: GenuineIntel Intel(R) Core(TM) i7-3930K CPU @ 3.20GHz working at 1200MHz (maximum 3201MHz)
system.hw.devices                             [t|00:00.0 Host bridge: Intel Corporation Xeon E5/Core i7 DMI2 (rev 07)
00:01.0 PCI bridge: Intel Corporation Xeon E5/Core i7 IIO PCI Express Root Port 1a (rev 07)
00:02.0 PCI bridge: Intel Corporation Xeon E5/Core i7 IIO PCI Express Root Port 2a (rev 07)
00:03.0 PCI bridge: Intel Corporation Xeon E5/Core i7 IIO PCI Express Root Port 3a in PCI Express Mode (rev 07)
00:05.0 System peripheral: Intel Corporation Xeon E5/Core i7 Address Map, VTd_Misc, System Management (rev 07)
00:05.2 System peripheral: Intel Corporation Xeon E5/Core i7 Control Status and Global Errors (rev 07)
00:05.4 PIC: Intel Corporation Xeon E5/Core i7 I/O APIC (rev 07)
00:11.0 PCI bridge: Intel Corporation C600/X79 series chipset PCI Express Virtual Root Port (rev 06)
00:16.0 Communication controller: Intel Corporation C600/X79 series chipset MEI Controller #1 (rev 05)
00:1a.0 USB controller: Intel Corporation C600/X79 series chipset USB2 Enhanced Host Controller #2 (rev 06)
00:1b.0 Audio device: Intel Corporation C600/X79 series chipset High Definition Audio Controller (rev 06)
00:1c.0 PCI bridge: Intel Corporation C600/X79 series chipset PCI Express Root Port 1 (rev b6)
00:1c.1 PCI bridge: Intel Corporation C600/X79 series chipset PCI Express Root Port 2 (rev b6)
00:1c.7 PCI bridge: Intel Corporation C600/X79 series chipset PCI Express Root Port 8 (rev b6)
00:1d.0 USB controller: Intel Corporation C600/X79 series chipset USB2 Enhanced Host Controller #1 (rev 06)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev a6)
00:1f.0 ISA bridge: Intel Corporation C600/X79 series chipset LPC Controller (rev 06)
00:1f.2 SATA controller: Intel Corporation C600/X79 series chipset 6-Port SATA AHCI Controller (rev 06)
00:1f.3 SMBus: Intel Corporation C600/X79 series chipset SMBus Host Controller (rev 06)
01:00.0 VGA compatible controller: NVIDIA Corporation GK107 [GeForce GTX 650] (rev a1)
01:00.1 Audio device: NVIDIA Corporation GK107 HDMI Audio Controller (rev a1)
06:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller (rev 02)
07:00.0 USB controller: Texas Instruments TUSB73x0 SuperSpeed USB 3.0 xHCI Host Controller (rev 02)
08:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57781 Gigabit Ethernet PCIe (rev 10)
09:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 11)
0a:00.0 FireWire (IEEE 1394): VIA Technologies, Inc. VT6315 Series Firewire Controller (rev 01)
0b:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 11)
0c:00.0 SATA controller: Marvell Technology Group Ltd. 88SE9172 SATA 6Gb/s Controller (rev 11)
ff:08.0 System peripheral: Intel Corporation Xeon E5/Core i7 QPI Link 0 (rev 07)
ff:08.3 System peripheral: Intel Corporation Xeon E5/Core i7 QPI Link Reut 0 (rev 07)
ff:08.4 System peripheral: Intel Corporation Xeon E5/Core i7 QPI Link Reut 0 (rev 07)
... (coupé volontairement)
ff:13.1 Performance counters: Intel Corporation Xeon E5/Core i7 Ring to PCI Express Performance Monitor (rev 07)
ff:13.4 Performance counters: Intel Corporation Xeon E5/Core i7 QuickPath Interconnect Agent Ring Registers (rev 07)
ff:13.5 Performance counters: Intel Corporation Xeon E5/Core i7 Ring to QuickPath Interconnect Link 0 Performance Monitor (rev 07)
ff:13.6 System peripheral: Intel Corporation Xeon E5/Core i7 Ring to QuickPath Interconnect Link 1 Performance Monitor (rev 07)]
system.hw.macaddr                             [s|[eth1] bc:5f:f4:4b:18:23]
system.sw.arch                                [s|x86_64]
system.sw.os                                  [s|Linux version 3.13.0-29-generic (buildd@toyol) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #53-Ubuntu SMP Wed Jun 4 21:00:20 UTC 2014]
system.sw.packages                            [t|[dpkg] (coupé : la liste des packages (trop long)]
system.swap.size[all,free]                    [u|1056264192]
system.swap.in[all]                           [u|0]
system.swap.out[all]                          [u|0]
system.uptime                                 [u|9665]
system.boottime                               [u|1402632327]
sensor[w83781d-i2c-0-2d,temp1]                [m|ZBX_NOTSUPPORTED]
net.tcp.service[ssh,127.0.0.1,22]             [u|0]
net.tcp.service.perf[ssh,127.0.0.1,22]        [d|0.000000]
system.hostname                               [s|serveur]
vfs.dev.discovery                             [t|{"data":[{"{#BLOCKSIZE}":"1953525168",
"{#BLOCKDEVICE}":"sda"},
 {"{#BLOCKSIZE}":"976773168","
 {#BLOCKDEVICE}":"sdb"},
 {"{#BLOCKDEVICE}":"sr0",
"{#BLOCKSIZE}":"2097151"},
 {"{#BLOCKSIZE}":"131072","
 {#BLOCKDEVICE}":"ram0"},
 {"{#BLOCKSIZE}":"131072",
 ...(volontairement coupé)
 "{#BLOCKDEVICE}":"ram15"}]}]
Can't locate Linux/LVM.pm in @INC (you may need to install the Linux::LVM module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2.)
at /var/lib/zabbix/bin/disco_lvm_sudo line 3.
BEGIN failed--compilation aborted at /var/lib/zabbix/bin/disco_lvm_sudo line 3.
vfs.lvm.discovery                             [t|]
Can't locate Linux/LVM.pm in @INC (you may need to install the Linux::LVM module) (@INC contains: /etc/perl /usr/local/lib/perl/5.18.2 )
at /var/lib/zabbix/bin/check_lvm_sudo line 3.
BEGIN failed--compilation aborted at /var/lib/zabbix/bin/check_lvm_sudo line 3.
vfs.lvm.lv                                    [t|]
hardware.disk.smart.discovery                 [t|{"data":[{"{#SMARTDRIVE}":"/dev/sda"},{"{#SMARTDRIVE}":"/dev/sdb"}]}]
hardware.disk.smart                           [t|]

sensors                                       [t|42]
system.temperature.core                       [t|42.0]
system.temperature.cpu                        [t|47.0]
discovery.hard_disk                           [t|{
"data":[
    {"{#DISKNAME}":"/dev/sda","{#SHORTDISKNAME}":"sda"}
    ,{"{#DISKNAME}":"/dev/sdb","{#SHORTDISKNAME}":"sdb"}
]
}]
discovery.cpus                                [t|{
"data":[
    {"{#CPUID}":"0"}
    ,{"{#CPUID}":"1"}
    ,{"{#CPUID}":"2"}
    ,{"{#CPUID}":"3"}
    ,{"{#CPUID}":"4"}
    ,{"{#CPUID}":"5"}
    ,{"{#CPUID}":"6"}
    ,{"{#CPUID}":"7"}
    ,{"{#CPUID}":"8"}
    ,{"{#CPUID}":"9"}
    ,{"{#CPUID}":"10"}
    ,{"{#CPUID}":"11"}
]
}]
discovery.cores                               [t|{
"data":[
]
}]

Voici les processus de l'agent pour information avec comme demandé dans mon fichier de conf, 3 agents qui tournent :

 1563 ?        S      0:00 /usr/local/sbin/zabbix_agentd
 1565 ?        S      0:04  \_ /usr/local/sbin/zabbix_agentd: collector [idle 1 sec]
 1566 ?        S      0:01  \_ /usr/local/sbin/zabbix_agentd: listener #1 [waiting for connection]
 1567 ?        S      0:01  \_ /usr/local/sbin/zabbix_agentd: listener #2 [waiting for connection]
 1568 ?        S      0:01  \_ /usr/local/sbin/zabbix_agentd: listener #3 [waiting for connection]
 1569 ?        S      0:00  \_ /usr/local/sbin/zabbix_agentd: active checks #1 [idle 1 sec]

Plate-forme Windows

Impossible à ce niveau de le compiler, de toute façon je m'y risque pas, vous avez par contre sur le site de Zabbix de quoi télécharger une version installable. Utilisez ce lien zabbix_agents_2.2.1.win.zip. Personnellement je n'ai pas testé/installé cette version pour un problème de version en 2.2.1(!) et non en 2.2.3.

La version que j'ai installé sans aucun problème est disponible ici www.suiviperf.com, de là vous pouvez prendre soit un MSI ou de prendre comme moi le package d'installation zabbix_agent-2.2.3_installer.zip. L'installation est simple, attention le package va créer de lui même le répertoire Zabbix Agent. A noter que je n'utilise pas les paramètres UserParameter, les actions seront réalisées depuis le serveur vers l'agent.

Un élément réseau

Sans utilisation de SNMP, l'adresse IP suffit, c'est ultra simple, comme les résultats aussi. Je regrette ce coté simple, faute chez moi d'un routeur...

Chapter 2. Intégration d'un hôte via l'interface.

Les templates/modèles

Désormais beaucoup de choses vont se faire par l'interface, il est important de connaître dès maintenant des mots importants employés dans Zabbix, dans le cadre de la gestion de vos hôtes.

  • Les templates ou modèles

    C'est un passage obligé dans Zabbix, ils comportent des données qui seront utilisées par un plusieurs hôtes ou groupe(s). Un template peut comporter jusqu'à sept effets différents, dans les rubriques les plus importantes qui sont : Applications / Éléments / Déclencheurs / Graphiques. Un exemple est plus parlant, prenons le template le plus simple Template ICMP ping EAR, qui est présent par défaut.

  • Applications

    Exemple : icmpC'est une sorte de catégorie qui regroupe des éléments semblables, on peut trouver aussi : CPU,Memory, Filesystem...etc

  • Éléments

    Très utilisé dans les templates, toujours en prenant notre exemple . On retrouve : ICMP loss, ICMP ping, et ICMP response time. Il est facile de comprendre le 1er et le 2eme, la 3eme valeur est capable de vous faire une réponse binaire sur l'utilisation du ping sur un hôte. Contrairement aux autres, cette donnée est rarement utilisée.

  • Déclencheurs

    Ou les fameux triggers, ils sont là pour faire des actions en fonction des valeurs/données retournées via un ou plusieurs éléments. Voici un exemple simple : {Template ICMP Ping-EAR:icmppingloss.min(5m)}>10. Au début c'est un peu déroutant, voici comment l’interpréter : (modèle) Template ICMP Ping-EAR ,(fonction) icmppingloss , prendre la valeur la plus basse depuis 5 mn (.min(5mn)) si supérieure à 10 déclencher une alerte de type Avertissement. Il est possible de combiner les triggers pour une même sévérité (Non classé, Information,Avertissement, Moyen, Haut, Désastre). Donc toujours pour le même Elément, il comporte 3 règles différentes.

    Vous pouvez avoir plus de détails ici : www.zabbix.com/documentation/2.0/

    Voici le même type de lien en français mais moins récent : https://www.zabbix.com/documentation/fr/1.8/

  • Graphiques

    Zabbix fournit une interface très facile d'emploi pour créer des graphiques depuis les données d'un ou plusieurs éléments. Mais également un template peut aussi faire ce travail pour vous.

  • Écrans

    A partir d'un ou plusieurs graphiques vous pouvez faire un écran ou plus. Sa fonction est de présenter un ou plusieurs graphiques.

  • Règles de découvertes

    Souvent utilisé pour les templates dédiés au système d'exploitation, pour les systèmes de fichiers... On peut trouver des règles du style découverte du système de fichiers, des cartes réseaux...

  • web scénarios

    Bien que présent au niveau des templates, cette fonction est peut utilisée. Néanmoins elle est utilisée pour par exemple : superviser un site WEB, de là vous pouvez avoir plusieurs graphiques

Maintenant que vous savez à quoi servent les templates (disons je l'espère), vous pouvez commencez à intégrer vos hôtes avec déjà une vision de ce qui est supervisable pour eux. Dans l'image qui suit vous pouvez apercevoir que les templates peuvent être liés entre eux, mais aussi certains sont déjà affectés à des hôtes.

Zabbix propose une page dédiée aux templates divers et variés, voici le lien : www.zabbix.com/wiki/. J'ai importé ZBX-WINDOWS-ENVMON dont l'installation et les fichiers sont présents ici : zbx-windows-envmon. Et sinon au travers du NET il existe plein de forums...pour récupérer éventuellement des infos, au travers d'un modèle ou via les paramètres utilisateurs.

Intégration d'un hôte

Je vais prendre pour exemple mon serveur (Ubuntu), lequel héberge Zabbix et même la station Seven. Vous allez voir que rapidement il est supervisé sans se prendre la tête, sans mettre la main aux scripts, ou alors de façon minimale (température via les userparameter).

Cette écran comprend surtout l'identification de l'hôte puis la méthode de remonter des informations, au travers d'un agent dans cette situation.

Il est nécessaire de placer ici au moins un template. Personnellement je travaille avec 2 affichages pour configurer cette partie (résolu avec la version 2.2.4 !). Car ce que propose l'interface ne correspond pas à l'ensemble des templates (?), donc en s'aidant avec une autre page on arrive à tout faire via un copier/coller.

J'ai volontairement sauté l'onglet Macros car très couramment non utilisé à ce niveau.

Cette option est manquante dans beaucoup d'outils de supervision, Zabbix propose à ce niveau une base d'inventaire sur l'hôte, vraiment très complète. Le remplissage est tout de même à 95% manuel, mais zabbix peut apporter des données tout de même, (voir le chap. astuce_agent et les remontées d'informations via l'agent). Et si les données sont bien remplies, vous serez à titre d'exemple en mesure de répondre depuis quand est activée cette machine, son OS, qui contacter pour le reboot...etc

Bien que cette fonction soit présente, et comme Zabbix™ ne stocke que tout dans une base de données, utiliser cette fonction de façon complète peu jouer sur les performances. Personnellement je l'utilise à petite dose pour répondre à un problème (contactez qui pour rebooter), particularité de cette hôte, et date de mise en place. Tout est aussi question de combien d'hôte vous avez à superviser

En ce qui concerne la ou les dépendances, Zabbix une fois de plus apporte une grande souplesse. Au niveau du déclencheur, dans l'onglet Dépendance il suffit d'insérer un autre déclencheur mais lié à un autre hôte. Exemple pour mon 1er routeur juste après mon modem ADSL : Je prend le déclencheur (routeur) {HOST.NAME} is unavailable by ICMP et j'insère MODEM: {HOST.NAME} is unavailable by ICMP. Si mon modem n'est plus joignable en ICMP, Zabbix ne déclenchera rien tant que mon modem ne répond pas, pour le routeur (!). La carte est bien évidemment mise à jour, et il est possible de placer plusieurs déclencheurs dans les dépendances.

Peaufiner la supervision

Donc avec mon hôte de type Gnu/Linux, avec les templates Template App HTTP Service, Template server, qui comprend Template OS Linux, je me retrouve avec 128 éléments supervisés. Comme le montre l'image en dessous, certains sont parfois non supporté, c'est le résultat du modèle qui est appliqué. Bon évidemment, ils sont présents sur l'affichage sans perturber le serveur. La suppression d'un élément dans un template fait que cette action sera appliquée partout, impossible d'y revenir après. Il est préférable je pense de rendre inactif les éléments non importants, c'est plus sage.

Bien que chaque colonne soit importantes, certaines le sont plus pour moi. A commencer par la présence de déclencheurs ou pas. En prenant en exemple le taux de disponibilité de la RAM, sans déclencheur, le fait de prendre de la ressource pour ne rien faire avec, autant le désactiver. La colonne clé n'est pas importante pour le moment, ces données peuvent servir pour cloner un élément, ou pour faire un nouveau élément en partant de zéro en s'inspirant d'une clé déjà présente. Les colonnes Intervalle, Historique et Tendances sont toutes liés aux temps, et aux stockage plus ou moins importants de ces données.

  • Intervalle

    C'est la fréquence d’exécution du test demandé.

  • Historique

    C'est la durée en secondes pendant lequel le serveur conservera les données intégralement(!) en base de données. Donc cette valeur peut jouer sur les performances, mais aussi sur la précision des graphiques. Par défaut elle est de 7 jours.

  • Tendance

    C'est la durée en jours pendant lequel Zabbix conservera les données minimum, maximum et moyenne pendant une durée. Donc clairement cette valeur est moins précise que l'historique. La valeur par défaut est de 365 jours.

Modifications de valeurs

En cliquant sur la partie bleue dans la colonne Étiquette, ou pour une série de type découverte sur la partie jaune/marron, vous avez accès à la fenêtre suivante (exemple). C'est aussi simple que çà, et l'effet est immédiat. A noter que c'est ici que vous pouvez ajouter une ou plusieurs périodes de scrutation, certes mon exemple est mauvais (température CPU). Mais il est possible par exemple de faire que le week-end une valeur plus grande d’exécution du script soit faite.

Encore une démonstration de souplesse pour Zabbix, en proposant les correspondances de valeurs, ceci n'est pas le cas pour tout les logiciels de supervision..., également de proposer l'unité, un multiplicateur...etc.

Modification/création d'un déclencheur

Si votre déclencheur dépend d'un modèle, c'est à ce niveau qu'il faut modifier les valeurs. Sinon l'accès est plus simple pour un élément que vous avez fait. Je vais prendre pour exemple l'élément system.temperature que je vais appeler system.temperature-55 au niveau du déclencheur. Le plus difficile est de mettre au point la formule {SERVEUR:system.temperature.core.last()}>55, mais comme déjà expliqué (voir modeles) le principe est simple. Donc pour mémoire : le paramètre {SERVEUR:system.temperature.core.last()}>55 veut dire : l'hôte (serveur), prendre l’élément (system.temperature.core) et prendre la dernière valeur. Si cette valeur dépasse 55 alors le déclenchement sera de niveau haut. C'est vraiment très simple, pour une sévérité autre il faut refaire un déclencheur similaire.

[Warning]Attention
L'option Générations d'évènements multiples peut générer un flux d'informations identiques en masse...

Création d'un graphique

Je vais passer rapidement sur cette étape qui est très simple, attention à bien sélectionner le groupe puis l'hôte quand vous faites Ajouter un élément. Il est possible de combiner plusieurs éléments ou sources pour faire un graphique.

Il ne reste plus qu'à faire Aperçu et sauvegarder.

Création d'un écran

Je passe rapidement aussi sur cette étape, qui une fois vos graphiques prêts ils peuvent être visualisés au travers d'un graphique (écran). En théorie vous avez le choix, voici un exemple en image, laquelle me satisfait grandement. Les Espaces disques bien que simplistes me permette de savoir rapidement les niveaux, sans me brouiller avec d'autres valeurs.

Création d'une carte(map)

Une fois de plus c'est très simple, avec une touche de puissance et de liberté comme j'aime. Il suffit de faire insérer un élément pour qu'une fenêtre de dialogue apparaisse (voir image en dessous). Il est donc possible à ce niveau d'incorporer un élément unique, une carte, mais aussi un déclencheur et également une image ou un fond d'écran. Le tout de façon unique ou multiples, c'est loin d'être le cas pour tout les outils de supervision. A savoir qu'il peut être pratique d'insérer un groupe d'hôte style EAR, alors dans ce cas ils apparaissent tous d'un coup.

Selon vos icônes et surtout selon le nombre d'hôtes à superviser, vous avez la possibilité d'incorporer des images plus ou moins grandes. La plus petite taille commence à 24 pixels, et la plus grande à 128 pixels. Il s'agit ici des valeurs les plus rencontrées, et non d'une limitation.

[Warning]Attention
Attention à l'image ci-dessous, elle correspond à une sélection d'une Image. Voir l'image juste après pour un hôte classique.

On peut ajouter pour chaque hôte un champ URL, il correspond à un lien important pour vous vis-à-vis de lui. Dans mon exemple j'ai ajouter l'écran de supervision du serveur. Donc en cliquant à droite dessus, je peux aller rapidement et directement à sa page de supervision avec les graphiques. C'est très pratique.

Sans rentrer dans les détails, l'interface est simple et propose beaucoup de choses...mais c'est pas tout.

La relation logique entres hôtes se réalise facilement en sélectionnant plusieurs hôtes d'un coup. Une interface étendue s'affiche pour proposer d'autres options. A savoir l'option Étiquette pour l'hôte (en haut) permet de donner des informations sur lui, dans le style modem ADSL, 2M...etc. Cette étiquette supporte ce que je vais expliquer juste après, çà peut toujours servir. Comme le montre l'image qui comprend tous mes équipements supervisés, vous pouvez afficher le résultats d'un ping sur un hôte via la commande dans l'étiquette suivante :

 {{HOSTNAME}:icmppingsec.last(0)}

Et on peut aller très loin avec tous çà, au risque de surcharger la carte.

La seconde Etiquette est en liaison avec un lien, et de là, il est possible d'afficher toutes sortes de valeurs dans le langage Zabbix. Comme le montre l'image, mon lien internet affiche presque en direct les débits. Pour cela il suffit d'insérer ces lignes puis de sauvegarder :

IN  {SERVEUR:net.if.in[eth1].last(0)}
OUT {SERVEUR:net.if.out[eth1].last(0)}

Chapter 3. Autres possibilités

Zabbix™ à encore un plusieurs fonctions disponibles plus ou moins intéressantes. Je vais les présenter sans trop m'attarder dessus pour certaines...

Service WEB scénarios

Ce service est intéressant à mes yeux, il permet de tester par exemple un service en interne ou externe comme Google™.

Il faut sélectionner un hôte (pour moi : SERVEUR) puis de faire comme sur les images suivantes. Absolument aucune difficulté, il est possible de rassembler plusieurs sites.

Et voilà ce que cela donne, vous pouvez bien évidemment faire un ou plusieurs déclencheurs avec.

Service Maintenance

C'est un paramètre important, il permet de maintenir une supervision à jour, disons sans message d'alerte, méls... C'est propre de faire comme çà sur un réseau à condition tout de même que l'interruption ne soit pas de 5 minutes non plus. Par contre il manque un envois de méls pour prévenir de cette opération, c'est faisable mais pas en natif. Ce faux problème est traité dans ce paragraphe notification:

Et voilà le résultat sur la carte :

La notification par méls

C'est pour moi un élément essentiel et non une option, dans le sens ou un administrateur ne peut pas que regarder sa supervision toute la journée. Donc il faut un ou plusieurs autres moyens de communications. Zabbix™ propose nativement de faire ceci via messagerie, via Jabber ou par par SMS. J'ai opté pour une notification par méls, via Gmail.

J'ai essayé le plugin MSMTP dont la référence est ici : http://dev.aperto.fr/projects/zabbixextensions/wiki/Advanced_email_notifications. C'est un échec me concernant, ce projet date de 2011.

Ensuite j'ai essayé zabbix-alert-smtp.sh nettement plus récent et dont les sources sont disponibles ici : https://gist.github.com/superdaigo/3754055. C'est aussi un échec, il est vrai que je n'ai passé un temps fous dessus...

Donc la solution finale à été d'installer un serveur Postfix pour faire relais entre Zabbix et Gmail. Cette solution est fiable, rapide à mettre en place, néanmoins il est hébergé avec le serveur Zabbix. Et donc si Zabbix est isolé je ne reçois rien...c'est un risque à prendre, il reste tout de même la supervision graphique.

Pour configurer ceci c'est très simple, il faut ajouter une action spécifique en fonction des destinataires, car chaque action contient des règles.

Voici le résumé d'une action faisable, à remarquer Envois MAIL État de maintenance dans maintenance, donc si jamais cette équipement ou ce groupe passe en mode maintenance, je serais avertit. Ensuite on retrouve le type de problème et vers qui est envoyé le mél. Envois MAIL État de maintenance dans maintenance Valeur du déclencheur = PROBLÈME Envoyer le message aux utilisateurs: Admin (Zabbix Administrator), laurent (ARCHI Laurent) via all media Activé

Voici un exemple de configurations possibles en images, vous pouvez utilisez les nombreuses macros(variables) zabbix. (voir macros) :

Sans oublier d'activer cette action, reste plus qu'à tester.

Chapter 4. Construction d'un élément

Construire un Élément pour un agent/hôte

Je tenais à avoir la température en supervision, et comme je n'ai rien trouvé de natif, il me reste à faire ce travail moi-même. Comme Zabbix est souple, vous avez plusieurs solutions pour faire enregistrer un UserParameter. Soit directement dans les fichiers des agents, soit séparément dans un fichier puis dans le répertoire zabbix_agentd.conf.d (ou similaire). La ligne à obtenir est la suivante : UserParameter=system.temperature.core[*],sensors|grep temp1 |cut -d "(" -f 1|cut -d "+" -f 2|cut -c 1-4. Mais avant d'en arriver là, le travail peut-être relativement long. Il faut d'abord mettre au point les données retournées avec la commande désirée (sensors en exemple), coupez, filtrez...la commande ne doit retourner des valeurs que Zabbix peut interpréter (texte, décimal...). Ensuite vous pouvez tester manuellement avec votre agent via la commande zabbix_agent -t system.temperature.core system.temperature.core [t|40.0]. Reste plus qu'à inscrire la ligne UserParametr.... dans les fichiers de configuration, puis de relancer l'agent.

Pour construire un déclencheur en liaison avec notre exemple, il suffit de faire ceci. Nouveau déclencheur, de lui donner un nom puis d'insérer le fameux trigger : {SERVEUR:system.temperature.core.last()}>55. Donc si la dernière valeur retournée de temperature.core est supérieure à 55°C, déclenchez un événement de niveau haut. La sélection du niveau se fait facilement avec l'interface graphique. C'est aussi simple que cela.

Zabbix propose un article sur lm_sensors, il est disponible ici : www.zabbix.com/documentation/2.2/manual/appendix/items/sensor.

Construire un Élément sur le serveur.

La construction d'un Elément global reprend à l'identique celle adaptable à un hôte, il faut par contre l'incorporer depuis un modèle.

Dans la situation et en en exemple pour la récupération de température des CPUs, il faut par contre qu'il soit pris en compte au niveau découverte. En effet rare sont maintenant les CPUs à un seul processeurs. Donc comme le montre l'image ci-dessous, il faut repérer le modèle qui inclut la découverte des CPUs. Il s'agit du modèle Template Server, puis dans les règles de découvertes il faut sélectionner Core Discovery pour finir Prototypes d’éléments. De là il ne reste plus qu'à faire créer un prototype d’élément. Je passe sur la fenêtre de saisie, elle est identique à la fenêtre classique de création pour hôte. C'est au niveau de la clé que tout change, elle doit contenir par obligation une macros ({#COREID}). Et voilà la clé à placer system.temperature.core[{#COREID}].

Chapter 5. Déclencheurs intéressants

Zabbix propose nativement plusieurs déclencheurs intéressants avec son agent(!), qui peuvent intervenir au niveau sécurité. Zabbix peut rechercher un mot dans un fichier et vous retourner le nombre. C'est la fonction vfs.file.regmatch[/etc/passwd,root] en exemple. Il peut également faire la somme (CRC) sur un fichier, et vous prévenir si ce fichier à été modifié. Ceux sont les fonctions vfs.file.md5sum[/etc/passwd] et vfs.file.cksum[/etc/passwd] [u|3960582315]. J'avoue ne pas comprendre la 2eme fonction. La fonction system.users.num peut vous donner le nombre d'utilisateurs connecté à un hôte. Comme le montre les données suivantes, les toutes dernières lignes ne sont pas supportées. C'est dommage car ces fonctions peuvent surveiller un fichier spécifique et vous retourner des valeurs si trouvés.

vfs.file.regexp[/etc/passwd,root]             [s|root:x:0:0:root:/root:/bin/bash]
vfs.file.regmatch[/etc/passwd,root]           [u|1]
vfs.file.md5sum[/etc/passwd]                  [s|31c5642d4255e7561a83272ddde20589]
vfs.file.cksum[/etc/passwd]                   [u|3960582315]

system.users.num                              [u|2]

log[logfile]                                  [m|ZBX_NOTSUPPORTED]
logrt[logfile]                                [m|ZBX_NOTSUPPORTED]
eventlog[system]                              [m|ZBX_NOTSUPPORTED]

Chapter 6. La partie Configuration (frontend)

C'est un menu très discret qui cache plusieurs pages très intéressantes, un peu dans tout les genres.

GUI

Au niveau des thèmes Zabbix est un peu pauvre à mon goût, néanmoins l'interface graphique est agréable. Rien de bien spécial dans cette fenêtre, à noter qu'il est possible d'activer ou non l'acquittement des incidents.

Nettoyage automatique

Je ne peux que préconiser le nettoyage automatique, j'ai laissé les paramètres par défauts.

Images

Ce menu est très pratique pour visualiser l'ensemble des images, impossible de faire autrement. Pour mémoire, les images sont stockées dans la base de données.

Correspondances d’icônes

Zabbix par ce menu vous propose des images qui seront placées automatiquement en fonction de mots clés.

Expressions rationnelles

Macros

Ce menu permet de modifier des macros, comme par défaut la communauté SNMP. Mais vous pouvez très bien aussi en créer pour un usage personnel.

Tables de correspondance

Ce tableau représente les différents états que peut retourner un élément (déclencheur). Une fois de plus le système est très souple.

Heures ouvrées

Comme par défaut, la valeur 1-5,09:00-18:00; est facile à comprendre.

Sévérité des déclencheurs

A l'exception du changement de couleurs, apparemment il faut éviter de modifier les valeurs.

Options d'affichage des déclencheurs

J'ai seulement modifié les couleurs à ce niveau, menu très simple.

Autre

Une fois de plus, j'ai laissé les valeurs par défaut.

Chapter 7. Mise à jour.

Je viens volontairement de mettre à jour la version stable 2.2.3 avec la version 2.2.4. Cette mise à jour est faisable sans problème, elle apporte surtout des corrections, toutes les modifications sont listées ici : rn2.2.4. La procédure est identique à l'installation (Cf aux chap. sources_server) avec l'arrêt du serveur et de son agent. Cette mise à jour n'écrase pas les fichiers de configuration, qui étaient tout de même sauvegardés par sécurité. Pour la partie frontend, cette mise à jour c'est faite sans arrêter le serveur, et également sans problème.

Il ne s'agit tout de même pas d'une mise à jour majeure (!).

Chapter 8. Surveillance du serveur

Si votre serveur est bien proportionné pour recevoir Zabbix, la RAM et les CPUs seront peu utilisés. Là ou Zabbix peut être perturbé c'est lors des traitements de remontées d'informations par les agents,SNMP... Dans Zabbix, ces informations sont mentionnés en VPS (Valeurs par secondes). Il faut éviter à tout prix que les fameuses VPS soient mises en cache, souvent il suffit de relancer le serveur avec des valeurs pre-fork plus forte (max 1000). Il ne faut surtout pas oublier la base de données, elle joue un rôle essentiel.

Par défaut Zabbix installe plusieurs graphiques pour superviser cela, il suffit de regarder de temps en temps. Comme le montre le graphique suivant, la valeur de cache doit être la plus basse possible, voir nul.

Il existe dans le menu configuration une supervision des délais de traitement des actions à mener par Zabbix. C'est aussi une bonne source pour connaître la santé et les éventuels problèmes de votre serveur.

Chapter 9. Supervision d'un Netasq (U70A)

Paramétrage du Netasq™.

Il suffit d'activer SNMP en mode 1,2C et/ou V3, avec une règle de filtrage pour que les flux traversent.

Cette étape est simple, elle est bien documentée par Netasq, le but de mon document n'est pas là.

Paramétrage de Zabbix

Si vous avez compilé Zabbix comme moi, en installant aussi les très nombreuses dépendances, vous n'avez pas grand chose à faire. Il ne restera que la partie configuration de l'hôte à faire. Par contre si tel n'est pas le cas, il faut installer net-snmp sur votre serveur.

Intégration d'un Netasq en SNMP

C'est maintenant que tout va se corser, car pour avoir voulu superviser l'état de mes VPNs à une époque sous Nagios, j'étais passé par l'interface SSH. Depuis j'ai appris que Netasq propose à la vente un produit qui fait tout çà. Évidemment c'est facile pour eux, mais le produit est payant. Avec Zabbix l'accès via SSH est toujours possible, mais c'est une opération qui demande de développer un script. Avec Zabbix je n'ai pas réussi à superviser les VPN, et je m'y attendais d'avance. Néanmoins grâce à SNMP j'ai l'interface (ENC0) qui va me donner le trafic de l'ensemble des VPN, en plus des cartes réseaux. De là il est possible de faire un déclencheur du genre si débit = 0 c'est que le ou les VPN sont tombés. C'est une solution mais c'est loin d'être la meilleure. Donc pour le moment je vais oublier mes VPN, je superviserais l'hôte juste après le tunnel.

A savoir que Netasq utilise le SE BSD comme support, donc en prenant un template générique SNMP ou spécifique BSD les données sont à peu près identiques. Néanmoins incorporer un template BSD pour l'appliquer sur un Netasq, est loin d'être simple. En effet les appellations(OIDs) utilisées ne correspondent pas à ceux du Netasq. Donc il faut éliminer les mauvaises lignes et au final il ne reste plus grand chose. J'ai donc utilisé les template Zabbix SNMP standards, avec des ajouts par la suite.

Pour intégrer le Netasq ou tout autre hôte en SNMP il suffit de supprimer tout au niveau de l'agent puis d'insérer les données suivantes:

Comme vous pouvez le remarquer j'ai créé le groupe Netasq qui m'a bien servi pour la suite.

Il faut maintenant appliquer les templates à cette hôte, ce qui donne pour moi Template SNMP Device et Template SNMP Disks, lesquels utilisent d'autres templates (SNMP). De toute façon le système vous annonce un doublon le cas échéant.

Si tout c'est bien déroulé au niveau de la configuration de votre hôte l’icône SNMP doit être de couleur verte. Vous avez ensuite un nombre impressionnant d’éléments(465) comme de déclencheurs(59) et même de graphiques(65). Il faut prendre élément par élément, idem pour les déclencheurs...etc et rendre inactif les tests qui ne servent à rien, ou qui n'apportent rien. Me concernant cette étape m'a pris au moins 15/20 mn, mais par contre Zabbix s'en ressent au niveau des performances (VPS).

Également, Zabbix à complété mon inventaire avec 4 rubriques dont le numéro de série, le système, sa localisation (aucun intérêt) et qui contacter.

Ajouts manuels d'OID SNMP

Toujours à la recherche pour faire remonter des informations pertinentes sur le Netasq, j'ai réussi à obtenir les données suivantes : Charge CPU, diverses informations sur la mémoire et les espaces des partitions.

Voici comment faire : une fois votre hôte sélectionné, faites ajouter un élément, entrez un nom, puis sélectionnez votre type d'agent SNMP. Pour la clé IfInOctets fonctionne bien, ce paramètre ne peut être utilisé qu'une seule fois, donc il faut ajouter quelque chose dans le style [cpu0]. Pour la valeur suivante vous pouvez faire pareil avec la valeur (exemple) [cpu5]...etc. Placez l'OID exemple : .1.3.6.1.4.1.2021.10.1.3.1 pour CPU 0

, .1.3.6.1.4.1.2021.10.1.3.2 pour CPU 5. Ensuite aucune difficulté, pour continuer à saisir d'autres paramètres manuellement, il suffit de cloner l'élément.

Pour en finir, vous pouvez faire un ou plusieurs déclencheurs basés dessus, mais aussi rassembler les 3 valeurs dans un seul graphe, une fois de plus c'est simple.

Et au final vous pouvez avoir çà :

Les graphiques sont ils vraiment tous pertinents, je ne peux le dire pour le moment. Le Netasq que j'ai est en prêt, il ne fait rien...je pense tout de même que c'est pas mal.

En sélectionnant Dernières données si il vous manque des graphiques vous avez le choix (tout n'est pas affiché), ceci reste valable pour tout hôte.

Voici une liste d'OID qui peuvent servir :

La version du SE : ~$ snmpget -v 1 -c public -Oqv 192.168.1.100 RFC1155-SMI::enterprises.11256.1.0.2.0 "8.1.7"

Dans l'ordre, le modèle, le SE, le numéro de série, son nom puis la langue sélectionné.

iso.3.6.1.4.1.11256.1.0.1.0 = STRING: "U70-A"

iso.3.6.1.4.1.11256.1.0.2.0 = STRING: "8.1.7"

iso.3.6.1.4.1.11256.1.0.3.0 = STRING: "U70XXA4H1072370"

iso.3.6.1.4.1.11256.1.0.4.0 = STRING: "NET"

iso.3.6.1.4.1.11256.1.0.5.0 = STRING: "fr"

Est ce vraiment valable avec un autre type de police (?)

iso.3.6.1.4.1.11256.1.8.1.1.3.1 = STRING: "Pass all"

Chapter 10. Conclusion.

Tables des matières

Ce travail pour réaliser cette documentation outre le temps passé dessus, a été agréable car Zabbix™ est pour moi un produit formidable. Je regrette même de ne pas l'avoir découvert plus tôt. Il propose une interface graphique relativement simple qui derrière se cache toute une puissance de modèles, d’éléments, de déclencheurs et de graphiques. Et surtout, à part la configuration des fichiers des agents lors de l'installation...c'est fini de mettre la main dans les fichiers et les scripts de configuration.

Néanmoins personne n'est parfait, il manque à mon avis une authentification entre le serveur et les agents. C'est tout de même un point important qui touche sur la sécurité, actuellement seules les adresses IP sont prises en compte. C'est un peu léger à mon gout.

Voilà un produit que je ne peux que solliciter et dire du bien, de plus l'équipe de développement est très active. Il faut que cela dure, en attendant cette même équipe pourrait s'intéresser un peu plus à la démo de Zabbix™ sur Internet. En effet ce site, possède des erreurs, des graphiques vides...etc, hélas rien de sérieux.

Et comme déjà annoncé, Zabbix bouge vite et souvent, le 1er juillet est sortie la version : Pre-2.2.5rc1 (stable), dont le mot stable m'étonne, mais bon. Et c'est pratiquement tout les jours que les sources bougent.

Il reste à traiter Zabbix en mode distribué, donc avec au moins un autre serveur en mode enfant, également avec un proxy Zabbix. Voilà les prochaines étapes, qui feront l'objet d'une mise à jour de ce document.

Appendix A. Les liens utiles.

Glossary

SNMP

(De:Wikipédi.fr) : Simple Network Management Protocol (abrégé SNMP), en français « protocole simple de gestion de réseau », est un protocole de communication qui permet aux administrateurs réseau de gérer les équipements du réseau, de superviser et de diagnostiquer des problèmes réseaux et matériels à distance.

IPMI

(De:Wikipédi.fr) : L'Interface de gestion intelligente de matériel, (ou IPMI, Intelligent Platform Management Interface) est un ensemble de spécifications d'interfaces communes avec du matériel informatique (principalement des serveurs) permettant de surveiller certains composants (ventilateur, sonde de température, ...), mais également de contrôler l'ordinateur à distance, reboot, interrupteur, console à distance.