zabbix-check-smart: S.M.A.R.T. HDD Monitoring mit Zabbix
Ich setze schon seit vielen Jahren beruflich sowie privat beim Überwachen von Servern auf Zabbix. In diesem Zusammenhang musste ich mich auch das erste mal richtig mit Bash beschäftigen um diverse Skripts zu schreiben, die Dinge überwachen die Zabbix von Haus aus nicht mitbringt. Da es bei einer größeren Infrastruktur allerdings nervigen werden kann, sowas immer von Hand auf die Server zu legen, habe ich mich irgendwann entschieden Pakete daraus zu bauen. Die Skripts, bzw. Pakete, die auch allen anderen von nutzen sein können, werden ich und mein ehemaliger Kollege Christoph auch öffentlich in einem Repository zur Verfügung stellen. Da wir beide meist auch noch ältere Server, mit älteren Debian oder Ubuntu Versionen verwalten, sind die meisten Skripts auch darauf nutzbar. Wenn ihr Bugs bemerkt oder Fragen habt, kontaktiert einfach denjenigen von uns, welcher das Pakete erstellt hat. Die XML Templates zum importieren ins Frontend liegen dabei immer unter /usr/share/doc/{package_name}/
So nun zum eigentlichen Teil, dem Paket um S.M.A.R.T. Werte (RAW und VALUE) eines Servers auszulesen und diese in Zabbix darstellen zu lassen. Geschrieben habe ich es in Python, mit ein paar Hilfestellungen eines Kollegen, da dies so zu sagen meine ersten Gehversuche in Python sind. Bestehen tut das ganze aus zwei Skripten, einem Discovery Skript, welches die verbauten Platten für die Discovery Rule im Frontend erfasst und dem Skript welches der Agent aufruft und die Werte abzufragen.
Installieren könnt ihr das Paket, nachdem ihr das Repository hinzugefügt habt, via:
apt-get install zabbix-check-smart
Bei der Installation wird direkt geschaut ob SMART auch auf den Platten aktiviert ist, wenn nicht wird es aktiviert. Danach einfach das Template zum Frontend hinzufügen. In diesem sind ein paar Abfragen integriert, die mir jetzt erstmal wichtig waren. Ihr könnt im Grunde jeden SMART Wert damit, als RAW_VALUE oder VALUE abfragen. Will man RAW_VALUE Werte bekommen muss der Key z.B. so aussehen:
smart.raw[{#HDD},Current_Pending_Sector]
Für VALUE Werte z.B. so:
smart.value[{#HDD},Raw_Read_Error_Rate]