文章目录背景思路zabbix服务端模板客户端实现(centos)客户端实现(windows)最终效果

背景

服务器最容易故障的部件,非硬盘莫属,相比人工巡检,自动监控更靠谱些

这里使用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

9f2217365f4c9f6522a05c3f34c85b17.png

discovery规则可通过推送格式如下的json获取变量,NAME可以替换为其它名称

{"data":

[

{"{#NAME}":"value1"},

......

]

}

添加Item prototypes,对应json里面的变量

7e71c7593a62df322f938acd9b388da4.png

添加Trigger prototypes,配置返回值不为Online时报警

7a158a7f6d9ce5d619bc3d2159c23229.png

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<

#!/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

最终效果

5ec8f53c30fa9ee2e504bfd09980f1c1.png

Logo

一站式 AI 云服务平台

更多推荐