FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: chris1284 am 03 Dezember 2016, 09:23:18

Titel: HP Raidcontroller überwachen
Beitrag von: chris1284 am 03 Dezember 2016, 09:23:18
Hallo zusammen,

per console kann ich mit dem  hp-tool den status des controllers, des raids und der platten abfragen:

hpssacli ctrl all show config

ergebniss

ZitatSmart Array P410 in Slot 1                (sn: PACCRCN810D1QOZ)


   Port Name: 1I

   Port Name: 2I
   array A (SATA, Unused Space: 0  MB)


      logicaldrive 1 (3.6 TB, RAID 5, OK)

      physicaldrive 2I:0:5 (port 2I:box 0:bay 5, SATA, 2 TB, OK)
      physicaldrive 2I:0:6 (port 2I:box 0:bay 6, SATA, 2 TB, OK)
      physicaldrive 2I:0:7 (port 2I:box 0:bay 7, SATA, 2 TB, OK)

   SEP (Vendor ID PMCSIERA, Model  SRC 8x6G) 250  (WWID: 50014380131040CF)

wie kann ich das am besten in einen dummy schreiben? gibts da schon fertiges module? aktuell wüsste ich nicht welches modul geeignet wäre und bin eigentlich der meinung mir selber eine funktion schreiben zu müssen.

gruß
christian
Titel: Antw:HP Raidcontroller überwachen
Beitrag von: Wernieman am 03 Dezember 2016, 22:57:17
Wenn Du meine persöhnliche Meinung wissen willst:

Meistens sind für solche Abfragen doch root rechte erforderlich. Schreibe Dir einen Cron-Job, der alle 5 (x) Minuten den Status abfragt und per telnet (set) den Status zu FHENM reinpusht ....
Titel: Antw:HP Raidcontroller überwachen
Beitrag von: chris1284 am 04 Dezember 2016, 09:37:42
ja, du hast recht. gestern hatte ich ein at angelegt und prompt die meldung fehlender rechte bekommen. fhem bekommt natürlich keine root-rechte von mir somit wird nur der job bleiben.
Titel: Antw:HP Raidcontroller überwachen
Beitrag von: Wernieman am 04 Dezember 2016, 17:56:40
Und man muß nicht immer pullen, manchmal ist push einfach "besser" ;o)
Titel: Antw:HP Raidcontroller überwachen
Beitrag von: chris1284 am 05 Dezember 2016, 10:31:30
ich habe es nun per perl script gelöst welches per cronjob aufgerufen wird. falls mal jemand ein ähnliches problem hat:
raid.pm

use IO::Socket::INET;
my $strCmdErg = `hpssacli ctrl all show config`;
my @arrCmdErg = split(/\n/, $strCmdErg );
#my $i = 0;
#print scalar(@arrCmdErg), " Felder im Array \n";

my @driveone = split(', ', $arrCmdErg[12] );
my @driveone_health = split('\)', $driveone[3] );
my @driveone_location = split('\(', $driveone[0] );
my @drivetwo = split(', ', $arrCmdErg[13] );
my @drivetwo_health = split('\)', $drivetwo[3] );
my @drivetwo_location = split('\(', $drivetwo[0] );
my @drivethree = split(', ', $arrCmdErg[14] );
my @drivethree_health = split('\)', $drivethree[3] );
my @drivethree_location = split('\(', $drivethree[0] );

