I don't know the answer for the zpool status, scrub, etc. but for space I figured something out.
in /etc/snmpd.config, I found this, and uncommented it, and now I have storage values:
#
# Host resources module
# This requires the mibII module.
#
begemotSnmpdModulePath."hostres" = "/usr/lib/snmp_hostres.so"
And here is some output:
# 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
Unfortunately, the Size output (1024 GiB) is wrong. Storage size according to df is 20 TiB and used is 491 GiB, but for some reason, Size here is coincidentally exactly 2^31-1 * 512 bytes. (where 2^31-1 is the maximum value of a signed 32 bit integer). Used is correct though: 1030063349*512/1024/1024/1024 = 491.
Fortunately though, it works fine for my 80 GB root disk. I guess it is limited to 1 TiB on FreeBSD. This same mount seen using SNMP on a Linux NFS client shows the correct value and hrStorageAllocationUnits is "INTEGER: 32768 Bytes"
zpool status -x
still returns0
if pools are unhealthy.