====== 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: * du contrôleur * du disque logique (a.k.a le RAID1, a.k.a /dev/sda) * des disques physiques qui forment le disque logique Donc au programme dans cet article: - Installation de l'utilitaire fourni par HP: **ssacli** - Rapide introduction à **ssacli** - 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/|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|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/|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|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 [parameter=value] is of format: [controller all|slot=#|serialnumber=#] [array all|] [physicaldrive all|allunassigned|[#:]#:#|[#:]#:#-[#:]#:#] [ssdphysicaldrive all|allunassigned|[#:]#:#|[#:]#:#-[#:]#:#] [logicaldrive all|#] [enclosure all|#:#|serialnumber=#] [licensekey all|] [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: * add * create * delete * diag * flash * heal * modify * remove * shorthand * show * target * rescan * version 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=, C.F. : [[https://www.zabbix.com/documentation/3.0/manual/config/items/userparameters|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 -p -k 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