Perl Script zum abfragen der HDD Temperatur mittels SMART

System ist Debian Wheezy mit Perl v5.14.2
Ziel ist es die Temperatur von X angegebenen Devices / Festplatten auszuwerten und die Ausgabe so darzustellen, dass sie von Cacti verarbeitet werden kann.
Als Vorbereitung muss smart mittels „# aptitude install smartmontools“ installiert werden

Script Get-HDD_Temp.pl

Dies ist ein Perl Script zum Abfragen der Temperatur von X Festplatten mittels SMART. Es ist definitiv noch aus- und umbaufähig, aber das war so in kurzer Zeit realisierbar. Die Verwendung erfolgt auf eigene Gefahr.


#!/usr/bin/perl
# by taste-of-it.de
# erstellt am 16.10.2013
# Version 2.0
# auslesen der smartwerte hdd temp einer oder mehrerer disks
# es wird der smartwert 190 oder 194 und name des device z.b. sda erwartet
# es werden keine fehler abgefangen

# mögliche abfragen - wenn 194 nicht vorhanden dann 190 nehmen
# smartctl 190 Airflow_Temperature_Cel
# smartctl 194 Temperature_Celsius

use strict;
#use warnings;

# kontrolle ob args vorhanden sind
if ( @ARGV < 1) {
print "Bitte den SMART-Wert eingeben und ein Device z.B. 190 sda=/dev/sda.\n";
exit (1);
}else{

my $aSize = @ARGV; # Anzahl der Elemente im Array
my $values;
my $smartname; # Smartname der Abfrage
my $count = 0;

# array der Argumente abfragen
for my $element (@ARGV)
{
# prüfen ob das ARG 0 und somit nicht vorhanden ist
if ($element =~ /^[0]+$/)
{
}else{
# das ARG ist nicht Null und kann somit ausgewertet werden
if ($element =~ /^[0-9]+$/)
{
if ($element == 190)
{
$smartname = 'Airflow_Temperature_Cel';
}elsif ($element == 194)
{
$smartname = 'Temperature_Celsius';
}
}else
{
my $spacer;
# das naechste Element im Array pruefen, wenn 0 dann kein Leerzeichen
if (@ARGV[$count+1] =~ /^[0]+$/){ $spacer = ""; }
else { $spacer = " "; }

# holen der hdd temp aus spalte 10(raw) werte und string bauen -> name:value
$values .= $element.":".int(`smartctl -A /dev/$element | awk -v pattern=$smartname '\$0 ~ pattern  {print \$10}'`).$spacer;
}
}
$count++;
}
# Ausgabe der Werte
print $values;
}

Run Get-HDD_Temp.pl:


perl get-hdd_temp.pl 194 sda sdb

Ausgabe Get-HDD-Temp.pl:


sda:46 sdb:44

Hinweis – Cacti erfordert es wenn mehr als eine Rückgabe vorhanden ist zwischen diesen ein Whitespace / Leerzeichen zu setzen. Die Werte selbst werden mittels Doppelpunkt getrennt wobei der erste der Name ist und der folgende der Wert.Deshalb sieht die Formatierung entspr. aus.

2 thoughts on “Perl Script zum abfragen der HDD Temperatur mittels SMART

  1. Maik Post author

    Hallo,
    und warum nicht? Es ist zwar schnell geschrieben und ich bin bei weitem nicht der Perl-Pro, aber für meine Zwecke reichts. Was fehlt oder könnte besser gemacht werden ;)?

    Reply

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.