Closed dlangille closed 9 months ago
Hi,
I bumped into this yesterday.
I found sysctl kstat.zfs.misc.arcstats.p is not present in FreeBSD 14.
I have been using zfs-freebsd.py and I'm trying this naive diff:
diff -r 64c295527140 snmp/zfs-freebsd.py
--- a/snmp/zfs-freebsd.py Tue Dec 19 11:12:18 2023 +1030
+++ b/snmp/zfs-freebsd.py Wed Dec 20 08:37:10 2023 +1030
@@ -7,7 +7,7 @@
import subprocess
SYSCTL = "/sbin/sysctl"
-ZPOOL = "/usr/local/sbin/zpool"
+ZPOOL = "/sbin/zpool"
def percent(numerator, denominator, default=0):
@@ -72,13 +72,24 @@
output["target_size"] = stats["kstat.zfs.misc.arcstats.c"]
# ARC size breakdown
- output["mfu_size"] = (
- stats["kstat.zfs.misc.arcstats.size"] - stats["kstat.zfs.misc.arcstats.p"]
- )
- output["p"] = stats["kstat.zfs.misc.arcstats.p"]
- output["rec_used_per"] = (
- stats["kstat.zfs.misc.arcstats.p"] / stats["kstat.zfs.misc.arcstats.size"] * 100
- )
+ if "kstat.zfs.misc.arcstats.p" in stats:
+ output["mfu_size"] = (
+ stats["kstat.zfs.misc.arcstats.size"] - stats["kstat.zfs.misc.arcstats.p"]
+ )
+ output["p"] = stats["kstat.zfs.misc.arcstats.p"]
+ output["rec_used_per"] = (
+ stats["kstat.zfs.misc.arcstats.p"] / stats["kstat.zfs.misc.arcstats.size"] * 100
+ )
+ else:
+ # kstat.zfs.misc.arcstats.p doesn't seem to exist in FreeBSD 14.0
+ output["mfu_size"] = stats["kstat.zfs.misc.arcstats.mfu_size"]
+ output["p"] = (
+ stats["kstat.zfs.misc.arcstats.size"] - stats["kstat.zfs.misc.arcstats.mfu_size"]
+ )
+ output["rec_used_per"] = (
+ output["p"] / stats["kstat.zfs.misc.arcstats.size"] * 100
+ )
+
output["freq_used_per"] = (
output["mfu_size"] / stats["kstat.zfs.misc.arcstats.size"] * 100
)
@dlangille @Bobzikwick
Looking at that now. Also you both are using really out of date extends as well. https://github.com/librenms/librenms-agent/blob/master/snmp/zfs is the one you should be using for either Linux or FreeBSD.
ohh! derp, just realized it said v. 3 there, okay that is the right one, you just have it named like the really old one
@Bobzikwick Thanks for figuring out a work around for when p
is missing there. The extend has been updated now.
@dlangille Let me know if you have any issues with the new one.
@VVelox For graphing, it's nan
across the board. Only one host has been updated with the new zfs
script.
So I did this: at device/120/capture
, click on Poller
, then on Run
, then on Download
.
Looking in the file, I see:
Application: zfs, app_id=4978SNMP['/usr/local/bin/snmpget' '-v3' '-l' 'authPriv' '-n' "" '-a' 'SHA' '-A' 'PASSWORD' '-u' 'USER' '-x' 'AES' '-X' 'PASSWORD' '-Oqv' '-m' 'NET-SNMP-EXTEND-MIB' '-M' '/usr/local/www/librenms/mibs' 'udp:HOSTNAME:161' 'nsExtendOutputFull.3.122.102.115']
env: perl: No such file or directory
zfs:-3:Invalid JSON
SQL[update `applications` set `timestamp` = NOW() where `app_id` = ? [4978] 0.87ms]
I suspect that is because perl
is on on the PATH
.
My fix: #!/usr/local/bin/perl
This is a frequent patch FYI (e.g. https://cgit.freebsd.org/ports/tree/net-mgmt/librenms/files/patch-LibreNMS_wrapper.py)
Now my graphs are working.
@dlangille This can easily be fixed via prefixing the command with env like this...
extend logsize /usr/bin/env PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin /usr/local/etc/snmp-extends/logsize -b
@VVelox That's a clever way and puts it all within snmpd.conf
without affecting the original script.
@dlangille Yeah. Got in the habit of that as lots of OSes don't have meaningful value populated for $ENV{PATH} for when it comes to snmpd. Also great to set for cron as well. Although there there can easily just be set once instead of needing env.
Logging of zfs stats has stopped working after upgrading a host from FreeBSD 13.2 to FreeBSD 14.0 on Sunday.
On FreeBSD 14, with code pulled down from today, I get.
If it helps: