如何在 FreeBSD 中使用 SNMP 监控 ZFS?

如何在 FreeBSD 中使用 SNMP 监控 ZFS?

我想用 SNMP 监控这些:

zpool iostat -v 1

每个驱动器和总和。

zpool status

擦洗为 1,不擦洗为 0。

zpool status -x

监控$?(返回值)。当值不为0时发送陷阱。

zfs list

已使用和可用空间。

需要什么样的脚本?

答案1

假设您使用的是 net-snmpd,您可能需要为每个值编写一个脚本。然后,使用 snmpd.conf 手册页“扩展代理功能”部分中描述的技术,将这些脚本的引用添加到您的 snmpd.conf。

例如,/root/bin/myzstatus

#!/bin/sh
/sbin/zpool status -x $1

并在 snmpd.conf 中:

extend status /root/bin/myzstatus tank

使用 zfs/zpool,您会很幸运,因为大多数子命令都有机器输出选项,这将使其更容易理解。

答案2

我不知道 zpool 状态、scrub 等的答案,但对于空间,我想到了一些办法。

在 /etc/snmpd.config 中,我发现了这一点,并取消了它的注释,现在我有存储值:

#
# Host resources module
#  This requires the mibII module.
#
begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"

以下是一些输出:

# snmpwalk -v1 -c public $freebsdzfsmachine | grep -E "Storage.*\.22 " | less
HOST-RESOURCES-MIB::hrStorageIndex.22 = INTEGER: 22
HOST-RESOURCES-MIB::hrStorageType.22 = OID: HOST-RESOURCES-TYPES::hrFSOther
HOST-RESOURCES-MIB::hrStorageDescr.22 = STRING: /tank, type: zfs, dev: tank
HOST-RESOURCES-MIB::hrStorageAllocationUnits.22 = INTEGER: 512 Bytes
HOST-RESOURCES-MIB::hrStorageSize.22 = INTEGER: 2147483647
HOST-RESOURCES-MIB::hrStorageUsed.22 = INTEGER: 1030063349
HOST-RESOURCES-MIB::hrStorageAllocationFailures.22 = Counter32: 0
HOST-RESOURCES-MIB::hrFSStorageIndex.22 = INTEGER: 24

不幸的是,Size 输出(1024 GiB)是错误的。根据 df,存储大小为 20 TiB,使用量为 491 GiB,但出于某种原因,此处的 Size 恰好是 2^31-1 * 512 字节。(其中 2^31-1 是有符号 32 位整数的最大值)。但使用量是正确的:1030063349*512/1024/1024/1024 = 491。

不过幸运的是,它对我的​​ 80 GB 根磁盘来说运行良好。我猜它在 FreeBSD 上被限制为 1 TiB。在 Linux NFS 客户端上使用 SNMP 看到的相同挂载显示了正确的值,hrStorageAllocationUnits 是“INTEGER:32768 字节”

相关内容