bundlewrap/bundles/zfs/files/telegraf-per-dataset

52 lines
1.1 KiB
Text
Raw Normal View History

2021-06-25 18:04:30 +00:00
#!/usr/bin/env python3
from subprocess import check_output
pools = check_output(
['/usr/sbin/zpool', 'list', '-Hpo', 'name,free,size'],
env={
'LC_ALL': 'C',
},
).decode('UTF-8')
datasets = check_output(
['/usr/sbin/zfs', 'list', '-Hpo', 'name,usedbydataset,usedsnap,compressratio'],
env={
'LC_ALL': 'C',
},
).decode('UTF-8')
zpools = {}
for line in pools.splitlines():
name, free, total = line.split()
zpools[name] = {
'free': free,
'total': total,
}
print('zfs_pool,pool={} size={}i,free={}i'.format(name, total, free))
for line in datasets.splitlines():
name, used, usedsnap, compressratio = line.split()
pool = name.split('/')[0]
if '/' not in name:
# covered by pool metrics above
continue
if pool not in zpools:
raise Exception('BUG: {} in datasets, but {} not in pools'.format(name, pool))
if compressratio[-1] == 'x':
compressratio = compressratio[:-1]
print('zfs_dataset,pool={},dataset={} used={}i,usedsnap={}i,compressratio={}'.format(
pool,
name,
used,
usedsnap,
compressratio,
))