Le document ci-dessous est la seconde partie du rapport du stage réalisé par Mathieu Passenaud auprès de mon service.
Comme son travail portait sur les problématiques de sauvegarde et d’archivage, ce second chapitre porte sur la mise en place des outils de suivi des espaces de stockage.
Pour cela, il s’appuie sur l’outil opensource ZABBIX.
Chapitre 1 – Installation
1.1 Serveur : packages et dépendances
Les packages pour la Debian 5.0 sont disponibles à cette adresse : http://packages.debian.org/stable/net/
Instructions d’installation : http://debianhelp.co.uk/zabbix
Attention, bien intégrer les librairies php pour zabbix-frontend (php-mysql) pour autoriser la connexion à la base mysql (non inclus dans les dépendances, à faire manuellement).
1.2 Client : l’agent
1.2.1 Linux
L’agent peut être téléchargé sur le web (binaire) que l’on installera et on lancera au démarrage, ou sinon il est possible d’installer un package (zabbix_agent).
Il faut bien ouvrir les ports pour autoriser l’accès aux ressources. Dans le fichier /etc/services il faut ajouter les lignes zabbix_agent 10050/tcp et zabbix_trap 10051/tcp (ou un autre port si vous avez choisi d’en utiliser un autre).
Le fichier de configuration /etc/zabbix/zabbix_agentd.conf doit contenir :
- L’adresse IP du serveur auquel se connecter : Server=192.168.1.80
- Eventuellement les ports si vous n’utilisez pas ceux par défaut : ServerPort=10051 et ListenPort=10050
- D’autres options sont disponibles (timeout, DebugLevel etc…). Un fichier d’exemple est fourni avec le package zabbix_agent.
1.2.2 Windows
Si vous téléchargez le binaire (zabbix_agentd.exe), vous devrez créer votre propre fichier de configuration dans C : à l’aide d’un éditeur de texte tel que notepad. Attention à bien débloquer le service dans le parefeu, auquel cas il ne pourra pas communiquer avec le serveur (port sortant ET entrant, 10051 et 10050 par défaut). Il vous suffit juste d’indiquer l’IP du serveur Zabbix (exemple : Server=192.168.1.1).
Chapitre 2 – Utilisation
L’utilisation se fait entièrement par l’interface web. Pour la démarrer : http ://<adresse ip>/zabbix
2.1 Ajout d’un hôte
Dans la section « configuration », se placer dans « Hosts » puis cliquer sur le bouton « create Host »
Le nom est celui qui va être utilisé dans l’interface d’administration. Les groupes peuvent être gérés, ils sont uniquement présents pour pouvoir classer les serveurs à surveiller.
Le nom DNS est celui attribué par le serveur DNS à la machine. S’il n’y en a pas, laisser vide et renseigner le champ pour l’adresse IP et bien faire attention au champ suivant (« connect to ») qui va indiquer au serveur quelle méthode utiliser pour se connecter à l’hôte à surveiller (IP ou DNS). Spécifiez le port si vous en avez choisi un autre.
« Link with template » vous permet d’attribuer un type à l’hôte. Par exemple, pour un hôte sous Windows 2003 Server, on pourra choisir le template « Template_Windows ». Une fois que vous aurez validé, vous aurez l’état de l’hôte ainsi que les éventuelles erreurs.
2.2 Définition de nouveaux éléments
De base, Zabbix propose un ensemble d’éléments (charge du processeur, mémoire libre etc…), mais il est possible de créer son propre élément.
Dans « Items », vous pourrez d’abord voir chacun des éléments pré-configurés pour vous donner une idée de comment ils ont été créés. Chaque élément est créé avec une ou plusieurs clés qui sont disponibles via le protocole snmp ou l’agent Zabbix installé sur l’hôte.
2.2.1 Les clés disponibles
Lorsque vous créez un Item, vous devez rentrer une clé qui est une fonction qui retournera une valeur au serveur Zabbix. En cliquant sur le bouton « Select », vous accéderez à la liste des clés ainsi qu’à leur description.
2.2.2 Exemple 1 : surveillance d’un disque
Voici un exemple guidé pour créer un champ qui nous donnera la taille du disque C : (pour n’importe quel serveur) :
- Cliquez sur le bouton « Create Item »
- Donnez lui un nom
- Le type : ZABBIX agent puisque l’on récupère des données venant d’un agent Zabbix intallé sur un hôte
- Key : en cliquant sur le bouton « select », vous aurez toutes les fonctions que peuvent fournir les agents Zabbix. Dans l’exemple, on utilisera vfs.fs.size(fs <, mode>). Les paramètres passés seront les suivants : « c : » et « used ». Attention, les fonctions ne sont pas toutes compatibles avec tous les systèmes d’exploitation surveillés. Des vérifications simples indépendantes des agents Zabbix peuvent être effectuées. On y accède en changeant le type (en haut à droite) dans la liste des « Items ».
- Type of information : la fonction nous retourne une valeur en KB. On utilisera un entier long (« integer-64bits »).
- Units : l’unité utilisée, pour le graphique et l’affichage Par défaut, la valeur retournée est en Kb. Si on la veut en Mb ou en Gb, il suffit juste d’indiquer l’unité appropriée dans la zone. Zabbix se chargera de la conversion.
- Use multiplier : pour multiplier la valeur retournée.
- Update interval : le taux de rafraîchissement. Attention à ne pas trop encombrer le réseau et les machines avec des taux de rafraîchissement élevés si ceux-ci ne sont pas nécessaires.
- Flexible interval : la surveillance peut avoir lieu uniquement à certains moments de la journée ou de la semaine.
- Keep history : le nombre de jours pendant lesquels les données seront conservées.
- Keep trends : le nombre de jours pendant lesquels les tendances seront conservées.
- Store value : la manière de stocker et de traîter la donnée : brute, différence par seconde, différence entre deux changements).
- Applications : catégorie du nouvel élément.
2.2.3 Exemple 2 : surveillance d’un fichier
Cet exemple est le même que le précédent, à une différence près : nous utiliserons la fonction vfs.file.size[fichier].
2.3 Les graphiques
Toujours dans la configuration, se placer dans l’outil « Graphs ». Il permet de créer un graphique personnalisé comportant une ou plusieurs informations. Cliquez sur le bouton « Create graph » pour accéder au formulaire de création. Donnez lui un nom (évocateur) ainsi qu’une dimension.
Paramétrez votre graphique selon vos besoins, puis dans « items », vous ajouterez les champs en cliquant sur le bouton « add ».
Dans la liste des « hosts », vous choisirez celui qui vous intéresse. En effet, il n’y a pas toujours les mêmes fonctionnalités en fonction du type de l’hôte. Selectionnez ensuite un champ à afficher. Pour terminer, paramétrez la couleur et les attribus du tracé. Vous pourrez ajouter d’autres champs sur un même graphique.
2.4 Les écrans
Ils vous permettent de paramétrer un affichage avec plusieurs éléments en aperçu. Par la suite, en cliquant sur le graphique, vous aurez accès à celui-ci dans sa taille originale. Un écran est une grille de graphiques, composée entièrement par l’administrateur. Ouvrez l’outil « Screens » puis cliquez sur le bouton « Create screen ». Vous n’aurez qu’à lui rentrer un nom (pertinent) et une dimension (en lignes et en colonnes). Ces dimensions pourront être changées plus tard.
Une fois l’écran créé, vous le verrez apparaître dans la liste. Cliquez sur « edit » dans la colonne « screen » tout à droite. Pour chaque case de votre écran, vous pourrez ajouter n’importe quel graphique pour le suivi en réglant son aspect (taille et emplacement). En changeant la « ressource », vous pouvez intégrer une donnée d’un autre type (texte, historique etc…).
2.5 Les Triggers
Comme dans les bases de données, ils ne se déclenchent que sur un événement précis. Zabbix dispose d’un ensemble de triggers déjà définis et il est possible d’en créer d’autres ou de modifier les existants.
Un trigger est défini par :
- son nom
- son évènement déclencheur
- son parent : le trigger ne se déclenche que si un autre c’est déclenché
- son niveau de sévérité
Pour définir un évènement, dans le formulaire de création de trigger, dans « Expression » cliquer sur le bouton « Insert ». L’expression est composée d’un élément (« Item », cf 2.2) et d’une condition (« Function ») avec une valeur dans la condition (« N »).
2.6 Les actions
Elles sont déclenchées sur condition(s), pour palier à un éventuel problème ou pour simplement prévenir une personne.
Une action est le regroupement :
- d’un évènement source déclencheur (trigger ou découverte)
- d’une ou plusieurs conditions
- de la procédure effectuée par l’action (envoi d’un message, commande à exécuter etc…).
Pour envoyer un message, sélectionnez l’utilisateur puis préparez le modèle de votre message. Pour une commande distante, tapez : <hote> :<commande> ou <groupe>#<commande>.
2.7 La découverte
L’outil « discovery » parcours le réseau à la recherche d’adresses ayant un port spécifié d’ouvert (similaire à nmap). Il faut donner une plage d’adresses à scanner, ainsi que les ports à tester et un délai de renouvellement de l’opération. Cette procédure peut parfois révéler des faiblesses sur certains serveurs qui ont des ports ouverts alors qu’il n’y a aucune raison de les laisser ouverts.
Chapitre 3 – Ressources supplémentaires
3.1 Création d’une nouvelle ressource sur l’agent
3.1.1 Le programme
Peu importe le type de programme, le langage (cela peut même être une simple ligne de commande) tant qu’il retourne une valeur (n’importe quel type). Attention cependant à veuiller à ce que le programme retourne toujours le même type de données.
3.1.2 Déclaration de la ressource
Elle doit être faite dans le fichier zabbix_agentd.conf, à la fin. La ressource est définie par un nom unique. Attention à bien choisir ce nom pour éviter toute confusion par la suite. Voici un exemple : UserParameter=nomDeMaRessource, programmeALancer.
Exemple de zabbix_agentd.conf :
Server=192.168.1.148
UserParameter=smart.hdd[*], C :TEST_DISK.pl $1
« smart.hdd » correspond au nom de la ressource, « [*] » indique qu’elle prend des paramètres et « C :TEST_DISK.pl $1 » est la commande à exécuter (où $1 est l’argument numéro 1 passé à la ressource).
3.1.3 Les paramètres
Sur beaucoup de programmes, on peut leur passer des arguments au lancement. Avec l’agent Zabbix, il est possible de passer les paramètres en statique directement dans la ligne de commande ou des paramètres dynamiques que le serveur va envoyer. Pour déclarer une ressource qui prend des paramètres, il faut ajouter [*] après le nom de la ressource. Les valeurs $1, $2, $3… représentent les différents arguments passés.
Une fois que vous avez ajouté votre nouvelle ressource, vous devez impérativement redémarrer l’agent Zabbix.
3.2 Création de la nouvelle ressource sur le serveur
Dans la section « configuration » puis dans la partie « Items », choisissez l’hôte ou le groupe concerné puis créez un nouvel item. Dans la clé, entrez le nom de la ressource que vous avez entré dans le fichier zabbix_agentd.conf puis mettez les éventuels arguments. Le reste du paramètrage se fait comme d’habitude.
La ressource est maintenant surveillée directement par le serveur. Attention à la fréquence de rafraîchissement, elle doit être adaptée puisque le traitement pour l’hôte peut parfois être lourd.
Le type est très important, puisqu’il défini le type de la colonne dans la base de données. Il servira aussi pour les divers traitements qui seront effectués avec la valeur, comme par exemple pour les graphiques.
Une donnée de type texte est beaucoup plus volumineuse à stocker, il faut donc au maximum essayer de stocker que les informations pertinentes et variables.
Chapitre 4-Taille d’un répertoire
4.1 Méthode
Il y a une fonctionnalité (vfs.fs.size) qui retourne la taille d’un répertoire donné, mais uniquement sous Linux. Sous Windows, nous aurons uniquement la taille du disque (ou l’espace libre).
Pour avoir juste la taille d’un répertoire, il faut définir soit-même une nouvelle ressource avec un programme personnalisé qui retournera la taille d’un répertoire donné. Il vaut mieux créer un programme qui prendra en argument l’emplacement du répertoire. Pourquoi ? Cela permettera d’avoir une ressource universelle pour n’importe quel répertoire de n’importe quelle machine surveillée.
4.2 Le programme
4.2.1 En PERL
Je vous propose un programme en PERL retournant la taille d’un répertoire donné. On peut effectuer cette tâche dans à peu près n’importe quel langage de programmation. Il vous faudra le module FileSys-DiskUsage que vous pourrez récupérer à l’adresse : http ://ppm.activestate.com/PPMPackages/zips/10xx-builds-only/Windows/. Téléchargez le bon zip puis décompressez-le. En ligne de commande, placez vous dans le répertoire dans lequel vous avez décompressé le module puis tapez la commande ppm install Filesys-DiskUsage.ppd pour installer le module dans PERL.
Ensuite, ce petit programme fera l’affaire :
# ! /usr/bin/perl
use strict ;
use Carp ;
use Filesys : :DiskUsage qw/du/ ;
my $i=1 ;
my $repertoire=$ARGV[0] ;
while($i<$#ARGV+1){ #permet de récupérer tous les arguments et donc les noms avec des espaces
$repertoire=$repertoire.’ ’.$#ARGV[$i] ;
$i=$i+1 ;
}
$size=du($repertoire) ;
print $size ; #retourne la valeur en octets
! ! Au nom des répertoires, le caractère « » (échappement en programmation) devra être remplacé par le « / ».
4.2.2 En Visual Basic
Tiré de : http ://www.zabbix.com/forum/showthread.php ?t=11591&highlight=directory+size
Dim oF, oFS, dirsize directory = WScript.Arguments(0)
Set objFS = CreateObject(“Scripting.FileSystemObject”)
set oF = oFS.GetFolder(directory) dirsize = oF.Size
Set WshShell = CreateObject(“wscript.Shell”)
commandstring=”c :zabbixzabbix_sender.exe -z ZBX_IP -s HOST_NAME -k tr_dir_size -o ” & dirsize
WshShell.Run commandstring,0 WScript.Quit
4.3 L’agent Zabbix
Il faut ajouter une nouvelle ressource dans l’agent Zabbix pour qu’il puisse exécuter le programme et récupérer la valeur. Dans le fichier zabbix_agentd.conf, on ajoutera la ligne suivante :
UserParameter=tailleRepertoire[*], C :taille_repertoire.pl $1
Vous pouvez bien entendu choisir un autre nom pour la ressource ou placer le script perl ailleurs dans l’arborescence.
Redémarrez ensuite l’agent pour activer la nouvelle ressource.
4.4 Le serveur Zabbix
Il faut pouvoir récupérer la ressource dans le serveur, pour cela, allez dans « Configuration », « Items » puis cliquez sur « Create Item ».
Paramétrez ensuite votre item à souhait.
Merci pour l’exemple de création d’Item personnalisé (chapitre 3).