Surveillance de l’état de disques durs avec SMART et ZABBIX

Surveillance de l'état de disques durs avec SMART et ZABBIX 1

Le document ci-dessous est la troisième 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 troisième chapitre met en place des outils de la qualité des disques de stockage.

Pour cela, il s’agit de l’outil opensource ZABBIX.

La version PDF du document est disponible ici

Chapitre 1
Introduction

1.1 Présentation

Le SMART (Self-Monitoring, Analysis and Reporting Technology) est une fonctionnalité du disque dur accessible depuis le système d’exploitation. Cette fonctionnalité donne diverses valeurs de suivi du disque dur de la machine (température, taux d’erreurs, temps d’accès etc…). Trois valeurs sont retournées:

  • La valeur actuelle mesurée sur le disque;
  • La valeur optimale de référence du constructeur;
  • Le seuil critique.

Le suivi de ces données permet de prévenir les pannes des disques durs (environ 60%). Avoir un aperçu et des alertes sur certains seuils n’évitera pas les défaillances mais permettra de les prévenir et de savoir à quel moment un disque dur entre en fin de vie. Les valeurs ne sont pas toutes nécessaires pour déterminer l’état d’un disque dur. Seulement, certaines sont fournies par des capteurs internes au disque (température, distance de laquelle le disque est déplacé par rapport à son axe de rotation).

Voir: http://en.wikipedia.org/wiki/S.M.A.R.T

On note qu’un ensemble de codes retournant des valeurs est commun à tous les constructeurs, mais qu’il y a aussi quelques valeurs qui ne sont utilisées que par certains constructeurs.

Il faut aussi pouvoir avoir un accès direct au disque dur en question dans le système d’exploitation. Le cas de disques durs en RAID sur une baie de stockage peut poser quelques problèmes.

1.2 Récupération des données

