bundles/zfs: add per-dataset metrics

This commit is contained in:
Franzi 2021-06-25 20:04:30 +02:00
parent 9cc324f84c
commit 1c10be5cdc
Signed by: kunsi
GPG key ID: 12E3D2136B818350
5 changed files with 792 additions and 1 deletions

View file

@ -0,0 +1,51 @@
#!/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,
))