SMART Attributes Monitoring Plugin

Aus Thomas-Krenn-Wiki
Zur Navigation springen Zur Suche springen

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.

Percent Lifetime und Temperature werden vom Plugin als Performance Daten dargestellt.

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
    • check_smart_attributes plugin installiert
    • libconfig-json-perl installiert
    • smartmontools (smartctl) installiert
    • sudoers Eintrag für User nagios und smartctl
    • Wenn über NRPE, dann Kommando-Definition für NRPE
  • 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


Foto Georg Schönberger.jpg

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.


Das könnte Sie auch interessieren

Icinga Mobile
OPNsense Telegraf Plugin Installation und Konfiguration
TouchMon