我在Ubuntu上设置了ZFS(通过保险丝)作为存储arrays,尽pipe它处于“testing”状态,但它已经运行了近一年了。 我每隔一段时间login并检查一次数组,使用:
zpool status
其结果是:
NAME STATE READ WRITE CKSUM media ONLINE 0 0 0 raidz1 ONLINE 0 0 0 sda ONLINE 0 0 0 sdb ONLINE 0 0 0 sdc ONLINE 0 0 0 errors: No known data errors
这一切都很好,但我想自动化一种方法来检查每一次,以确保我的游泳池是没有错误的。
我有仙人掌和zabbix在我的处置。 我想我也可以编写一个程序来处理这个输出,如果找不到“没有已知的数据错误”的话,给我发一封电子邮件。
但是,有没有这样做的软件包,或者说我如何从这个数组中获得一些性能指标?
假设zabbix和GNU工具…添加到zabbix代理守护程序configuration文件如下:
UserParameter = zpool.status,zpool status | grep -q“没有已知的数据错误”&& echo 1 || 回声0
现在,在zabbix添加一个项目与键“zpool.status”,创build一个触发器(使用像“.last(0)= 0”的函数),你就完成了 – 触发器将触发,只要该string丢失zpool状态输出。
这也假设“zpool”将在zabbix用户的path中,并且该用户将被允许运行zpool。 如果没有,请指定完整path并使用sudo。 另一个catch可能是一个默认的shell不支持使用的语法,在这种情况下,你可以重写userparameter,或强制它使用bash。
zpool status -x是通过脚本检查池状态的首选方法。 它的输出是“所有池都是健康的”,除非有问题使得它更容易用作testing。 否则,当你得到多个池时,你的检查脚本和greps会变得更复杂。 所以你可以设置一个cron作业来运行一个脚本,并确保它的状态是“所有的池都是健康的”,否则发出一个输出的警报邮件。
你甚至可以设置一个nagios插件为你做这个。 我假设zabbix应该以相同的方式扩展。
还要确保你定期运行zpool scrub ….我也会在cron作业中设置它。 这将检测和纠正它在文件系统中不常访问的池中发现的任何问题,并且可以在问题导致任何数据损坏之前捕获和纠正问题。
要获得性能指标,您可以使用zpool iostat [更新之间的秒数]我不知道如何将其绑定到仙人掌,但我相信这是可能的。
如果可能的话,还要为磁盘或控制器上的任何硬件或传输错误执行iostat -xCzn和grep。