Table des matières

Contrôleurs de Stockage HP

Sur les HP ProLiant DL585 G7 (discovery et atlantis) il y a un contrôleur de stockage intégré: HP Smart Array P410i. Proxmox VE est installé sur un RAID1 accessible via ce contrôleur de stockage.

Pour éviter de refaire une installation/configuration de Proxmox VE dans le rush le jour où la chance ne vous sourira plus, il est essentiel de monitorer l'état:

Donc au programme dans cet article:

  1. Installation de l'utilitaire fourni par HP: ssacli
  2. Rapide introduction à ssacli
  3. Le monitoring des contrôleurs avec Zabbix

A noter qu'il existe les outils de CCISS pour administrer les contrôleurs de stockage HP (certains de ces outils sont présents sur atlantis et discovery). http://cciss.sourceforge.net/

Installation de ssacli

HP Enterprise Software Delivery Repository

« The HPE Software Delivery Repository hosts yum, zypper, and apt repositories for Linux-related software packages. Much of this content is also available from various locations at hpe.com in iso or tgz format, but if you would prefer to use your Linux-native software configuration manager, you may subscribe your systems to some or all of these repositories for quick and easy access to the latest rpm/deb packages from HPE. »

http://downloads.linux.hpe.com/SDR/index.html

Pour résumer: HP fourni des paquets au format rpm et deb pour ses utilitaires Linux au sein de multiples dépôts. Le dépôt qui nous intéresse ici c'est le MCP (Management Component Pack). On peut y trouver notre utilitaire ssacli pour administrer les contrôleurs de stockage, mais aussi hponcfg qui sert à configurer l'iLO “en ligne” c'est à dire à chaud, sans avoir à redémarrer la machine.

Ajout du dépôt MCP et installation de l'utilitaire

Pour ajouter le dépôt MCP il suffit de suivre les instructions sur http://downloads.linux.hpe.com/SDR/project/mcp/

Sinon, si vous préférez le travail prémâché:

Pour Proxmox VE 5 (donc Debian Stretch):

root@atlantis:~# echo deb http://downloads.linux.hpe.com/SDR/repo/mcp stretch/current non-free > /etc/apt/sources.list.d/HP-mcp.list
root@atlantis:~# export http_proxy="http://192.168.102.61:82"
root@atlantis:~# curl http://downloads.linux.hpe.com/SDR/hpPublicKey1024.pub | apt-key add -
root@atlantis:~# curl http://downloads.linux.hpe.com/SDR/hpPublicKey2048.pub | apt-key add -
root@atlantis:~# curl http://downloads.linux.hpe.com/SDR/hpPublicKey2048_key1.pub | apt-key add -
root@atlantis:~# curl http://downloads.linux.hpe.com/SDR/hpePublicKey2048_key1.pub | apt-key add -
root@atlantis:~# apt update

N.B.: Il existe aussi un script fourni par HP pour ajouter des dépôts: http://downloads.linux.hpe.com/SDR/add_repo.sh. Vu qu'ici on ajoute un seul dépôt sur seulement deux machines le script n'a pas grand intérêt.

Il ne reste plus qu'à installer ssacli:

root@atlantis:~# apt install ssacli

Introduction à ssacli

Usage:

