changeset 118:69058ad170be

watch output from `zfs list -o space` as metrics
author drewp@bigasterisk.com
date Wed, 07 Dec 2022 23:02:57 -0800
parents fb87591c985d
children 51a471fa4d29
files files/zfs_metrics/zfs.mtail files/zfs_metrics/zfs_space_metrics.service files/zfs_metrics/zfs_space_metrics.sh package_lists.py system.py
diffstat 5 files changed, 50 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/files/zfs_metrics/zfs.mtail	Wed Dec 07 23:02:57 2022 -0800
@@ -0,0 +1,16 @@
+gauge zfs_space_avail           by name
+gauge zfs_space_used            by name
+gauge zfs_space_used_snap       by name
+gauge zfs_space_used_ds         by name
+gauge zfs_space_used_ref_reserv by name
+gauge zfs_space_used_child      by name
+
+# output of `zfs list -Hp -o space`
+/(?P<name>\S+)\s+(?P<f0>\d+)\s+(?P<f1>\d+)\s+(?P<f2>\d+)\s+(?P<f3>\d+)\s+(?P<f4>\d+)\s+(?P<f5>\d+)/ {
+    zfs_space_avail[$name] = $f0
+    zfs_space_used[$name] = $f1
+    zfs_space_used_snap[$name] = $f2
+    zfs_space_used_ds[$name] = $f3
+    zfs_space_used_ref_reserv[$name] = $f4
+    zfs_space_used_child[$name] = $f5
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/files/zfs_metrics/zfs_space_metrics.service	Wed Dec 07 23:02:57 2022 -0800
@@ -0,0 +1,13 @@
+# written by pyinfra
+
+[Unit]
+Description=zfs space metrics
+After=zfs-mount.service
+
+[Service]
+Type=simple
+
+ExecStart=zsh /opt/zfs_metrics/zfs_space_metrics.sh
+
+[Install]
+WantedBy=multi-user.target
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/files/zfs_metrics/zfs_space_metrics.sh	Wed Dec 07 23:02:57 2022 -0800
@@ -0,0 +1,12 @@
+#!/bin/zsh
+
+LOG=/tmp/zfs_space_metrics_pipe
+rm -f ${LOG}
+mkfifo ${LOG}
+
+while (true) {
+    zfs list -Hp -o space                           
+    sleep 1m
+} > ${LOG} &
+
+mtail -logtostderr -progs /opt/zfs_metrics/ -port 9985 -logs ${LOG}
\ No newline at end of file
--- a/package_lists.py	Sat Nov 26 19:56:06 2022 -0800
+++ b/package_lists.py	Wed Dec 07 23:02:57 2022 -0800
@@ -5,6 +5,7 @@
     'iproute2',  # needed for wireguard
     'iptables',
     'mosquitto-clients',
+    'mtail',
     'rsync',
     'udns-utils',
     'vim-tiny',
--- a/system.py	Sat Nov 26 19:56:06 2022 -0800
+++ b/system.py	Wed Dec 07 23:02:57 2022 -0800
@@ -63,6 +63,13 @@
         files.template(src="templates/webforward.service.j2", dest=f"/etc/systemd/system/web_forward_{port}.service", port=port)
         systemd.service(service=f'web_forward_{port}', enabled=True, restarted=True)
 
+def zfs_metrics():
+    files.put(src='files/zfs_metrics/zfs_space_metrics.sh', dest='/opt/zfs_metrics/zfs_space_metrics.sh')
+    files.put(src='files/zfs_metrics/zfs.mtail', dest='/opt/zfs_metrics/zfs.mtail')
+    files.put(src='files/zfs_metrics/zfs_space_metrics.service',
+               dest=f'/etc/systemd/system/zfs_space_metrics.service')
+    systemd.service(service=f'zfs_space_metrics', enabled=True, restarted=True, daemon_reload=True)
+
 timezone()
 fstab()
 
@@ -80,6 +87,7 @@
 
 if host.name == 'bang':
     nfs_server()
+    zfs_metrics()
 
 if host.name == 'prime':
     smaller_journals()
\ No newline at end of file