Мониторим состояния контролера HP Smart Array c помощью утилиты hpssacli.exe

В процессе ...

hp-ssa-logo

Работа с утилитой HP SSA CLI

Просмотр установленных контролеров:

.\hpssacli.exe controller all show

Dynamic Smart Array B140i in Slot 0b      (sn:                )

Просмотр состояния физических дисков подключенных к контролеру:

.\hpssacli.exe controller slot=0b physicaldrive all show

Dynamic Smart Array B140i in Slot 0b

   array A

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

   array B

      physicaldrive 1I:0:3 (port 1I:box 0:bay 3, SATA, 1 TB, OK)
      physicaldrive 1I:0:4 (port 1I:box 0:bay 4, SATA, 1 TB, OK)
      physicaldrive 1I:0:2 (port 1I:box 0:bay 2, SATA, 1 TB, OK, spare)

   array C

      physicaldrive 1I:0:1 (port 1I:box 0:bay 1, SATA, 1 TB, OK)

   array D

      physicaldrive 2I:0:7 (port 2I:box 0:bay 7, SATA, 1 TB, OK)
      physicaldrive 2I:0:8 (port 2I:box 0:bay 8, SATA, 1 TB, OK)

Полный диагностический отчет:

.\hpssacli.exe controller slot=0b diag file=c:\temp\hpssa-diag.zip

   Generating diagnostic report...done

Формируется очень подробный отчет в форматах: html, xml, txt.

Скрипт для системы мониторинга Icinga2
<#
 .SYNOPSIS
  Скрипт для Icinga 2 - Получение информации о состоянии дисков в RAID контроллерах HP Smart Array.

 .DESCRIPTION
  Используется утитлита hpssacli.exe. В планах анализировать данные о статусе (Status: OK) дисков и темпратуре (Current Temperature (C): 34).

 .PARAMETER ControllerSlot
  Слот контроллера

 .PARAMETER ControllerTarget
  Цель контроллера

 .OUTPUTS
  Массив строк состояния целей (controller, array logicaldrive, physicaldrive) подключенных к контроллеру HP Smart Array/HP Dynamic Smart Array.

 .EXAMPLE
check_hpraidctrl_status.ps1 -ControllerSlot 0

OK -  Dynamic Smart Array B120i RAID in Slot 0 (Embedded)

Dynamic Smart Array B120i RAID in Slot 0 (Embedded)

   Controller Status: OK

   array A: OK
   array B: OK

   logicaldrive 1 (465.7 GB, 1): OK
   logicaldrive 2 (931.5 GB, 1): OK

   physicaldrive 1I:1:1 (port 1I:box 1:bay 1, 500 GB): OK
   physicaldrive 1I:1:2 (port 1I:box 1:bay 2, 500 GB): OK
   physicaldrive 1I:1:3 (port 1I:box 1:bay 3, 1 TB): OK
   physicaldrive 1I:1:4 (port 1I:box 1:bay 4, 1 TB): OK

 .LINK
  https://webnote.satin-pl.com

 .NOTES
  Version:        0.2
  Author:         Pavel Satin
  Email:          plsatin@yandex.ru
  Creation Date:  20.02.2018
  Purpose/Change: Изменение логики и параметров

  Version:        0.3
  Change Date:  19.10.2018
  Purpose/Change: Анализ массива результатов на Failed сообщения

#>
Param(
    [Parameter(Mandatory = $false)]
    [string]$ControllerSlot = "0",
    [Parameter(Mandatory = $false)]
    [string]$ControllerTaget = "all"
)


$returnStateOK = 0
$returnStateWarning = 1
$returnStateCritical = 2
$returnStateUnknown = 3

#$ErrorActionPreference = "SilentlyContinue"


function Confirm-HPSSAResult($result) {
    # Поиск в массиве строк
    $patterns = @("Failed")

    foreach ( $line in $result ) {
        $count = @($patterns | ? { $line -match $_ }).Length

        if ( $count -eq $patterns.Length ) {
            $resultFail = $True
            $resultFailStr += $line
        }
    }


    if ($resultFail) {
        $returnState = $returnStateCritical
        Write-Host "Critical - " $result[1]
        $resultFailStr
    } else {
        $returnState = $returnStateOK
        Write-Host "OK - " $result[1]
    }

    $result
    [System.Environment]::Exit($returnState)
}




switch ($ControllerTaget) {
    "all" {
        $result = & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller all show status
        $result += & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller slot=$ControllerSlot array all show status
        $result += & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller slot=$ControllerSlot logicaldrive all show status
        $result += & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller slot=$ControllerSlot physicaldrive all show status
        Confirm-HPSSAResult($result)
    }
    "controller" {
        $result = & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller all show detail
        Confirm-HPSSAResult($result)
    }
    "array" {
        $result = & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller slot=$ControllerSlot array all show detail
        Confirm-HPSSAResult($result)
    }
    "logicaldrive" {
        $result = & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller slot=$ControllerSlot logicaldrive all show detail
        Confirm-HPSSAResult($result)
    }
    "physicaldrive" {
        $result = & "C:\Program Files\HP\hpssacli\bin\hpssacli.exe" controller slot=$ControllerSlot physicaldrive all show detail
        Confirm-HPSSAResult($result)
    }
    default {
        Write-Host "Не задан параметр ControllerSlot либо неверное имя цели (ControllerTarget: $ControllerTaget)."
        [System.Environment]::Exit($returnStateUnknown)

    }
}

Ссылки