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

文章目录

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


背景

服务器最容易故障的部件,非硬盘莫属,相比人工巡检,自动监控更靠谱些
这里使用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里面的变量
全网最简单方式实现linux/windows服务器硬盘raid监控&报警_第1张图片
添加Trigger prototypes,配置返回值不为Online时报警
全网最简单方式实现linux/windows服务器硬盘raid监控&报警_第2张图片
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

最终效果

在这里插入图片描述

你可能感兴趣的:(业务监控)