Vor mir steht ein Dell Server mit Linux darauf welcher ins Monitoring aufgenommen werden soll. Die üblichen Verdächtigen wie CPU, Arbeitsspeicher, Netzwerk-, Platten- und Systemlast habe ich. Die laufenden Dienste sowieso. Mir fehlt nur noch der Status vom RAID. Also bin ich auf die Suche gegangen. Mit vier Schritten zum Erfolg:
1. Verbaute Hardware ermitteln
Ein lspci verrät schon mal die erste Richtung was hier verbaut sein soll:
00:00.0 Host bridge: Intel Corporation Skylake Host Bridge/DRAM Registers (rev 07) 00:01.0 PCI bridge: Intel Corporation Skylake PCIe Controller (x16) (rev 07) 00:01.1 PCI bridge: Intel Corporation Skylake PCIe Controller (x8) (rev 07) 00:14.0 USB controller: Intel Corporation Sunrise Point-H USB 3.0 xHCI Controller (rev 31) 00:14.2 Signal processing controller: Intel Corporation Sunrise Point-H Thermal subsystem (rev 31) 00:16.0 Communication controller: Intel Corporation Sunrise Point-H CSME HECI #1 (rev 31) 00:16.1 Communication controller: Intel Corporation Sunrise Point-H CSME HECI #2 (rev 31) 00:17.0 SATA controller: Intel Corporation Sunrise Point-H SATA controller [AHCI mode] (rev 31) 00:1d.0 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #9 (rev f1) 00:1d.2 PCI bridge: Intel Corporation Sunrise Point-H PCI Express Root Port #11 (rev f1) 00:1f.0 ISA bridge: Intel Corporation Sunrise Point-H LPC Controller (rev 31) 00:1f.2 Memory controller: Intel Corporation Sunrise Point-H PMC (rev 31) 00:1f.4 SMBus: Intel Corporation Sunrise Point-H SMBus (rev 31) 02:00.0 RAID bus controller: LSI Logic / Symbios Logic MegaRAID SAS-3 3108 [Invader] (rev 02) 03:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe 03:00.1 Ethernet controller: Broadcom Corporation NetXtreme BCM5720 Gigabit Ethernet PCIe 04:00.0 PCI bridge: Renesas Technology Corp. SH7758 PCIe Switch [PS] 05:00.0 PCI bridge: Renesas Technology Corp. SH7758 PCIe Switch [PS] 06:00.0 PCI bridge: Renesas Technology Corp. SH7758 PCIe-PCI Bridge [PPB] 07:00.0 VGA compatible controller: Matrox Electronics Systems Ltd. G200eR2 (rev 01)
Aha, ein LSI MegaRAID. Also mal wieder die Suchmaschine des Vertrauens bemüht und nachgeschaut ob es irgendwas gibt zum Thema „Nagios MegaRAID“. Da war nichts dabei was wirklich gefallen hätte. Meist tausende Abhängigkeiten oder dieser Controller fehlte schlichtweg in der Liste der unterstützen Modelle. Jedoch bin auf der Suche nach einem passenden Check der LSI MegaRAID Storcli begegnet: https://www.broadcom.com/products/storage/raid-controllers/megaraid-sas-9271-8i#downloads. Das klang doch mal spannend. Fix installiert und aufgerufen mittels /opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -aALL -nolog (gekürzte Ausgabe):
# /opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -aALL -nolog ============================================================================== Adapter: 0 Product Name: PERC H730 Adapter Memory: 1024MB BBU: Present Serial No: 1234567 ============================================================================== Number of DISK GROUPS: 1 DISK GROUP: 0 Number of Spans: 1 SPAN: 0 Span Reference: 0x00 Number of PDs: 2 Number of VDs: 1 Number of dedicated Hotspares: 0 Virtual Drive Information: Virtual Drive: 0 (Target Id: 0) Name : RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0 Size : 931.0 GB Sector Size : 512 Is VD emulated : No Mirror Data : 931.0 GB State : Optimal Strip Size : 64 KB Number Of Drives : 2 **snip**
Ok, bei Dell heißt der wohl PERC H730 Adapter. Soll auch recht sein 😉 Aber mit der Ausgabe lässt sich doch mal was anfragen. Der Status vom RAID wird etwas weiter unten als „Optimal“ angegeben. Ich hab nur einen RAID-Verbund, also fix diese Ausgabe durch grep gejagt und mit einer kurzen, passenden Statusmeldung versehen.
2. NRPE command erstellen
Da dieser Server via NRPE geprüft wird also fix die nrpe.cfg um folgende Zeile erweitert:
command[check_megaraid]=[ $(echo $(sudo /opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -aALL -nolog | grep "^State" | cut -d: -f2)) == "Optimal" ] && (echo "RAID Status Optimal"; exit 0) || (echo "RAID Problem"; exit 2)
3. Via sudo die passenden Rechte geben
NRPE läuft bei mir unter der User-Kennung nagios. MegaCLI lässt sich aber nur via root wirklich sinnig aufrufen Also per sudo aufrufen und dazu noch via visudo folgende Zeile eingefügt:
nagios ALL=(ALL) NOPASSWD: /opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -aALL -nolog
4. Testen, einbauen und fertig
Ein erster Check via Konsole vom Monitoring-Server aus:
# /usr/lib/nagios/plugins/check_nrpe -H 10.16.23.61 -c check_megaraid RAID Status Optimal
Sieht gut aus! Also noch fix ins eigentliche Monitoring eingebaut – hier ist es egal ob Nagios, Icinga, Shinken oder was auch immer verwendet wird: Solange es Naigos-Checks via NRPE prüfen kann sollte sich die Prüfung des LSI MegaRAIDs leicht einfügen lassen. So sieht es dann final bei mir in Icinga2 aus:
Einfach, schlicht, funktionell. Für meine Zwecke völlig ausreichend. Wie dieses Beispiel zeigt geht es oftmals auch ohne extra CheckCommand welches noch vorher in bash, Python oder was auch immer erstellt hätte werden müssen. Das spart Zeit.
Und morgen ist noch der IPMI dran um den allgemeinen Systemstatus zu ermitteln.
command[check_megaraid]=[ $(echo $(sudo /opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -aALL -nolog | grep „^State“ | cut -d: -f2)) == „Optimal“ ] && (echo „RAID Status Optimal“; exit 0) || (echo „RAID Problem“; exit 2)
Liefert: RAID Problem.
Direktes Ausführen auf der Console:
[ $(echo $(sudo /usr/sbin/megacli -CfgDsply -aALL -nolog | grep „^State“ | cut -d: -f2)) == „Optimal“ ] && (echo „RAID Status Optimal“; exit 0) || (echo „RAID Problem“; exit 2)
-bash: [: too many arguments
RAID Problem
Hallo Ralf.
Was erhältst Du für eine Ausgabe wenn Du
/opt/MegaRAID/MegaCli/MegaCli64 -CfgDsply -aALL -nolog
in der Konsole direkt ausführst?
too many arguments würde darauf deuten, dass da was anderes als das erwartete Optimal zurück kommt.
This problem could be solved just by wrapping first command in [].
The final code is: command[check_megaraid]=[[ $(echo $(sudo /opt/MegaRAID/storcli/storcli64 -CfgDsply -aALL -nolog | grep „^State“ | cut -d: -f2)) == „Optimal“ ]] && (echo „RAID Status Optimal“; exit 0) || (echo „RAID Problem“; exit 2)