有非常多人说,NAS做阵列,如果硬盘坏了你就麻烦了
或者如果阵列有问题你就麻烦了
还是不做比较好~
我只能说,每个人都有自己的需求,你不需要~别做
别人是否有需要别人的事,如果你不知道你有没有需要,那就是没需要
那么我今天来给有需要的人说一些好玩的监控手段
让大家可以轻松的监控自己的NAS的运行状况

好吧~先戴头盔~
这个不是唯一的办法~也不是一个非常难的问题~
如果你觉得你更厉害有更好的方案~请在下面留言给大家分享~~
另外
这个做法纯属好玩,其实单纯用脚本来实现更直接更简单,但希望某些人可以举一反三


首先来介绍Zabbix
Zabbix,是一套企业级的分布式开源监控解决方案
由于是企业级的,所以里面其实说真的有很多功能一般用户其实用不上

简单点儿说就是Zabbix可以用一个相对于Cacti来说没有那么丑的界面
来监控各个客户端的运行状况以及自定义的监控项

从架构上~首先要部署服务器端和被监控的终端要安装客户端
我们这里说的是一台NAS,那么我们一台Debian 10系统的土炮NAS既是服务器又是客户端来说
首先肯定是你要有Docker了~
不懂得可以翻阅我之前的文章
服务器端可以通过Docker运行以下命令安装一个全包一次过的版本
docker run –name Zabbix-Server –net=host –restart=always -e PHP_TZ=”Asia/Shanghai” -d zabbix/zabbix-appliance:latest
很自然的Zabbix就会部署到你的NAS上的

#这里使用host的network而没有使用映射主要是为了免除一些麻烦
#其实你完全是可以使用端口映射的
zabbix默认会占了80端口。你需要什么端口的

自己登录portainer上以命令行修改配置文件修改然后重新启动Zabbix-Server的Docker就可以

然后为了方便维护脚本,zabbix-agent就使用直接安装的方式
直接在ssh中输入命令安装
apt update
apt install zabbix-agent
apt install zabbix-sender
#这里有两种方法,可以使用agent可以使用sender
#一种被动一种主动~看个人喜好,在工作中就看实际需求

安装完后,由于zabbix server在本机,所以不需要修改配置文件直接运行
systemctl start zabbix-agent
systemctl enable zabbix-agent

现在登录zabbix应该就可以看到本机了
#这里zabbix我就不做详细讲解了,自己玩玩就大概知道怎么用了

那么我们在NAS本机上运行以下命令来创建硬盘健康检测的依赖
apt update
apt install smartmontools
安装完成后
我们只需要运行smartctl -a /dev/sda #这sda是磁盘名字
就可以看到这个硬盘的详细SMART信息
而运行smartctl -H /dev/sda
就可以看到一个简略的回复,如果硬盘是健康的话就会得到PASSED的结果

那么我们现在就来创建脚本了
首先我们创建脚本目录
mkdir /scripts
然后创建脚本hdd.health.sh
vi /scripts/hdd.health.sh
内容如下

#!/bin/sh
Device=$1
HDStatus=`/usr/sbin/smartctl -H /dev/${Device} | grep "PASSED"`
if [ -z "$HDStatus" ];then
echo 0
else
echo 1
fi

然后赋予权限
chmod +x /scripts/hdd.health.sh
测试一下是否可行
sh /scripts/hdd.health.sh sda
这里其实很好理解,就是检测参数S1的硬盘
如果有PASSED字样就输出1如果不是就0
这里用的是非常简单的判断抓取是否为空的方案

然后创建键值配置文件
vi /etc/zabbix/zabbix_agent.conf.d/hdd.health.conf
内容如下

UserParameter=check_HDDStatus[*],/scripts/hdd.health.sh "$1"

然后重新启动zabbix-agent
systemctl restart zabbix-agent


然后登录zabbix的管理界面
配置>模板中创建模板


自己想一个模板名和随便添加到自己喜欢的组里


点击监控项,并创建新的监控项


这里自己输入监控项名字
键值设置为check_HDDStatus[*]
这里的[*]就是你的参数,例如你要检测sda硬盘
那么就是check_HDDStatus[sda]
然后设置多久检测一次,一般来说企业级硬盘可以1分钟一次或者5分钟一次都没问题
但是如果是家里,你不想硬盘无法休眠就设置长一些~自己决定,我一般是8个小时


然后创建触发器,用于让Zabbix检测到这个键控值出现指定的情况进行响应
在模板界面点击你模板下面的触发器


然后创建触发器
这里自己起个名字~

然后通过表达式生成器创建表达式
这里的逻辑是当监控项的最后数值=0~就是硬盘检测数据不PASSED就会警报
创建后可以手动输入数值进行测试


创建后回到配置>主机页面,找到你的NAS点击一下
然后在模板中添加你刚才创建的模板


那么当系统首次获取硬盘信息后你就在监控>最新数据中看到你的硬盘健康情况了

那么问题来了,当硬盘出问题的时候我们怎么获得通知呢

那么我们就要在管理>媒介中把EMAIL写上,这里写上自己的邮箱和邮箱服务器和密码
可以进行测试~通过后

在管理>用户中,选择Admin,然后点击媒介页
添加你的邮箱地址

最后添加动作

在配置>动作页面添加报警动作


自己给自己的动作起个名字
然后添加刚才创建的触发器(记得点击添加按钮)

最后在操作中添加发邮件到Admin用户
完成后Zabbix就会自动检测这个监控项,当监控项出现异常触发到触发器
就会发邮件通知