Adaptec-RAID im ISPConfig-Monitoring

#1
Guten Morgen,
vielleicht interessiert das ja den einen oder anderen: Ich habe die Funktion "RAID Status anzeigen" im Tab "Überwachung" dahingehend erweitert, dass auch Adaptec-RAIDs über arcconf gecheckt werden.
Kurzfassung:
Funktion monitorRaid() in /usr/local/ispconfig/server/lib/classes/monitor_tools.inc.php um folgenden Code erweitern:
PHP:
/*
* Check, if arcconf is present
*/
if (file_exists('/sbin/arcconf')) {
    /*
    * Fetch the output
    */
    $data['output'] = shell_exec('arcconf GETCONFIG 1 LD');
    $state = 'ok';
    if(is_array($data['output'])) {
        foreach ($data['output'] as $item) {
            /*
            * The output contains information for every RAID and every HDD.
            * We only need the state of the RAID
            */
            if (strpos($item, 'Logical device name                      : RAID') !== false) {
                /*
                * We found a raid, process the state of it
                */
                if (strpos($item, 'Optimal') !== false) {
                    $this->_setState($state, 'ok');
                } else {
                    /* we don't know the state. so we set the state to critical, that the
                    * admin is warned, that something is wrong
                    */
                    $this->_setState($state, 'critical');
                }
            }                   
        }
    }
}
Langfassung gibts hier.
Ist bisher nur sehr rudimentär und kennt nur "Optimal" und "Critical", aber mir reichts für den Anfang.
 
#5
Zeige mir sich bitte mal den eingefügten Code und die Zeilen davor und danach... Das kommt mir komisch vor, diese Ausgaben solltest du mit dem Parameter LD gar nicht haben.
 
#6
Hier ist der Code.
Code:
  /** The type of the data */
  $type = 'raid_state';
  /*
  * We support several RAID types, but if we can't find any of them, we have no data
  */
  $state = 'no_state';
  $data['output'] = '';
/*
* Check, if arcconf is present
*/
if (file_exists('/sbin/arcconf')) {
  /*
  * Fetch the output
  */
  $data['output'] = shell_exec('arcconf GETCONFIG 1 LD');
  $state = 'ok';
  if(is_array($data['output'])) {
  foreach ($data['output'] as $item) {
  /*
  * The output contains information for every RAID and every HDD.
  * We only need the state of the RAID
  */
  if (strpos($item, 'Logical device name  : RAID') !== false) {
  /*
  * We found a raid, process the state of it
  */
  if (strpos($item, 'Optimal') !== false) {
  $this->_setState($state, 'ok');
  } else {
  /* we don't know the state. so we set the state to critical, that the
  * admin is warned, that something is wrong
  */
  $this->_setState($state, 'critical');
  }
  }
  }
  }
}

  /*
  * Check, if Software-RAID is enabled
  */
  if (file_exists('/proc/mdstat')) {
 
#9
Ah okay, das habe ich bisher nicht ausprobiert. Dennoch sollte es keine Ausgabe von mdraid geben, wenn es gar nicht vorhanden ist. Kannst du mal prüfen, ob bei cat /proc/mdstat eine Ausgabe kommt?
 
#11
Okay. Dann hast du wohl mdraid installiert. Bisher gewinnt der letzte Check, der auf $data schreibt (wurde also vermutlich nur für einen RAID-Typ entwickelt), wenn du also erst $data von arcconf bekommst, dann $data von mdraid, dann von mpt und dann von tw_cli, würde die Ausgabe nur das Ergebnis von tw_cli zeigen.

Du könntest mit concat arbeiten, und $data aus den verschiedenen Ausgaben zusammensetzen.

Wenn du aber kein mdraid hast, sollte es vermutlich auch kein Problem sein, mdadm zu deinstallieren. Aber vorher prüfen, ob nicht doch noch irgendwo ein Array rum liegt ;)
 

Werbung

Top