my $HOSTNAME = "127.0.0.1";
my $HOSTPORT = "7072";
my $socket = IO::Socket::INET->new('PeerAddr' => $HOSTNAME,'PeerPort' => $HOSTPORT,'Proto' => 'tcp') ;
print $socket "setreading dummyRaidHealth controller ".$arrCmdErg[1]."\n";
#print $socket "setreading dummyRaidHealth p_0 ".$arrCmdErg[4]."\n";
print $socket "setreading dummyRaidHealth p_1 ".$arrCmdErg[6]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA ".$arrCmdErg[7]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_logicaldrive_1 ".$arrCmdErg[10]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_1_location ".$driveone_location[1]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_1_type ".$driveone[1]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_1_size ".$driveone[2]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_1_health ".$driveone_health[0]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_2_location ".$drivetwo_location[1]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_2_type ".$drivetwo[1]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_2_size ".$drivetwo[2]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_2_health ".$drivetwo_health[0]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_3_location ".$drivethree_location[1]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_3_type ".$drivethree[1]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_3_size ".$drivethree[2]."\n";
print $socket "setreading dummyRaidHealth p_1_arrA_physdrive_3_health ".$drivethree_health[0]."\n";
if (($driveone_health[0] eq "OK") && ($drivetwo_health[0] eq "OK") && ($drivethree_health[0] eq "OK")){
print $socket "setreading dummyRaidHealth state OK \n";}
else{print $socket "setreading dummyRaidHealth state ERROR \n";}
$socket->close;


list des devices:
Zitat
Internals:
   NAME       dummyRaidHealth
   NR         145
   STATE      OK
   TYPE       dummy
   Readings:
     2016-12-05 10:29:54   controller      Smart Array P410 in Slot 1                (sn: PACCRCN810D1QOZ)
     2016-12-05 10:29:54   p_1             Port Name: 2I
     2016-12-05 10:29:54   p_1_arrA        array A (SATA, Unused Space: 0  MB)
     2016-12-05 10:29:54   p_1_arrA_logicaldrive_1 logicaldrive 1 (3.6 TB, RAID 5, OK)
     2016-12-05 10:29:54   p_1_arrA_physdrive_1_health OK
     2016-12-05 10:29:54   p_1_arrA_physdrive_1_location port 2I:box 0:bay 5
     2016-12-05 10:29:54   p_1_arrA_physdrive_1_size 2 TB
     2016-12-05 10:29:54   p_1_arrA_physdrive_1_type SATA
     2016-12-05 10:29:54   p_1_arrA_physdrive_2_health OK
     2016-12-05 10:29:54   p_1_arrA_physdrive_2_location port 2I:box 0:bay 6
     2016-12-05 10:29:54   p_1_arrA_physdrive_2_size 2 TB
     2016-12-05 10:29:54   p_1_arrA_physdrive_2_type SATA
     2016-12-05 10:29:54   p_1_arrA_physdrive_3_health OK
     2016-12-05 10:29:54   p_1_arrA_physdrive_3_location port 2I:box 0:bay 7
     2016-12-05 10:29:54   p_1_arrA_physdrive_3_size 2 TB
     2016-12-05 10:29:54   p_1_arrA_physdrive_3_type SATA
     2016-12-05 10:29:54   state           OK
Attributes:
   DbLogExclude .*
   room       dummy

Titel: Antw:HP Raidcontroller überwachen
Beitrag von: chris1284 am 05 Dezember 2016, 16:21:57
wenn ich das skript per hand ausführe läuft alles einwandfrei . wenn cron das macht wird nur state aktualisiert (also wird offenbar das hp-tool nicht ausgeführt).
leider konnte ich keine logs vom job finden. irgendwelche ideen den fehler zu finden?
Titel: Antw:HP Raidcontroller überwachen
Beitrag von: Wernieman am 05 Dezember 2016, 16:30:56
Wenn Du ein Script per Cron aufrufst, sind die Umgebungsvariablen nicht gesetzt, er findet also das hp-tool nicht, da der PATH nicht gesetzt.

Du hast jetzt 2 Möglichkeiten (eigentlich noch mehr)
1. Umgebungsvariablen setzen lassen
2. (besser): Volle Pfadangaben in einem Cron-Script!
Du kannst übrigens rausfinden, wo etwas luegt per whereis. Also in Deinem Falle: "whereis hpssacli"

Generell gilt: Volle Pfadangaben in einem Script sind zu bevorzugen. Sonst macht man es "den Bösen" doch etwas zu leicht ....  8)
Titel: Antw:HP Raidcontroller überwachen
Beitrag von: chris1284 am 05 Dezember 2016, 18:31:28
jawohl, danke, das mit der pfadangabe wars! ;D