ssacli <target> <command> [parameter=value]

   <target> is of format:
      [controller all|slot=#|serialnumber=#]
      [array all|<id>]
      [physicaldrive all|allunassigned|[#:]#:#|[#:]#:#-[#:]#:#]
      [ssdphysicaldrive all|allunassigned|[#:]#:#|[#:]#:#-[#:]#:#]
      [logicaldrive all|#]
      [enclosure all|#:#|serialnumber=#]
      [licensekey all|<key>]
      [ssdinfo]
      [tapedrive all]
      Note 1: The #:#:# syntax is only needed for systems that
              specify port:box:bay. Other physical drive targeting
              schemes are box:bay and port:id.

Les commandes courantes sont:

Ici nous allons voir uniquement des exemples avec la commande “show” (je n'ai pas vraiment envie de supprimer un disque logique ou tenter de flasher le firmware du contrôleur sur atlantis juste pour faire une petite demo).

Exemples

Lister tous les contrôleurs de stockage présents sur la machine:

root@atlantis:~# ssacli ctrl all show

Smart Array P410i in Slot 0 (Embedded)    (sn: 500143802137BFD0)

N.B. 1: Ici comme “target” on a mis “ctrl all” c'est à dire “tous les contrôleurs”, mais on peut spécifier un contrôleur en particulier, par exemple en utilisant la target “ctrl slot=0” pour lister uniquement le 1er contrôleur. Vu que sur atlantis et discovery on a qu'un seul contrôleur dans les exemples suivant j'utiliserai “ctrl slot=0”.

N.B. 2: Il est possible d'augmenter la verbosité de la commande show en ajoutant un “detail” en argument.

Afficher l'intégralité de la configuration du contrôleur:

root@atlantis:~# ssacli ctrl slot=0 show config detail

Afficher l'état du contrôleur:

root@atlantis:~# ssacli ctrl all show status

Smart Array P410i in Slot 0 (Embedded)
   Controller Status: OK
   Cache Status: OK
   Battery/Capacitor Status: OK

Afficher l'état d'un array:

root@atlantis:~# ssacli ctrl slot=0 array A show detail


Smart Array P410i in Slot 0 (Embedded)
   Array: A
      Interface Type: SATA
      Unused Space: 0 MB (0.00%)
      Used Space: 1.82 TB (100.00%)
      Status: OK
      Array Type: Data
      Smart Path: disable

N.B. : La cible “ctrl slot=0 array A” correspond au 1er array du 1er contrôleur.

Afficher l'état d'un disque logique:

root@atlantis:~# ssacli ctrl slot=0 array A logicaldrive 1 show detail

Smart Array P410i in Slot 0 (Embedded)

   Array A

      Logical Drive: 1
         Size: 931.48 GB
         Fault Tolerance: 1
         Heads: 255
         Sectors Per Track: 32
         Cylinders: 65535
         Strip Size: 256 KB
         Full Stripe Size: 256 KB
         Status: OK
         Unrecoverable Media Errors: None
         Caching:  Enabled
         Unique Identifier: 600508B1001C8AD1C93A6ECDA901D4F7
         Disk Name: /dev/sda
         Mount Points: None
         Boot Volume: Primary
         Logical Drive Label: AADA37EA500143802137BFD069A6
         Mirror Group 1:
            physicaldrive 2I:1:7 (port 2I:box 1:bay 7, SATA HDD, 1 TB, OK)
         Mirror Group 2:
            physicaldrive 2I:1:8 (port 2I:box 1:bay 8, SATA HDD, 1 TB, OK)
         Drive Type: Data
         LD Acceleration Method: Controller Cache

N.B. 1: La cible “ctrl slot=0 array A logicaldrive 1” correspond au 1er disque logique du 1er array du 1er contrôleur.

N.B. 2: On voit bien que le 1er disque logique est composé de deux disques physiques en miroir (RAID 1). Ces disques sont branchés aux emplacements “2I:1:7” et “2I:1:8”.

Afficher l'état d'un disque physique:

root@atlantis:~# ssacli ctrl slot=0 array A physicaldrive 2I:1:8 show detail

Smart Array P410i in Slot 0 (Embedded)

   Array A

      physicaldrive 2I:1:8
         Port: 2I
         Box: 1
         Bay: 8
         Status: OK
         Drive Type: Data Drive
         Interface Type: SATA
         Size: 1 TB
         Drive exposed to OS: False
         Logical/Physical Block Size: 512/4096
         Rotational Speed: 7200
         Firmware Revision: 01.01H01
         Serial Number: JS1000621444PS
         WWID: 3000000000000007
         Model: ATA     WDC WD10JPLX-00M
         SATA NCQ Capable: True
         SATA NCQ Enabled: True
         Current Temperature (C): 24
         Maximum Temperature (C): 35
         PHY Count: 1
         PHY Transfer Rate: 3.0Gbps
         Sanitize Erase Supported: False
         Shingled Magnetic Recording Support: None

N.B. : La cible “ctrl slot=0 array A physicaldrive 2I:1:8” correspond au disque physique branché à l'emplacement “2I:1:8” sur 1er array du 1er contrôleur.

Monitoring du contrôleur avec Zabbix

Il nous reste à écrire des “UserParameters” (en gros des sondes Zabbix faites maison) pour récupérer les données pertinentes.

On ajoute donc nos UserParameters dans: /etc/zabbix/zabbix_agentd.conf.d/userparameter_hp_storage.conf

Timeout=10
UserParameter=hpstor.ctrl.status[*], sudo ssacli ctrl slot=$1 show status | grep -E '^\s{3}Controller\sStatus:.*$' | awk -F': ' '{print $$2}'
UserParameter=hpstor.ctrl.cache_status[*], sudo ssacli ctrl slot=$1 show status | grep -E '^\s{3}Cache\sStatus:.*$' | awk -F': ' '{print $$2}'
UserParameter=hpstor.ctrl.bat_cap_status[*], sudo ssacli ctrl slot=$1 show status | grep -E '^\s{3}Battery/Capacitor\sStatus:.*$' | awk -F ': ' '{print $$2}'
UserParameter=hpstor.array_status[*], sudo ssacli ctrl slot=$1 array $2 show status | grep -E '^\s{3}Array\s$2:.*$' | awk -F': ' '{print $$2}'
UserParameter=hpstor.logicaldrive_status[*], sudo ssacli ctrl slot=$1 array $2 logicaldrive $3 show status | grep -E '^\s{3}logicaldrive\s$3\s\(.*\):.*$' | awk -F': ' '{print $$2}'
UserParameter=hpstor.physicaldrive_status[*], sudo ssacli ctrl slot=$1 array $2 physicaldrive $3 show detail | grep -E '^\s{9}Status:.*$' | awk -F': ' '{print $$2}'
UserParameter=hpstor.physicaldrive_current_temp[*], sudo ssacli ctrl slot=$1 array $2 physicaldrive $3 show detail | grep -E '\s{6}Current\sTemperature\s\(C\):.*$' | awk -F': ' '{print $$2}'

Le format est le suivant: UserParameter=<key>,<command>

C.F. : https://www.zabbix.com/documentation/3.0/manual/config/items/userparameters

Sur Zabbix on aura donc notre “key” qui prendra pour valeur la sortie de notre “command”

La commande ssacli doit être lancée avec les droits admin, pour ça on utilise sudo ssacli et on ajoute /usr/sbin/ssacli aux commandes pouvant être lancées par l'utilisateur zabbix via la commande visudo

On ajoute un “Timeout=10” dans notre fichier de configuration Zabbix car ssacli peut prendre un certain temps avant de répondre. La valeur par défaut du Timeout est de 3 secondes.

Une fois notre fichier crée on a plus qu'à redémarrer l'agent zabbix sur la machine.

Pour tester nos UserParameters on va sur le serveur zabbix et on regarde si on reçoit bien des données avec la commande zabbix_get: (Avant de tester il faut installer le paquet zabbix-get sur le serveur zabbix)

Par exemple:

root@zabbix3:~# zabbix_get -s 192.168.102.161 -p 10050 -k hpstor.logicaldrive_status[0,A,1]
OK

Retourne l'état du 1er disque logique de l'array A du contrôleur 0 sur discovery: “OK”.

Le format pour zabbix_get est le suivant:

 zabbix_get -s <ip.de.la.machine> -p <port_d_ecoute_de_l_agent_zabbix> -k <cle_du_userparameter_a_tester> 

Les “paramètres flexibles” sont passés entre crochets. Ici on a “[0,A,1]” qui vont remplacer respectivement $1,$2 et $3 dans notre commande au moment de l’exécution:

sudo ssacli ctrl slot=$1 array $2 logicaldrive $3 show status | grep -E '^\s{3}logicaldrive\s$3\s\(.*\):.*$' | awk -F': ' '{print $$2}'

Devient alors:

sudo ssacli ctrl slot=0 array A logicaldrive 1 show status | grep -E '^\s{3}logicaldrive\s1\s\(.*\):.*$' | awk -F': ' '{print $2}'

TODO: La configuration du serveur zabbix à proprement parler. C.F. : Formation Zabbix/Monitoring