Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
nikimaxim authored Apr 14, 2020
1 parent b2f7c6d commit 42023aa
Show file tree
Hide file tree
Showing 8 changed files with 384 additions and 129 deletions.
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
### Windows Install
#### Requirements:
- OS: Windows 7, 2008R2 and later
- PowerShell: 2.0 and later
- PowerShell: 5.1 and later
- Zabbix-agent: 4.0 and later
- Arcconf: 2.6 and later(Adaptec)
- MegaCli(CMDTool2): 8.7.14 and later(Lsi)
Expand All @@ -20,15 +20,15 @@

#### Copy powershell script:
##### For Adaptec
- **github**/adaptec-raid.ps1 in C:\service\zabbix_agent\adaptec-raid.ps1
##### For Lsi !!!(In developing)!!!
- **github**/lsi-raid.ps1 in C:\service\zabbix_agent\lsi-raid.ps1
- **github**/adaptec-raid.ps1 in C:\service\adaptec-raid.ps1
##### For Lsi
- **github**/lsi-raid.ps1 in C:\service\lsi-raid.ps1

#### Check powershell script(Out json): (CMD!)
##### For Adaptec
- powershell -NoProfile -NoLogo -ExecutionPolicy Bypass -File "C:\service\zabbix_agent\adaptec-raid.ps1" lld ad
- powershell -NoProfile -NoLogo -ExecutionPolicy Bypass -File "C:\service\adaptec-raid.ps1" lld ad
##### For Lsi
- powershell -NoProfile -NoLogo -ExecutionPolicy Bypass -File "C:\service\zabbix_agent\lsi-raid.ps1" lld ad
- powershell -NoProfile -NoLogo -ExecutionPolicy Bypass -File "C:\service\lsi-raid.ps1" lld ad

#### Add from zabbix_agentd.conf "UserParameter" in zabbix_agentd.conf zabbix_agent:
- **github**/zabbix_agentd.conf
Expand Down Expand Up @@ -56,25 +56,25 @@

#### Copy bash script:
##### For Adaptec
- **github**/adaptec-raid.sh in /opt/zabbix_s/adaptec-raid.sh
- **github**/adaptec-raid.sh in /opt/zabbix/adaptec-raid.sh
##### For Lsi
- **github**/lsi-raid.sh in /opt/zabbix_s/lsi-raid.sh
- **github**/lsi-raid.sh in /opt/zabbix/lsi-raid.sh

#### Chmod and Chown
- chmod -R 750 /opt/zabbix_s/
- chown -R root:zabbix /opt/zabbix_s/
- chmod -R 750 /opt/zabbix/
- chown -R root:zabbix /opt/zabbix/

#### Check bash script(Out json):
- /opt/zabbix_s/adaptec-raid.sh lld ad
- /opt/zabbix/adaptec-raid.sh lld ad

#### Add from zabbix_agentd.conf "UserParameter" in zabbix_agentd.conf zabbix_agent:
- **github**/zabbix_agentd.conf

#### Add in /etc/sudoers
##### For Adaptec script
zabbix ALL=(root) NOPASSWD: /opt/zabbix_s/adaptec-raid.sh
zabbix ALL=(root) NOPASSWD: /opt/zabbix/adaptec-raid.sh
##### For Lsi script
zabbix ALL=(root) NOPASSWD: /opt/zabbix_s/lsi-raid.sh
zabbix ALL=(root) NOPASSWD: /opt/zabbix/lsi-raid.sh

#### Import zabbix template:
##### For Adaptec
Expand Down Expand Up @@ -115,4 +115,4 @@ zabbix ALL=(root) NOPASSWD: /opt/zabbix_s/lsi-raid.sh
<br/>

