SMART Attributes Monitoring Plugin
Das Smart Attributes Monitoring Plugin ermöglicht die Überwachung der Smart-Werte von SSDs und Festplatten. Das Plugin ist in der Script-Sprache Perl verfasst und verwendet für die Abfrage der Smart-Werte smartctl. Das Plugin ist notwendig, da die Interpretation von SMART Attributen nicht standardisiert ist und jeder Hersteller eigene Definitionen für die Interpretation der Attribute festlegt. Das Plugin bietet die Möglichkeit diese Definitionen abzubilden und dadurch SSDs bzw. HDDs richtig zu überwachen.
Aktuelle Version
Die aktuelle Version des check_smart_attributes Plugins finden Sie auf GitHub:
Funktionen
In der README des Plugins finden Sie eine detaillierte Auflistung, welche Komponenten überwacht werden:
Vorraussetzungen
Die Installation der Voraussetzungen wird im kommenden Abschnitt näher erläutert:
- Für das zu überwachende Device
- Das überwachte Device muss sich in der lokalen Smart-Datenbank (check_smartdb.json) befinden
- Das Plugin beendet sich mit der Ausgabe Error: device was not found in smartdb JSON file., falls sich das Device nicht in der JSON-Datenbank befindet.
- Um neue Devices hinzuzufügen, muss in der JSON-Datenbank definiert werden, welcher Wert (RAW_VALUE oder NORMALIZED_VALUE) für ein Smart-Attribut gültig ist. Für Intel SSDs befindet sich diese Zuordnung in der jeweiligen Spezifikation der SSDs.
- Am überwachten Server
- Am Icinga-Server
- Kommando-Definition
- Service-Definition
Beispiel-Ausgaben des Plugins
:~$ sudo ./check_smart_attributes -d /dev/sda -d /dev/sdc -dbj ./check_smartdb.json Critical (sda, sdc) [sdc_Raw_Read_Error_Rate = Critical][sdc_Reallocated_Sector_Ct = Critical][sdc_UDMA_CRC_Error_Count = Critical][sdc_ATA_Error_Count = Critical] [sda_CRC_Error_Count = Warning]|sda_Media_Wearout_Indicator=097;16;6 sda_Host_Writes_32MiB=517485 sda_Host_Reads_32MiB=395618 sdc_Temperature_Celsius=40
Installation
Für die Installation wird die Plugin-Datei in das Verzeichnis /usr/lib/nagios/plugins
kopiert.
Die Lookup-JSON-Datei kommt nach /etc/nagios-plugins/config/.
:~$ git clone https://github.com/thomas-krenn/check_smart_attributes.git Cloning into 'check_smart_attributes'... :~$ cd check_smart_attributes/ :~$ sudo cp check_smart_attributes /usr/lib/nagios/plugins/ :~$ sudo cp check_smartdb.json /etc/nagios-plugins/config/
Die perl Bibliothek Config::JSON wird zum auslesen der smartdb im JSON-Format benötigt:
:~$ sudo apt-get install libconfig-json-perl
Das Kommandozeilentool smartctl wird über das Paket smartmontools installiert:
:~$ sudo apt-get install smartmontools
Konfiguration
Das Plugin eignet sich für die Smart-Überwachung eines Remote-Servers über NRPE, als auch für die Überwachung des lokalen Host. Jeweils muss am zu überwachenden System das check_smart_attributes Plugin installiert werden.
Über NRPE
Am Icinga Server
Beim Anlegen der Host-Definition wird das Kommando definiert, das via NRPE ausgeführt wird. Die Parameter selbst werden am zu überwachenden Host angegeben.
define service { service_description smart_attributes-nrpe display_name SMART attributes use generic-service host_name test check_command check_nrpe_1arg!check_smart_attributes }
Am Icinga 2 Server
Die Konfiguration des SMART Attributes Monitoring Plugin über NRPE erfolgt an einem Icinga 2 Host wie nachfolgend aufgeführt.
Kommando Definition Legen Sie z.B. im Unterverzeichnis commands des Icinga 2 Konfigurationsverzeichnisses, bei Ubuntu /etc/icinga2/conf.d, eine neue Datei mit der Bezeichnung smart-attributes.conf mit nachfolgendem Inhalt an.
object CheckCommand "nrpe-smart" { import "plugin-check-command" command = [PluginContribDir + "/check_nrpe" ] arguments = { "-H" = "$address$" "-c" = "$nrpe_smart$" } }
Apply Service Regel Definition
Es wird nun eine sogenannte Apply Rule im Icinga 2 Konfigurationsverzeichnis angelegt, damit wird bei einem Host mit entsprechend gesetztem Parameter dieser Servicecheck automatisch angefügt. Erstellen Sie dazu unterhalb des Icinga 2 Konfigurationsverzeichnisses den Ordner services und legen dort eine neue Datei mit der Bezeichnung "smart-attributes.conf" an.
Diese neue Konfigurationsdatei enthält folgendes Kommando:
apply Service "check-nrpe-smart" { import "generic-service" check_command = "nrpe-smart" assign where host.vars.nrpe_smart }
Der Ausdruck assign where host.vars.nrpe_smart bedeutet, wenn ein überwachter Host einen Parameter vars.nrpe_smart mit NRPE-Parameter enthält, wird automatisch der Servicecheck "check-nrpe-smart" über NRPE auf dem Server ausgeführt.
Host Definition Ergänzen Sie in der Host-Konfiguration die Zeile vars.nrpe_smart.
object Host "Testserver" { import "generic-host" address = "<IP-Adresse>" vars.nrpe_smart = "check_smart_attributes" }
Am überwachten Server
Damit der Benutzer nagios das Kommandozeilenwerkzeug mit sudo ohne Eingabe eines Passworts ausführen kann, muss folgende sudoers-Konfiguration definiert werden:
:~$ sudo vi /etc/sudoers.d/check_smart_attributes nagios ALL=(root)NOPASSWD:/usr/sbin/smartctl :~$ sudo chmod 440 /etc/sudoers.d/check_smart_attributes
Der folgende Test darf keine Passwort-Eingabe verlangen:
:~$ sudo su nagios --shell /bin/bash :~$ sudo smartctl -V smartctl 5.41 2011-06-09 r3365 [x86_64-linux-3.2.0-48-generic] (local build) Copyright (C) 2002-11 by Bruce Allen, http://smartmontools.sourceforge.net [...]
Eine NRPE-Konfigurations-Datei spezifiziert, welcher Check ausgeführt wird, wenn das Kommando check_smart_attributes aufgerufen wird. Dieses Kommando muss mit dem Parameter auf Icinga-Server-Seite in der Host-Definition übereinstimmen:
:~$ sudo vi /etc/nagios/nrpe.d/smart.cfg command[check_smart_attributes]=/usr/lib/nagios/plugins/check_smart_attributes -d /dev/sda -dbj /etc/nagios-plugins/config/check_smartdb.json
Achtung: Die angegeben smartdb JSON Datei muss vom Benutzer nagios gelesen werden können.
:~$ sudo service nagios-nrpe-server restart
Auf Seiten des Icinga-Servers kann getestet werden, ob der Check funktioniert:
:~$ /usr/lib/nagios/plugins/check_nrpe -H 10.0.0.2 -c check_smart_attributes Critical (sda) [sda_CRC_Error_Count = Critical]|sda_Media_Wearout_Indicator=097;16;6 sda_Host_Writes_32MiB=517400 sda_Host_Reads_32MiB=395557
Lokal
Eine lokale Konfiguration ist dann sinnvoll, wenn die Smart-Werte vom Icinga- bzw. Icinga 2-Server selbst überwacht werden sollen. Voraussetzungen für eine lokale Installation sind die oben beschriebenen Schritte zur Installation des Plugins, des Perl-Moduls und smartctl sowie die sudo-Konfiguration für den nagios User.
Icinga
Eine lokale Konfiguration des LSI RAID Monitoring Plugins unter Icinga erfolgt wie nachfolgend dargestellt.
Im ersten Schritt wird eine Icinga Kommando-Definition erstellt:
define command { command_name check_smart command_line /usr/lib/nagios/plugins/check_smart_attributes -d $ARG1$ -dbj /etc/nagios-plugins/config/check_smartdb.json }
Eine Service-Definition kann dann dieses Kommando benutzen:
define service{ service_description SMART attributes display_name SMART attributes use generic-service host_name localhost check_command check_smart!/dev/sda }
Icinga 2
Eine lokale Konfiguration unter Icinga 2 gelingt wie nachfolgend dargestellt.
Kommando Definition Legen Sie z.B. im Unterverzeichnis commands des Icinga 2 Konfigurationsverzeichnisses, bei Ubuntu /etc/icinga2/conf.d, eine neue Datei mit der Bezeichnung smart-attributes.conf mit nachfolgendem Inhalt an.
object CheckCommand "smart-attributes" { import "plugin-check-command" command = [ PluginDir + "/check_smart_attributes" ] arguments = { "-dbj" = { required = true value = "$smart_attributes_config_path$" description = "Path to the smart attributes config file (e.g. check_smartdb.json)" } "-d" = { required = true value = "$smart_attributes_device$" description = "Insert the device name (e.g. /dev/sda) to monitor" } } }
Apply Service Regel Definition
Es wird nun eine sogenannte Apply Rule im Icinga 2 Konfigurationsverzeichnis angelegt, damit wird bei einem Host mit entsprechend gesetztem Parameter dieser Servicecheck automatisch angefügt. Erstellen Sie dazu unterhalb des Icinga 2 Konfigurationsverzeichnisses den Ordner services und legen dort eine neue Datei mit der Bezeichnung "smart-attributes.conf" an.
Diese neue Konfigurationsdatei enthält folgendes Kommando:
apply Service "check-smart-attributes" { import "generic-service" check_command = "smart-attributes" assign where host.vars.smart_attributes_device }
Der Ausdruck assign where host.vars.smart_attributes_device bedeutet, wenn ein überwachter Host einen Parameter vars.smart_attributes_device mit einem Mountpoint, z.B. "/dev/sda, enthält, wird automatisch der Servicecheck "check-smart-attributes" lokal auf dem Server ausgeführt.
Host Definition Ergänzen Sie in der Host-Konfigurationsdatei hosts.conf des lokalen Icinga 2 Servers die Zeile vars.smart_attributes_device.
object Host NodeName { [...] vars.smart_attributes_device = "/dev/sda" vars.smart_attributes_config_path = "/etc/nagios-plugins/config/check_smartdb.json" }
Konfigurationsbeispiele
Dieser Abschnitt zeigt die Konfiguration des SMART Plugins an Servern mit installierten Hardware RAID Controllern von Adaptec und Avago.
Adaptec RAID Controller
Die Konfiguration des SMART Plugins in Verbindung mit Adaptec RAID Controllern unterscheidet sich in den Devicenamen. Festplatten und SSDs angeschlossen an Adaptec Controller werden nicht durch /dev/sdX bezeichnet sondern durch /dev/sgX.
Die genauen Bezeichnungen lassen sich mittels des Aufrufs sudo sg_scan -i
ermitteln.
Dieses Tool ist Bestandteil der sg3-utils und ist im Wikiartikel Smartmontools mit Adaptec RAID Controller genauer beschrieben.
Die hier abgebildete Konfiguration erfolgt am zu überwachenden Server. Die Konfiguration am Icinga Server via NRPE geschieht analog wie bereits weiter oben oben im Artikel beschrieben.
Eine beispielhafte Ausgabe von sudo sg_scan -i
lautet wie folgt:
/dev/sg1: scsi0 channel=0 id=1 lun=0 [em]
ASR8405 RAID1 V1.0 [rmb=0 cmdq=1 pqual=0 pdev=0x0]
/dev/sg2: scsi0 channel=1 id=4 lun=0 [em]
ATA INTEL SSDSC2BB08 D201 [rmb=0 cmdq=1 pqual=1 pdev=0x0]
/dev/sg3: scsi0 channel=1 id=5 lun=0 [em]
ATA INTEL SSDSC2BB08 D201 [rmb=0 cmdq=1 pqual=1 pdev=0x0]
/dev/sg4: scsi0 channel=1 id=6 lun=0 [em]
ATA INTEL SSDSC2BB08 D201 [rmb=0 cmdq=1 pqual=1 pdev=0x0]
Hier sind die Devices sg2, sg3 und sg4 die zu überwachenden SSDs.
Um nun das Plugin korrekt zu konfigurieren erstellen Sie bzw. editieren Sie folgende Datei:
:~$ sudo vi /etc/nagios/nrpe.d/smart.cfg
Fügen Sie in diese Datei den unten angeführten Inhalt ein. Sie können eine oder auch mehrere Festplatten bzw. SSDs überwachen. Durch mehrfaches Auflisten des -d-Parameters können mehrere Devices angefügt werden.
command[check_smart_attributes]=/usr/lib/nagios/plugins/check_smart_attributes -d /dev/sgX [-d /dev/<weitere Devices>] -O sat -dbj /etc/nagios-plugins/config/check_smartdb.json
Abschließend muss nur noch der NRPE Server neugestartet werden:
:~$ sudo service nagios-nrpe-server restart
MegaRAID Controller
Gegenüber der Konfiguration an Adaptec RAID Controllern können Festplatten und SSDs an MegaRAID Controllern direkt über die Devicenamen /dev/sdX angesprochen werden. Die anschließende Konfiguration des Checks erfolgt analog wie bei den Adaptec RAID Controllern:
:~$ sudo vi /etc/nagios/nrpe.d/smart.cfg
Fügen Sie folgenden Inhalt in die neuerstellte Datei ein. Sie können ebenso mehrere Festplatten bzw. SSDs überwachen.
command[check_smart_attributes]=/usr/lib/nagios/plugins/check_smart_attributes -d megaraidX,/dev/sdX [-d megaraidX,/dev/<weitere Devices>] -dbj /etc/nagios-plugins/config/check_smartdb.json
Abhängig vom RAID-Controller Modell ist die Ergänzung des Parameters -O erforderlich:
command[check_smart_attributes]=/usr/lib/nagios/plugins/check_smart_attributes -d megaraidX,/dev/sdX [-d megaraidX,/dev/<weitere Devices>] -dbj /etc/nagios-plugins/config/check_smartdb.json -O 'sat+'
Abschließend muss der NRPE Server neugestartet werden:
:~$ sudo service nagios-nrpe-server restart
Autor: Georg Schönberger Georg Schönberger, Abteilung DevOps bei der XORTEX eBusiness GmbH, absolvierte an der FH OÖ am Campus Hagenberg sein Studium zum Bachelor Computer- und Mediensicherheit, Studium Master Sichere Informationssysteme. Seit 2015 ist Georg bei XORTEX beschäftigt und arbeitet sehr lösungsorientiert und hat keine Angst vor schwierigen Aufgaben. Zu seinen Hobbys zählt neben Linux auch Tennis, Klettern und Reisen.
|