Bonjour à tous!
Nous avons ouvert un nouvel ensemble pour le cours d' administrateur Linux mis à jour: tous les mêmes nouveaux enseignants, un programme dynamique et des discussions intéressantes. Eh bien, en même temps, nous partageons une note intéressante du cas réel de l'un des enseignants - Alexey Tsykunov .
Allons-y.

Défi
Vous devez configurer la surveillance de la charge sur les stockages de disques DELL MD36XX.
Il y a un problème - les étagères ne savent pas comment envoyer des données via snmp. Soit dit en passant, des problèmes similaires se retrouvent également dans les installations de stockage d'IBM, HP et d'autres fournisseurs.
L'environnement
Les fournisseurs eux-mêmes fournissent des logiciels clients. Les soi-disant StorageManager. Certains d'entre eux sont uniquement pour Windows, mais sont récemment apparus sous Linux. Dans mon cas, le logiciel a été installé sous Linux et inclut l'utilitaire de console SMcli. En utilisant SMcli, vous pouvez prendre des statistiques dans un fichier:
SMcli -n StorageName -S -quick -c "save storageArray performanceStats file=\\"/var/log/md36xx.stat\\";"
Et ça ressemble à ça
"Performance Monitor Statistics for Storage Array: StorageName - Date/Time: 1/17/18 9:37:04 PM - Polling interval in seconds: 5" "Objects","Total IOs","Read %","Primary Read Cache Hit %","Primary Write Cache Hit %","SSD Read Cache Hit %","Current MBs/sec","Maximum MBs/sec","Current IOs/sec","Ma ximum IOs/sec","Minimum IOs/sec","Average IOs/sec","Minimum MBs/sec","Average MBs/sec","Current IO Latency","Maximum IO Latency","Minimum IO Latency","Average IO Late ncy" "Capture Iteration: 1","","","","","","","","","","","","","","","","","" "Date/Time: 1/17/18 9:37:05 PM","","","","","","","","","","","","","","","","","" "Storage Array StorageName ","6396.0","52.0","64.6","100.0","0.0","31.2","31.2","1279.0","1279.0","1279.0","1279.0","31.2","31.2","-","-","-","-" "RAID Controller Module 0","4043.0","47.3","55.3","100.0","0.0","27.3","27.3","808.0","808.0","808.0","808.0","27.3","27.3","-","-","-","-" "RAID Controller Module 1","2353.0","60.0","77.3","100.0","0.0","3.9","3.9","470.0","470.0","470.0","470.0","3.9","3.9","-","-","-","-" "Disk Pool Disk_Pool_1","5181.0","59.6","69.3","100.0","0.0","29.1","29.1","1036.0","1036.0","1036.0","1036.0","29.1","29.1","-","-","-","-" "Disk Pool Disk_Pool_vps","1215.0","19.4","3.8","100.0","0.0","2.1","2.1","243.0","243.0","243.0","243.0","2.1","2.1","-","-","-","-" "Virtual Disk VPS1","645.0","1.6","30.0","100.0","0.0","0.9","0.9","129.0","129.0","129.0","129.0","0.9","0.9","1.7","1.7","1.7","1.7" ...
Options de décision
Ces informations peuvent être analysées et envoyées à zabbix, et il existe plusieurs options pour l'envoi
Agent Zabbix et UserParameter, dans lesquels vous pouvez peindre chacun des paramètres d'intérêt, par exemple:
UserParameter = dell.md.discovery, /path/script_discovery UserParameter = dell.md.totalio[*], /path/script2 $1 UserParameter = dell.md.currmb[*], /path/script3 $1
Zabbix_sender, qui permet d'envoyer tous les paramètres à la fois avec un appel de script. C'est l'option que j'ai choisie.
Paramètres dans zabbix
Dans zabbix, vous devez configurer un nouvel hôte et y créer une règle de découverte

Pressez-y un filtre:

Et ajoutez des prototypes d'articles

Voici plus en détail comment le prototype est prescrit:

Envoi vers Zabbix
Les données peuvent être envoyées via zabbix_sender -i <key_value_file>
Format de fichier:
HOST key value
Et comme valeur, vous pouvez passer json pour la découverte au format:
{ 'data' :[ {'{#MDDEV}': 'drive1'}, {'{#MDDEV}': 'drive1'}, ] }
Où {#MDDEV} est la macro à travers laquelle nous trouvons les noms de nos appareils / lecteurs à partir desquels nous allons prendre des statistiques.
L'algorithme total des actions est le suivant:
- nous supprimons les statistiques via SMcli , sauvegardons dans un fichier;
- analyser le fichier reçu;
- générer un fichier pour zabbix_sende r.
Tout cela peut être implémenté avec un script bash . Mais cela m'a semblé le moyen le plus simple d'implémenter un script Python, qui serait ensuite appelé depuis la couronne une fois par minute. Des difficultés ne sont apparues qu'avec le module d'envoi dans zabbix. Il a été installé sous 2.7 et 3.6, mais il n'a démarré que sous 3.6.
Le script peut être pris sur GitHub
Comme toujours, nous attendons des questions et des commentaires ici ou dans une leçon ouverte .