Zabbix Template dla NetBSD - bo Zabbix o nas zapomniał
No i stało się - po latach używania Zabbixa do monitorowania wszystkiego co się rusza (i nie rusza), postanowiłem w końcu ogarnąć monitoring moich maszyn NetBSD na tip top. I tu pojawił się problem: oficjalnego template dla NetBSD nie ma. Serio. Jest dla Linuxa, FreeBSD, OpenBSD, AIX, HP-UX, Solaris... ale NetBSD? Nie.

Co nie działa z template Linux?
Moja pierwsza myśl przez lata była prosta - "wezmę Linuxowy, jakoś to będzie". No i rzeczywiście - jakoś to było. Czyli tak sobie.
Template Linux dodaje całą masę itemów, które na NetBSD po prostu nie istnieją:
- CPU guest time - to jest dla wirtualizacji KVM, NetBSD tego nie ma
- CPU guest nice time - j.w.
- CPU iowait time - Linuxowatość
- CPU softirq time - Linuxpwatość
- CPU steal time - też wirtualizacja
Wszystkie te itemy świecą się na żółto z "Unsupported item key" i zaśmiecają dashboard.
OpenBSD template - lepiej, ale...
Druga próba - template OpenBSD. Oba systemy to BSD, więc powinno być lepiej, prawda? I faktycznie - większość rzeczy działa. Ale nie wszystko.
Co nie działa z OpenBSD template na NetBSD:
system.cpu.util[,idle]- zwraca "Collector is not started" (bug w buildzie agenta?)system.cpu.util[,user]- j.w.system.cpu.util[,system]- j.w.system.cpu.util[,interrupt]- j.w.system.cpu.util[,nice]- j.w.system.swap.size[,free]- "Unsupported item key"system.swap.size[,total]- j.w.system.swap.size[,pfree]- j.w.
Czyli de facto cały monitoring CPU i swap nie działał. Super.
Co ciekawe, proces collectora w agencie działa (zabbix_agentd: collector [idle 1 sec]), ale wewnętrzne API zwraca błąd. Wygląda na bug w buildzie agenta z pkgsrc.

Rozwiązanie - własny template z UserParameters
Skoro Zabbix agent nie wspiera natywnie tych metryk na NetBSD, to zrobimy to po swojemu - przez UserParameters. To nic innego jak własne komendy, które agent wykonuje i zwraca wynik.
Krok 1: Dodaj UserParameters do agenta
Edytuj /usr/pkg/etc/zabbix_agentd.conf i dodaj na końcu:
### NetBSD custom monitoring ###
# Swap (bytes)
UserParameter=netbsd.swap.total,/sbin/swapctl -s | awk '/total:/ {print $2 * 512}'
UserParameter=netbsd.swap.used,/sbin/swapctl -s | awk '/total:/ {print $3 * 512}'
UserParameter=netbsd.swap.free,/sbin/swapctl -s | awk '/total:/ {print ($2 - $3) * 512}'
UserParameter=netbsd.swap.pfree,/sbin/swapctl -s | awk '/total:/ {if($2>0) print (($2-$3)/$2)*100; else print 100}'
# CPU % (vmstat 1 second sample)
UserParameter=netbsd.cpu.user,/usr/bin/vmstat 1 2 | tail -1 | awk '{print $16}'
UserParameter=netbsd.cpu.system,/usr/bin/vmstat 1 2 | tail -1 | awk '{print $17}'
UserParameter=netbsd.cpu.idle,/usr/bin/vmstat 1 2 | tail -1 | awk '{print $18}'
Krok 2: Restart agenta
/etc/rc.d/zabbix_agentd restart
Krok 3: Test
zabbix_agentd -t "netbsd.swap.total"
zabbix_agentd -t "netbsd.swap.free"
zabbix_agentd -t "netbsd.cpu.idle"
zabbix_agentd -t "netbsd.cpu.user"
zabbix_agentd -t "netbsd.cpu.system"
Powinieneś zobaczyć coś takiego:
netbsd.swap.total [t|1069547520]
netbsd.swap.free [t|1069547520]
netbsd.cpu.idle [t|98]
netbsd.cpu.user [t|0]
netbsd.cpu.system [t|1]

https://s.click.aliexpress.com/e/_c3XXmbchhttps://s.click.aliexpress.com/e/_c3XXmbch

Krok 4: Import template
Pobierz template (link poniżej po zalogowaniu) i zaimportuj go w Zabbix:
Data collection → Templates → Import
Krok 5: Przypisz template do hosta
- Data collection → Hosts → (twój host NetBSD)
- Templates → odlinkuj stary template (Linux/OpenBSD)
- Dodaj "NetBSD by Zabbix agent"
- Update
Co zawiera template?
Template bazuje na oficjalnym OpenBSD template, ale z poprawkami dla NetBSD:
Działające itemy standardowe:
- System uptime, boot time, hostname, uname
- Load average (1/5/15 min)
- Liczba procesów (total, running)
- Pamięć RAM (total, available)
- Context switches, interrupts per second
- Kernel limits (maxfiles, maxproc)
- Checksum /etc/passwd (security)
- Network interface discovery + traffic
- Filesystem discovery + usage
Itemy przez UserParameters:
- CPU idle/user/system (%)
- Swap total/used/free/pfree
Filesystem types dla NetBSD:
^(ffs|ufs|lfs|ext2fs|msdos|ntfs|cd9660|nfs|tmpfs)$
Excluded paths:
^(/dev|/kern|/proc|.+/shm$)
Znane ograniczenia
- CPU nice/interrupt - vmstat na NetBSD nie pokazuje osobno, więc nie ma w template
- Każdy host NetBSD musi mieć UserParameters - bez nich swap i CPU nie będą działać
- vmstat robi 1-sekundowy sample - wartości CPU mogą mieć ~1s opóźnienia
Pro tip: Usuń osierocone itemy
Jeśli wcześniej używałeś Linux template i zrobiłeś "Unlink" (bez "Clear"), stare itemy zostały na hoście. Trzeba je usunąć ręcznie:
Data collection → Hosts → (host) → Items → filtruj po "CPU guest" → zaznacz → Delete
Template testowany na NetBSD 10.1 z Zabbix Agent 6.4.12. Jeśli znajdziesz jakieś problemy lub masz pomysły na ulepszenia - daj znać w komentarzach.