全网最简单方式实现linux/windows服务器硬盘raid监控&报警


背景

服务器最容易故障的部件,非硬盘莫属,相比人工巡检,自动监控更靠谱些
这里使用megacli工具+zabbix实现

megicli下载链接:megicli 密码:yagm
win版awk下载链接:awk 密码:mklz

思路

  1. megacli可以列出raid卡中所有物理硬盘的状态
megacli -PDlist -aAll
  1. 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

最终效果

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值