#### License
- GPL v3
- GPL v3
34 changes: 17 additions & 17 deletions Template Adaptec RAID Controller.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>4.4</version>
<date>2020-02-17T10:28:20Z</date>
<date>2020-04-14T06:45:08Z</date>
<groups>
<group>
<name>Templates Users</name>
Expand All @@ -18,15 +18,15 @@
</groups>
<discovery_rules>
<discovery_rule>
<name>Adaptec Controllers Discovery</name>
<name>Adaptec controllers discovery</name>
<key>adaptec.raid[lld,ad]</key>
<delay>1d</delay>
<item_prototypes>
<item_prototype>
<name>Adaptec Controller No.{#CTRL.ID}:{#CTRL.SN} state</name>
<name>Adaptec controller No.{#CTRL.ID}:{#CTRL.SN} state</name>
<type>ZABBIX_ACTIVE</type>
<key>adaptec.raid[health,ad,{#CTRL.ID},main]</key>
<delay>6h</delay>
<delay>1h</delay>
<history>365d</history>
<trends>0</trends>
<value_type>TEXT</value_type>
Expand All @@ -47,12 +47,10 @@
</trigger_prototypes>
</item_prototype>
<item_prototype>
<name>Adaptec Controller No.{#CTRL.ID}:{#CTRL.SN} Temperature</name>
<name>Adaptec controller No.{#CTRL.ID}:{#CTRL.SN} temperature</name>
<type>ZABBIX_ACTIVE</type>
<key>adaptec.raid[health,ad,{#CTRL.ID},temperature]</key>
<delay>5m</delay>
<history>365d</history>
<trends>90d</trends>
<application_prototypes>
<application_prototype>
<name>Adaptec Controllers</name>
Expand All @@ -61,6 +59,8 @@
<trigger_prototypes>
<trigger_prototype>
<expression>{last()}&gt;{$TEMP_WARN}</expression>
<recovery_mode>RECOVERY_EXPRESSION</recovery_mode>
<recovery_expression>{last()}&lt;{$TEMP_WARN}-5</recovery_expression>
<name>Adaptec Controller No.{#CTRL.ID}:{#CTRL.SN} Temperature</name>
<priority>WARNING</priority>
<manual_close>YES</manual_close>
Expand Down Expand Up @@ -94,12 +94,12 @@
</graph_prototypes>
</discovery_rule>
<discovery_rule>
<name>Adaptec Battery Discovery</name>
<name>Adaptec battery discovery</name>
<key>adaptec.raid[lld,bt]</key>
<delay>1d</delay>
<item_prototypes>
<item_prototype>
<name>Adaptec Battery No.{#CTRL.ID} state</name>
<name>Adaptec battery No.{#CTRL.ID} state</name>
<type>ZABBIX_ACTIVE</type>
<key>adaptec.raid[health,ad,{#CTRL.ID},battery]</key>
<delay>12h</delay>
Expand Down Expand Up @@ -128,12 +128,12 @@
</item_prototypes>
</discovery_rule>
<discovery_rule>
<name>Adaptec Logical Drives Discovery</name>
<name>Adaptec logical Drives discovery</name>
<key>adaptec.raid[lld,ld]</key>
<delay>3h;1h/1-7,08:00-21:00</delay>
<delay>5h;1h/1-7,08:00-21:00</delay>
<item_prototypes>
<item_prototype>
<name>Adaptec Logical Drive {#CTRL.ID}:{#LD.NAME} state</name>
<name>Adaptec logical drive {#CTRL.ID}:{#LD.NAME} state</name>
<type>ZABBIX_ACTIVE</type>
<key>adaptec.raid[health,ld,{#CTRL.ID},{#LD.ID}]</key>
<delay>6h</delay>
Expand Down Expand Up @@ -167,12 +167,12 @@
</item_prototypes>
</discovery_rule>
<discovery_rule>
<name>Adaptec Physical Drives Discovery</name>
<name>Adaptec physical drives discovery</name>
<key>adaptec.raid[lld,pd]</key>
<delay>3h;1h/1-7,08:00-21:00</delay>
<delay>5h;1h/1-7,08:00-21:00</delay>
<item_prototypes>
<item_prototype>
<name>Adaptec Physical Drive {#CTRL.ID}:{#PD.ID}:{#PD.SN} state</name>
<name>Adaptec physical drive {#CTRL.ID}:{#PD.ID}:{#PD.SN} state</name>
<type>ZABBIX_ACTIVE</type>
<key>adaptec.raid[health,pd,{#CTRL.ID},{#PD.ID}]</key>
<delay>6h</delay>
Expand All @@ -189,15 +189,15 @@
<expression>{nodata({$NODATA_TIME})}=1</expression>
<recovery_mode>RECOVERY_EXPRESSION</recovery_mode>
<recovery_expression>{nodata({$NODATA_TIME})}=0</recovery_expression>
<name>Adaptec Physical Drive {#CTRL.ID}:{#PD.ID}:{#PD.SN} No Data</name>
<name>Adaptec physical drive {#CTRL.ID}:{#PD.ID}:{#PD.SN} no data</name>
<priority>WARNING</priority>
<manual_close>YES</manual_close>
</trigger_prototype>
<trigger_prototype>
<expression>{regexp(Online|GlobalHot-Spare)}=0</expression>
<recovery_mode>RECOVERY_EXPRESSION</recovery_mode>
<recovery_expression>{regexp(Online|GlobalHot-Spare)}=1</recovery_expression>
<name>Adaptec Physical Drive {#CTRL.ID}:{#PD.ID}:{#PD.SN} Status</name>
<name>Adaptec physical drive {#CTRL.ID}:{#PD.ID}:{#PD.SN} status</name>
<priority>HIGH</priority>
<manual_close>YES</manual_close>
</trigger_prototype>
Expand Down
10 changes: 5 additions & 5 deletions Template Lsi RAID Controller.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>4.4</version>
<date>2020-02-17T10:29:03Z</date>
<date>2020-04-14T06:45:58Z</date>
<groups>
<group>
<name>Templates Users</name>
Expand Down Expand Up @@ -53,8 +53,6 @@
<type>ZABBIX_ACTIVE</type>
<key>lsi.raid[health,ad,{#CTRL.ID},temperature]</key>
<delay>5m</delay>
<history>365d</history>
<trends>90d</trends>
<application_prototypes>
<application_prototype>
<name>Lsi Controllers</name>
Expand All @@ -63,6 +61,8 @@
<trigger_prototypes>
<trigger_prototype>
<expression>{last()}&gt;{$TEMP_WARN}</expression>
<recovery_mode>RECOVERY_EXPRESSION</recovery_mode>
<recovery_expression>{last()}&lt;{$TEMP_WARN}-5</recovery_expression>
<name>Lsi Controller No.{#CTRL.ID}:{#CTRL.SN} Temperature</name>
<priority>WARNING</priority>
<manual_close>YES</manual_close>
Expand Down Expand Up @@ -132,7 +132,7 @@
<discovery_rule>
<name>Lsi Logical Drives Discovery</name>
<key>lsi.raid[lld,ld]</key>
<delay>3h;1h/1-7,08:00-21:00</delay>
<delay>5h;1h/1-7,08:00-21:00</delay>
<item_prototypes>
<item_prototype>
<name>Lsi Logical Drive {#CTRL.ID}:{#LD.NAME} state</name>
Expand Down Expand Up @@ -171,7 +171,7 @@
<discovery_rule>
<name>Lsi Physical Drives Discovery</name>
<key>lsi.raid[lld,pd]</key>
<delay>3h;1h/1-7,08:00-21:00</delay>
<delay>5h;1h/1-7,08:00-21:00</delay>
<item_prototypes>
<item_prototype>
<name>Lsi Physical Drive {#CTRL.ID}:{#ED.ID}:{#PD.ID}:{#PD.SN} state</name>
Expand Down
73 changes: 46 additions & 27 deletions adaptec-raid.ps1
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<#
.VERSION
0.3
0.4
.DESCRIPTION
Author: Nikitin Maksim
Expand All @@ -24,6 +24,11 @@ $CLI = "C:\service\StorMan\arcconf.exe"
$PATH_CTRL_COUNT = "C:\Windows\Temp\ctrl_count"


if ((Get-Command $CLI -ErrorAction SilentlyContinue) -eq $null) {
Write-Host "Could not find path: $CLI"
exit
}

function GetCtrlCount() {
$ctrl_count = ((& $CLI "LIST".Split() | Where-Object {$_ -match "Controllers found"}) -split ':')[1].Trim() | Tee-Object $PATH_CTRL_COUNT
return $ctrl_count
Expand All @@ -48,12 +53,14 @@ function LLDControllers() {
$ctrl_count = GetCtrlCount
$ctrl_json = ""

for($ctrl_id = 1; $ctrl_id -le $ctrl_count; $ctrl_id++) {
$response = (((& $CLI "LIST".Split() | Where-Object {$_ -match "Controller $ctrl_id"}) -split ' :')[1] -split ',')
$ctrl_model = "-" #$response[3].Trim()
$ctrl_sn = $response[4].Trim()
for ($ctrl_id = 1; $ctrl_id -le $ctrl_count; $ctrl_id++) {
$response = (((& $CLI "LIST" | Where-Object {$_ -match "Controller $ctrl_id"}) -split ' :')[1] -split ',')
if ($response) {
$ctrl_model = "-" #$response[3].Trim()
$ctrl_sn = $response[4].Trim()

$ctrl_json += [string]::Format('{{"{{#CTRL.ID}}":"{0}","{{#CTRL.MODEL}}":"{1}","{{#CTRL.SN}}":"{2}"}},',$ctrl_id, $ctrl_model, $ctrl_sn)
$ctrl_json += [string]::Format('{{"{{#CTRL.ID}}":"{0}","{{#CTRL.MODEL}}":"{1}","{{#CTRL.SN}}":"{2}"}},', $ctrl_id, $ctrl_model, $ctrl_sn)
}
}

return '{"data":[' + $($ctrl_json -replace ',$') + ']}'
Expand All @@ -64,11 +71,11 @@ function LLDBattery() {
$ctrl_count = CheckCtrlCount
$bt_json = ""

for($i = 1; $i -le $ctrl_count; $i++) {
$response = ((& $CLI GETCONFIG $i AD | Select-String "Controller Battery Information" -Context 0,2 | Select-String -InputObject {$_.Context.PostContext} -Pattern "Status") -split ':')
if($response) {
for ($i = 1; $i -le $ctrl_count; $i++) {
$response = ((& $CLI "GETCONFIG $i AD".Split() | Select-String "Controller Battery Information" -Context 0,2 | Select-String -InputObject {$_.Context.PostContext} -Pattern "Status") -split ':')
if ($response) {
$bt_status = $response[1].Trim()
if($bt_status -ne "Not Installed") {
if ($bt_status -ne "Not Installed") {
$bt_json += [string]::Format('{{"{{#CTRL.ID}}":"{0}","{{#CTRL.BATTERY}}":"{1}"}},', $i, $i)
}
}
Expand All @@ -82,14 +89,16 @@ function LLDPhysicalDrives() {
$ctrl_count = CheckCtrlCount
$pd_json = ""

for($ctrl_id = 1; $ctrl_id -le $ctrl_count; $ctrl_id++) {
for ($ctrl_id = 1; $ctrl_id -le $ctrl_count; $ctrl_id++) {
[array]$response = & $CLI "GETCONFIG $ctrl_id PD".Split() | Where-Object {$_ -match "Device\s[#]\d+|Device is |Serial number"}

for($j = 0; $j -lt $response.Length;) {
if(!($response[$j+1] -match "Enclosure Services Device")) {
for ($j = 0; $j -lt $response.Length;) {
if (!($response[$j+1] -match "Enclosure Services Device")) {
$pd_id = ($response[$j] -replace "Device #").Trim()
$pd_sn = ($response[$j + 2] -split ':')[1].Trim()
$pd_json += [string]::Format('{{"{{#CTRL.ID}}":"{0}","{{#PD.ID}}":"{1}","{{#PD.SN}}":"{2}"}},', $ctrl_id, $pd_id, $pd_sn)
if ($pd_sn) {
$pd_json += [string]::Format('{{"{{#CTRL.ID}}":"{0}","{{#PD.ID}}":"{1}","{{#PD.SN}}":"{2}"}},', $ctrl_id, $pd_id, $pd_sn)
}
}
$j += 3
}
Expand All @@ -103,17 +112,17 @@ function LLDLogicalDrives() {
$ctrl_count = CheckCtrlCount
$ld_json = ""

for($ctrl_id = 1; $ctrl_id -le $ctrl_count; $ctrl_id++) {
for ($ctrl_id = 1; $ctrl_id -le $ctrl_count; $ctrl_id++) {
$response = (& $CLI "GETCONFIG $ctrl_id AD".Split() | Where-Object {$_ -match "Logical devices/Failed/Degraded"}) -match '[:\s](\d+)'
$ld_count = $Matches[1]

for($ld_id = 0; $ld_id -lt $ld_count; $ld_id++) {
for ($ld_id = 0; $ld_id -lt $ld_count; $ld_id++) {
[array]$response = & $CLI "GETCONFIG $ctrl_id LD $ld_id".Split() | Where-Object {$_ -match "Logical device name|RAID level"}

$ld_name = ($response[0] -split ':')[1].Trim()
$ld_raid = ($response[1] -split ':')[1].Trim()

if($ld_name -eq "") {
if ($ld_name -eq "") {
$ld_name = $ld_id
}

Expand All @@ -132,25 +141,25 @@ function GetControllerStatus() {

$value = ""

switch($ctrl_part) {
switch ($ctrl_part) {
"main" {
$response = ((& $CLI "LIST".Split() | Where-Object {$_ -match "Controller $ctrlid"}) -split ' :')[1] -split ','
$response = (((& $CLI "LIST".Split() | Where-Object {$_ -match "Controller $ctrlid"}) -split ' :')[1] -split ',')
if ($response) {
$value = $response[0].Trim()
}
}
"battery" {
$bt_status = ((& $CLI "GETCONFIG $ctrlid AD" | Select-String "Controller Battery Information" -Context 0,2 | Select-String -InputObject {$_.Context.PostContext} -Pattern "Status") -split ':')
if($bt_status) {
$value = $bt_status[1].Trim()
}
}
"temperature" {
$response = (& $CLI "GETCONFIG $ctrlid AD".Split() | Where-Object {$_ -match "^\s+Temperature\s+[:]"}) -match '(\d+).*[C]'
if($response) {
$value = $Matches[1]
}
}
"battery" {
$bt_status = ((& $CLI "GETCONFIG $ctrlid AD".Split() | Select-String "Controller Battery Information" -Context 0,2 | Select-String -InputObject {$_.Context.PostContext} -Pattern "Status") -split ':')
if($bt_status) {
$value = $bt_status[1].Trim()
}
}
}

return $value
Expand All @@ -159,13 +168,23 @@ function GetControllerStatus() {

function GetPhysicalDriveStatus() {
[array]$response = & $CLI "GETCONFIG $ctrlid PD".Split() | Where-Object {$_ -match "^\s+State\s+[:] "}
return ($response[$partid] -split ':')[1].Trim()

if ($response) {
return ($response[$partid] -split ':')[1].Trim()
} else {
Write-Host "Data not found"
}
}


function GetLogicalDriveStatus() {
$response = & $CLI "GETCONFIG $ctrlid LD $partid".Split() | Where-Object {$_ -match "Status of logical device"}
return ($response -split ':')[1].Trim()

if ($response) {
return ($response -split ':')[1].Trim()
} else {
Write-Host "Data not found"
}
}


Expand Down
Loading

0 comments on commit 42023aa

Please sign in to comment.