zabbix使用自定义监控脚本监控HP EVA系列磁阵

Github项目地址

https://github.com/zhangrj/HP_EVA_Storage_Zabbix_Monitor

备注:本项目改编自https://share.zabbix.com/storage-devices/hp/hp-eva,因原脚本使用过程中存在诸多问题,故将其内容拆分并更改了部分与zabbix_server的通信方法,以便于调试和使用。

测试用zabbix server、zabbix agent版本:3.4.14,理论上可用于所有支持Low Level discovery的zabbix版本。

文件用途

1、zbx_export_templates.xml:zabbix模板文件;
2、zabbix_agentd.win.conf:zabbix agent配置文件(只列出需更改的部分);
3、zabbix_evastorage_monitor.bat:Windows中需要定时执行的脚本,用于通过执行脚本向zabbix server发送数据;
4、arr_perf_discovery.vbs:阵列性能自动发现脚本,与zabbix模板中的自动发现规则“ARRAY performance discovery”相对应;其余discovery文件于此类似,不再赘述;
5、eva_status.vbs:磁盘阵列状态发送脚本,用于通过zabbix_sender将磁盘状态数据发送给zabbix server
6、eva_performance.vbs:磁盘阵列性能发送脚本,用于通过zabbix_sender将磁阵性能状态发送给zabbix_server

工作原理

zabbix server通过设置的自动发现规则,按照自定义键值向zabbix agent发送获取数据的请求,zabbix agent根据配置文件中自定义键值对应的命令,通过脚本取得json格式的数据并返回给zabbix server,zabbix server处理得动的json数据,并依此创建设备监控项。

EVA磁阵的管理机定时执行脚本zabbix_evastorage_monitor.bat(例如设置为5分钟执行一次),也即执行脚本eva_status.vbs、eva_performance.vbs,这两个脚本将查询磁阵状态信息,并通过zabbix_sender将数据发送给zabbix server,经处理后变为相应设备监控项的最新值。

使用方法

前提条件

  1. eva磁阵通过管理机进行管理和监控,管理机安装有 HP StorageWorks Command View EVA Software Suite 且含有 SSSU.exe 和 evaperf.exe 组件;
  2. 管理机安装有zabbix agent;
  3. 磁阵Vdisk名称不能包含非法字符,以便能够满足作为zabbix监控项键值的需求;
  4. evaperf.exe中的节点名称必须显示为友好名称(即SSSU.exe中的系统名称),而不是显示为WWN。设置方法如下,打开evaperf.exe执行如下命令:
# evaperf as
此时节点名称如果显示为wwn,则
# evaperf fnh localhost <username>
输入密码
# evaperf fn
# evaperf as
此时节点名称已显示为友好名称

安装与配置步骤

1、进入管理机,打开SSSU.exe,登入,输入如下命令显示该管理机管理的磁阵名称。

ls system

2、下载本项目并解压,复制文件夹eva4400nj和脚本zabbix_evastorage_monitor.bat到磁阵管理机,例如复制到zabbix agent安装目录。

3、将文件夹名称改为步骤一中需要监控的system名(为了便于管理、分辨和监控多台磁阵),修改文件夹中8个脚本的配置字段,包括磁阵管理界面的登入用户名密码、zabbix server的IP地址、要监控的磁阵system名(即storages字符串必须与步骤一中显示的相同)、各个程序的路径等。并依此双击执行,测试脚本能够正常执行。脚本默认所有磁阵组件存在,如果有报错,多为磁阵某个组件不存在,可在SSSU.exe中执行保存脚本中的命令查看返回结果,然后注释掉相应代码,或者在报错代码前添加判定变量为空的代码。

4、按照zabbix_agentd.win.conf中显示的字段修改zabbix agent配置文件。

UserParameter=evanj.vdisk.discovery,cscript "C:\Program Files\zabbix_agent\eva4400nj\vdisk_discovery.vbs" //Nologo

例如这段配置表示,自定义key键值evanj.vdisk.discovery,返回命令cscript “C:\Program Files\zabbix_agent\eva4400nj\vdisk_discovery.vbs” //Nologo的执行结果。为什么要加 //Nologo,参看下文:

zabbix自定义监控项报错“Value should be a JSON object”

当使用vbs脚本返回自定义键值的json数据时,zabbix web界面报错
“Value should be a JSON object”,在zabbix server端使用命令:

zabbix_get -s <agent IP> -p 10050 -k “item key”

查看返回值,发现返回的数据带有Windows的logo字段:

Microsoft (R) Windows Script Host Version 5.8 Copyright (C) Microsoft Corporation 1996-2001. 

导致返回的数据不是标准json格式,在cscript/wscript命令后加//Nologobiao标志可解决这类报错。(只适用于上述情况)

5、通过zabbix server的web界面,导入模板zbx_export_templates.xml,更改模板名称为磁阵名称,注意模板中的自动发现规则的key值必须与步骤四中的UserParameter一致(可自定义,但必须保持一致)。

创建主机,注意创建主机时“主机名称 host name”填写必须与步骤三中填写的storages字符串相同,agent代理程序的IP填写磁阵管理机的IP。

6、修改zabbix_evastorage_monitor.bat脚本中的文件路径为真实路径,并创建Windows定时任务,方法如下,打开cmd:

schtasks /create /sc minute /mo 5 /tn "hp_eva_monitor" /tr zabbix_evastorage_monitor.bat脚本路径

表示创建一个名为hp_eva_monitor的定时任务,该任务每隔5分钟执行一次
zabbix_evastorage_monitor.bat。

至此,完成所有设置,如有疑问请邮件联系“icodertop@163.com”。

监控多台磁阵

重复上述步骤即可。