banshee is under active development: collectors will keep changing, and a version you publish will likely need adjustments. For stable use, wait for version 1.0.0.

Storage

banshee/storage-collection/storage/truenas/snmp/scale/

pools

The health of each ZFS pool of a TrueNAS SCALE 23.10 or later by SNMP (TRUENAS-MIB).

  • storage
  • truenas
  • scale
  • zfs
  • pool
  • snmp

by banshee1 installation1 version

v1Latest

Published on October 27, 2026. First version.

Keen 1.0.0 · 35 lines
// The health of each ZFS pool of a TrueNAS SCALE, by SNMP (TRUENAS-MIB, revision 2022-12-21), served by
// TrueNAS SCALE 23.10 and later. Its pool table carries no size: the space of a pool is read by the REST API
// (storage/truenas/https/api-v2.0/pools) or by SSH (storage/zfs/ssh/pools).
// zpoolHealth is a word, as zpool status writes it ("ONLINE", "DEGRADED"), read in lower case.
need('protocol:snmp');

per('pool', 'Pools');
output('health', 'text', array('label' => 'Health', 'per' => 'pool'));

watch.expect('unhealthy', 'Pool not online', 'health', array('warning' => array('online')));
watch.state('failed', 'Pool failed', 'health', array('critical' => array('faulted', 'unavail', 'removed', 'suspended')));
watch.missing('missing', 'Pool missing', 'health', array('enabled' => false));

// TRUENAS-MIB, zpoolTable (1.3.6.1.4.1.50536.1.1.1), by zpoolIndex: zpoolName and zpoolHealth.
$pools = snmp.table(array(
    'name'   => '1.3.6.1.4.1.50536.1.1.1.1.2',
    'health' => '1.3.6.1.4.1.50536.1.1.1.1.3',
));

$read = 0;
foreach ($pools as $row) {
    if (!list.has($row, 'name') || !list.has($row, 'health')) {
        continue;
    }
    // FREENAS-MIB puts zpoolAllocationUnits, a number, in this column: the agent of a TrueNAS CORE.
    if (text.is_number($row['health'])) {
        fail('misconfigured', 'This agent serves FREENAS-MIB, not TRUENAS-MIB',
            'A TrueNAS CORE, or a TrueNAS SCALE 22.12 or earlier: use storage/truenas/snmp/core/pools.');
    }
    $read = $read + 1;
    value('health', text.lower(text.trim($row['health'])), $row['name']);
}
if ($read == 0) {
    fail('misconfigured', 'The agent serves no pool (zpoolTable, TRUENAS-MIB)');
}