背景
服务器最容易故障的部件,非硬盘莫属,相比人工巡检,自动监控更靠谱些
这里使用megacli工具+zabbix实现
megicli下载链接:megicli 密码:yagm
win版awk下载链接:awk 密码:mklz
思路
- megacli可以列出raid卡中所有物理硬盘的状态
megacli -PDlist -aAll
- zabbix使用lld低阶发现,创建发现的硬盘item,再使用trapper模式将megacli读取出的硬盘信息过滤推送给zabbix服务端(使用推模式不用考虑zabbix用户执行权限问题)
zabbix服务端模板
新建模板raid_check,添加discovery规则disk_discover,key为discovery,类型为trapper
discovery规则可通过推送格式如下的json获取变量,NAME可以替换为其它名称
{"data":
[
{"{#NAME}":"value1"},
......
]
}
添加Item prototypes,对应json里面的变量
添加Trigger prototypes,配置返回值不为Online时报警
zbx模板下载:链接:raidcheck模板 密码:w8f1
客户端实现(centos)
#安装megacli
rpm -ivh http://rpmfind.net/linux/Mandriva/devel/cooker/x86_64/media/non-free/release/megacli-8.02.21-1-mdv2012.0.x86_64.rpm
mkdir -p /root/optools/raidcheck
cat >/root/optools/raidcheck.sh<<EOF
#!/bin/bash
#发送pd数量到zabbix
/usr/local/zabbixagent/bin/zabbix_sender -c /usr/local/zabbixagent/conf/zabbix_agentd.conf -k disk_discovery -o \`megacli -PDlist -aAll -NoLog|grep Slot|awk 'BEGIN{printf "{\"data\":["} {printf ",{\"{#NAME}\":\"%s\"}", \$NF} END{ printf "]}"}' | sed 's/\[,/\[/g'\`
#生成raid状态列表临时文件
megacli -PDlist -aALL -NoLog|grep state|awk -F '[ |,]' '{print "-","raid_status""["(NR-1)"]",\$3}'>/tmp/raid_status.log
#发送raid状态到对应的item
/usr/local/zabbixagent/bin/zabbix_sender -c /usr/local/zabbixagent/conf/zabbix_agentd.conf -i /tmp/raid_status.log
EOF
#配置计划任务
echo "*/30 * * * * root sh /root/optools/raidcheck.sh" >>/etc/crontab
客户端实现(windows)
windows下需要下载安装megacli与awk,建议放到system32目录下方便调用
创建脚本 c:\raidcheck.bat (用于扫描硬盘并发送状态到zabbix ),脚本内容:
这里默认zabbix客户端安装在C:\zabbix,可自行调整
megacli64 -PDlist -aAll -NoLog|findstr Slot|awk "BEGIN{printf \"- disk_discovery {\042data\042:[\"}{if (NR>1) printf \",\";printf \"{\042{#NAME}\042:\042%s\042}\",$NF} END{printf \"]}\"}" >c:\raid_num.txt
C:\zabbix\zabbix_agents_2.4.1.win\bin\win64\zabbix_sender.exe -c C:\zabbix\zabbix_agents_2.4.1.win\conf\zabbix_agentd.win.conf -i c:\raid_num.txt
megacli64 -PDlist -aALL -NoLog|findstr state|awk -F "[ |,]" "{print \"- raid_status[\"(NR-1)\"]\",$3}">c:\raid_status.txt
C:\zabbix\zabbix_agents_2.4.1.win\bin\win64\zabbix_sender.exe -c C:\zabbix\zabbix_agents_2.4.1.win\conf\zabbix_agentd.win.conf -i c:\raid_status.txt
在命令行运行以下命令创建定时任务,30分钟发送一次状态到zabbix
schtasks /create /sc minute /mo 30 /tn "raid_check" /tr c:\raidcheck.bat