Tout l’ensemble des données du SMART peuvent être récupérées avec le logiciel smartmontools (http://smartmontools.sourceforge.net/) en tapant la commande smartctl –all /dev/sda (pour le premier disque dur SATA ou SCSI, sous Windows ou Linux).

Les résultats contiennent toutes les informations statiques du disque (nom, modèle etc…) et aussi toutes les données de tous les champs du SMART (valeur, seuil, optimale). Une consultation régulière de ces données est conseillée et la surveillance (automatique) est relativement aisée puisqu’il s’agit d’une comparaison entre la valeur et le seuil. Passé ce seuil, il faut déclencher une alerte.

1.3 SmartMonTools

http://smartmontools.sourceforge.net/

Ce petit utilitaire est disponible pour tous les systèmes d’exploitation. Dans la section « Downloads » du site, trouvez dans le bas de la page le lien qui permet de télécharger la version pour Windows (dans la 6ème méthode). Téléchargez l’exécutable plus lancez-le. Acceptez le contrat de licence GPL, choisissez vos options d’installation (ne décochez pas « add install dir to PATH » auquel cas vous aurez plus de difficultés à exécuter la commande). Sélectionnez ensuite le répertoire cible pour l’installation puis cliquez sur suivant pour lancer l’installation. Une fois terminée, vous pourrez avoir (entre autres) la commande smartctl dans une fenêtre de ligne de commandes (démarrer, exécuter, cmd).


Chapitre 2
Récupération des données

Smartmontools retourne un ensemble de valeurs assez conséquent, difficile à exploiter directement.

2.1 Tri des données

Document: attributs_smart.pdf

Pour chaque numéro, correspond un nom et la description du champ. Tous les champs ne sont pas forcément à surveiller. D’autre par contre sont jugés critiques. La sélection de ces champs se fait en fonction du besoin du gérant et de l’utilisation des disques.

2.2 Exploitation des données

Pour chaque champ, il est utile de connaitre la valeur mais tout aussi utile de récupérer les données constructeur afin d’avoir une base pour la comparaison. Attention, pour certains champs plus la valeur est importante mieux c’est, mais pour d’autres champs c’est l’inverse… Il faut donc bien prendre garde à cette subtilité lors que l’écriture de triggers

2.3 Présentation de PERL

PERL est un langage de programmation interprété, il n’a pas besoin d’être compilé mais il nécessite un interpréteur capable d’exécuter le programme. C’est un langage multiplateformes (Linux, Windows, MacOS etc…) qui a été créé pour faciliter principalement l’accès aux fichiers. La lecture/écriture des fichiers est indépendante du système (hormis le chemin d’accès) et permet une grande liberté au programmeur pour effectuer diverses opérations sur les fichiers.

Ce langage est aussi très utilisé en technologies web pour les scripts CGI.

2.4 Le script PERL smart.pl

Ce script a été écrit pour permettre la récupération d’une seule donnée dont les références sont passées en paramètres (disque, champ et type). Voiçi la syntaxe pour utiliser ce script:

smart.pl disque=/dev/<id du disque> attribut=<numero d’attribut> <valeur, seuil, recommande>

Une valeur numérique est alors retournée.

Il faut qu’il y ait un interprêteur PERL installé ainsi que le programme smartmontools. Le script a été adapté pour fonctionner sous Windows, Linux ou tout autre Unix. Attention, il doit être exécuté avec les droits d’administrateur (root sous Linux) pour avoir l’autorisation du système d’exploitation pour consulter le SMART.

2.5 Le script PERL TEST_DISK.pl

C’est une reprise de smart.pl dans laquelle a été intégrée une batterie de tests. Une liste de champs à tester ainsi que la comparaison par rapport au seuil (plus grande ou plus petite). Une comparaison entre la valeur du champ et le seuil est effectée. Si tout va bien, le programme retourne 0, en cas d’erreur, il renvoie le numéro du champ pour lequel la valeur du seuil a été atteinte.

Pour ajouter un champ à surveiller, éditez le fichier TEST_DISK.pl et dans la liste des champs, ajoutez le numéro à surveiller à la fin (avant la parenthèse fermante), séparé du précédent par une virgule. Ajoutez aussi dans la liste des signes la comparaison à effectuer avec le seuil donné par le constructeur pour ce champ (est-ce que la valeur doit être plus grande ou plus petite que le champ?). Mettez le signe entre guillemets simples (’), séparé du précédent par une virgule. Vous définirez aussi une taille pour le fichier de logs dans la variable $nblogs.


Chapitre 3
Surveillance du disque

Il devient rapidement fastidieux de devoir faire des triggers pour contrôler tous les champs du SMART d’un disque dur. Le but est de simplifier au maximum pour n’avoir que le résultat suivant: erreur critique ou non.

Pour cela, on établit une liste des champs critiques (le 1, 5, 188, 196, 197, 198 et le 220), puis on compare la valeur avec le seuil. Si une des valeurs a atteind le seuil, il y a une action critique de déclenchée par le trigger de Zabbix. Le programme sur la machine doit donc renvoyer vrai ou faux en fonction de l’état de plusieurs paramètres du disque (0 si tout va bien, ou sinon le numéro du champ en cas d’erreur critique).

Ce script utilise le programme vu précédemment qui permet de retourner une valeur pour une donnée. Seulement, pour une question d’optimisation, la commande smartctl n’est exécutée qu’une fois pour toutes les données à rechercher.

Tous les attributs du SMART sont journalisés en local sur la machine, durant les 10 derniers contrôles dans des fichiers textes. En cas de défaillance, on peut consulter les derniers logs des champs que l’on a choisi de surveiller.

3.1 Ajouter des champs à surveiller

Dans le fichier TEST_DISK.pl, éditer les premières lignes après l’entête pour définir les champs à surveiller ainsi que les comparaisons à effectuer entre la valeur et le seuil donné par le constructeur.

Vous trouverez une liste des champs principaux dans le fichier attributs_smart.pdf.

3.2 Choisir la taille du journal

Le journal est stocké dans le fichier smart.log. Le programme stocke les dernières valeurs relevées, ce nombre est défini dans le fichier TEST_DISK.pl, au niveau de la variable $nb_logs.

3.3 Récupération dans Zabbix

Pour cela, on va définir le script TEST_DISK.pl comme une nouvelle ressource de l’agent Zabbix (cf 3.1 dans Outil de monitoring: Zabbix).

Il faut aussi récupérer la ressource dans le serveur Zabbix comme expliqué dans le dossier « Outil de monitoring: Zabbix » à la section 3.3.

3.4 Déploiement

Pour pouvoir déployer au mieux l’ensemble des outils nécessaires à la surveillance des disques, des scripts batch et PERL ont été écrits pour Windows. Lancez le batch adapté à votre système (32 ou 64 bits), suivez les deux installations (interpréteur PERL et smartmontools) puis le programme copiera les fichiers nécessaires et ajoutera l’entrée dans zabbix_agentd.conf sous le nom de smart.hdd avec en paramètre l’ID du disque (/dev/sda par exemple).

3.5 Déclencheurs et actions

3.5.1 Les triggers

Surveiller le disque est une chose, déclencher les actions au moment où le disque commence à faiblir est une autre. Grâce aux triggers de Zabbix, nous pourrons programmer des actions en fonction de l’événement.

Créez un nouveau trigger (« create trigger »), donnez lui un nom puis dans « expression » cliquez sur « insert ».

Surveillance de l'état de disques durs avec SMART et ZABBIX 2

Choisissez l’item correspondant avec le bouton select. Dans « function », on pourra seulement détecter un changement (valeur autre que 0, comme dans l’exemple) ou alors tester si le programme retourne une valeur du smart précise (dans ce cas, on utilise la fonction « last value = N »).

3.5.2 Les actions

Un trigger déclenche un évènement interne, mais cet événement n’engendre aucune action par défaut. On peut définir des actions manuellement que ce soit l’exécution d’un script ou l’envoi d’un mail à l’administrateur.

Surveillance de l'état de disques durs avec SMART et ZABBIX 4

Dans « actions », créez une nouvelle action (« create action »), donnez lui un nom puis une source d’événement déclencheur (dans notre cas « trigger »). Le reste de l’expression demeure relativement simple à comprendre. N’oubliez pas de l’ajouter!

Dans « operations », sélectionnez « new » puis remplissez les champs en fonction de l’action à mener. Pour exécuter une commande sur le host, utilisez la syntaxe suivante:

<host>:<commande>

A propos Olivier Olejniczak

Cofondateur de SynerGeek.fr. Passionné d'informatique, je m'intéresse plus particulièrement aux technologies de virtualisation et de stockage. J'apprécie la liberté et la quasi-absence de frontières à mon imagination qu'offre l'OpenSource et Linux. Professionnellement, je travaille exclusivement avec les outils Microsoft. Les pieds bien sur terre et ancrés dans le quotidien de l'entreprise, j'aime faire partager mes découvertes et contribuer à un meilleur usage des technologies. Vous aussi, rejoignez-nous sur Synergeek et partagez votre expérience!

Je vous propose également...

La surveillance américaine expliquée aux patates 5

La surveillance américaine expliquée aux patates

L’affaire Snowden n’est pas prête d’être étouffée… Quelle bombe !! Et nos dirigeants s’offusquent maintenant …

supervision informatique

Installer Zabbix avec une seule ligne de commande sous CentOS !

Mathieu et moi-même avons publié sur ce blog de nombreux articles sur l’outil de supervision …

4 commentaires

  1. OU BIEN IL FAU L’ecrire

  2. bonjour
    je travail sur un projet tel que dit ce tutoriel j’aimerais savoir ou trouver ces différents scripts cela me serais très utile
    merci d’avance.

  3. Bonjour,

    Ou trouve t’on les scripts PERL prévu à cet effet?

    Impossible de s’enregistrer sur wordpress, après réception mail pour génération du mot de passe, j’ai un message d’erreur :

    “Votre lien de réinitialisation de mot de passe semble ne pas être valide. Veuillez demander un nouveau lien ci-dessous.”

    J’ai retenter plusieurs fois, mais le lien ne fonctionne pas.

    Merci de votre aide