Zabbix Template dla NetBSD - bo Zabbix o nas zapomniał

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.

Mini PC SOYO Intel Twin Lake N150 Procesor LPDDR5 12GB RAM 512GB ROM Windows 11 Pro MiniPC WiFi 5 Komputer stacjonarny - AliExpress 7
Smarter Shopping, Better Living! Aliexpress.com

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.

GMKtec G3 Mini PC Intel Alder Lake N100 Windows 11 Pro Komputer stacjonarny 8/16 GB RAM 256/512 GB PCIe M.2 SSD WiFi 6 BT5.2 Mini PC - AliExpress
Smarter Shopping, Better Living! Aliexpress.com

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

ERVPES Mini PC B20E Windows 11 Pro 8GB RAM 128GB ROM J3710 Mikro Komputer Stacjonarny Dual-Band Wifi Mini PC - AliExpress 7
Smarter Shopping, Better Living! Aliexpress.com


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

  1. Data collection → Hosts → (twój host NetBSD)
  2. Templates → odlinkuj stary template (Linux/OpenBSD)
  3. Dodaj "NetBSD by Zabbix agent"
  4. 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.

Download