Monitoring virtualizace bhyve ve FreeBSD pomocí Zabbixu

10. 1. 2024
Doba čtení: 6 minut

Sdílet

Autor: FreeBSD
Zaměříme se na detailní popis monitorování virtualizačního prostředí FreeBSD bhyve s použitím monitorovacího systému Zabbix. Popíšeme si hlubší pohled na možnost monitorování VM hostů pomocí processing JSONPath.

Co je bhyve?

V nedávném článku jsme podrobně rozebrali virtualizační technologii bhyve, zdůraznili její výhody a ukázali, jak snadno ji lze implementovat pomocí aplikace vm z balíčku vm-bhyve. Přestože má tato technologie řadu přínosů, v širším kontextu IT průmyslu zůstává relativně málo známá a její praktické využití je zatím omezené. V důsledku toho pro ni existuje jen omezené množství specializovaných monitorovacích nástrojů.

Na fóru FreeBSD se objevilo několik diskuzí na toto téma, kde uživatelé sdíleli zkušenosti s různými monitorovacími nástroji. Nebyla tam ale nabídnuta žádná přímá řešení nebo nástroje, které by se daly jednoduše implementovat pro monitorování bhyve.

Vzhledem k mé dlouhodobé preferenci Zabbixu jsem se rozhodl hledat způsoby, jak integrovat monitorování bhyve s tímto robustním systémem. Tento proces zahrnoval hledání metod pro získávání informací o objektech bhyve a přenos těchto dat do Zabbixu. Tento článek se zaměřuje na popis celého průzkumu a nabízí průvodce pro ty, kteří chtějí Zabbix využít pro efektivní monitorování bhyve.

Jak monitorovat?

V předchozím článku jsme se věnovali aplikaci vm, klíčové součásti balíčku vm-bhyve, která je nezbytná pro efektivní sběr dat, například o virtuálních hostech. Zatímco Zabbix nabízí široké spektrum možností pro zpracování dat, včetně výstupu z aplikace vm, optimalizace tohoto procesu je klíčová. Namísto složitého parsování tradičních textových výstupů, často vyžadujících použití regulárních výrazů, je přístup založený na strukturovaném formátu dat výrazně efektivnější.

V tomto kontextu jsem prozkoumal možnosti využití JSON (JavaScript Object Notation) pro získávání seznamu hostů. JSON je lehký formát pro výměnu dat, který je snadno čitelný pro lidi a zároveň jednoduše zpracovatelný pro počítače. Jeho syntaxe je odvozena z objektů JavaScriptu, ale jeho použití je univerzální a není omezeno jen na JavaScript. Tento jazykově nezávislý formát se stává stále populárnějším v různých programovacích jazycích.

Zabbix využívá JSONPath pro zpracování dat ve formátu JSON, což zjednodušuje integraci a zvyšuje efektivitu monitorovacích operací. Díky JSONu můžeme přistupovat k datům strukturovaně, což nám umožňuje lépe automatizovat a optimalizovat proces sběru a analýzy dat v rámci Zabbixu.

Aplikace vm z balíčku vm-bhyve

V současné době aktuální verze ještě nepodporuje JSON, nicméně již byl podán pull request, který má za cíl tuto funkcionalitu implementovat. Vzhledem k tomuto vývoji jsem se rozhodl využít tuto nadcházející vlastnost vm pro rozšíření monitorovacích schopností v Zabbixu.

# pkg info vm-bhyve-1.5.0
vm-bhyve-1.5.0
Name           : vm-bhyve
Version        : 1.5.0
Installed on   : Wed Jul 26 22:41:27 2023 CEST
Origin         : sysutils/vm-bhyve
Architecture   : FreeBSD:13:*
Prefix         : /usr/local
Categories     : sysutils
Licenses       : BSD2CLAUSE
Maintainer     : churchers@gmail.com
WWW            : https://github.com/churchers/vm-bhyve
Comment        : Management system for bhyve virtual machines
Options        :
        BHYVE_FIRMWARE : off
        EXAMPLES       : on
        GRUB2_BHYVE    : off
        TMUX           : off
Annotations    :
        repo_type      : binary
        repository     : FreeBSD
Flat size      : 243KiB
Description    :
A frontend for bhyve which provides the 'vm' command
Create/start/stop virtual machines easily
Bridged/NAT networking
BSD/Linux/Windows guest support

WWW: https://github.com/churchers/vm-bhyve

Jak získat podporu

Podpora JSONu je realizována přidáním nového parametru -j. Abychom tento parametr efektivně využili, je potřeba provést několik kroků. Například, můžeme postupovat takto:

# cd /opt
# git clone -b json-lists https://github.com/runhyve/vm-bhyve
# cd /opt/vm-bhyve
# /opt/vm-bhyve/vm list -j

Zavolání utility s volbami vm list -j produkuje výstup se seznamem všech virtuálních strojů a jejich parametry.

{
   "machines": [
      {
         "name": "debian12",
         "datastore": "default",
         "loader": "grub",
         "cpu": "1",
         "memory": "512M",
         "vnc": "-",
         "auto": "No",
         "state": "Stopped"
      },{
         "name": "fbsd14",
         "datastore": "default",
         "loader": "bhyveload",
         "cpu": "1",
         "memory": "512M",
         "vnc": "-",
         "auto": "No",
         "state": "Stopped"
      }
   ]
}

Pro přenos JSON dat do Zabbixu je nezbytné nastavit uživatelské parametry v Zabbix agentovi. Tento krok umožní agentovi rozpoznat a použít nové klíče, které jsou klíčové pro získávání JSON dat pro následné zpracování v Zabbixu. Tímto způsobem efektivně rozšíříme funkcionalitu agenta a zpřístupníme mu nové možnosti pro monitorování a sběr dat.

# cat /usr/local/etc/zabbix6/zabbix_agentd.conf.d/zbx.bhyve.conf
UserParameter=zbx.bhyve.vm.list,/usr/local/bin/sudo /usr/local/bin/zabbix-bhyve-list
UserParameter=zbx.bhyve.vm.switch.list,/usr/local/bin/sudo /usr/local/bin/zabbix-bhyve-switch-list
UserParameter=zbx.bhyve.vm.datastore.list,/usr/local/bin/sudo /usr/local/bin/zabbix-bhyve-datastore-listcat /usr/local/bin/zabbix-bhyve-list

# example cmd
cat /usr/local/bin/zabbix-bhyve-list
#!/bin/sh cd /opt/vm-bhyve /opt/vm-bhyve/vm list -j

Zabbix items

Autor: Lukáš Malý

Zabbix items – processing JSONPath

Autor: Lukáš Malý

Každý z nově vytvořených klíčů v Zabbixu slouží k sběru dat o různých prvcích, jako jsou hosté, switche a datová úložiště. Pro každou položku (item) je nastaven procesing pomocí JSONPath, s jednoduchými definicemi: $.machines pro hosty, $.switches pro switche a $.datastores pro datová úložiště. Tento přístup umožňuje efektivní extrakci a zpracování specifických dat z JSON struktury pro každou sledovanou kategorii.

LLD – Low Level Discovery

Pro automatické objevování jednotlivých virtuálních hostů na základě sbíraných dat je klíčové definovat pravidla Low-Level Discovery (LLD) v Zabbixu. Tato objevení se realizují pomocí typu položky (item) „Dependent item“ a definují LLD makro – {#BHYVE_NAME}, opět s jednoduchou JSONPath definicí $.name. Dále se pro jednotlivá discovery musí nadefinovat item prototypy a jejich processing již vypadá poněkud složitěji.

Kromě definice pravidel LLD je také důležité nastavit item prototypy pro každé objevení. Procesing těchto item prototypů je obvykle složitější, jelikož vyžaduje specifičtější konfiguraci a definici pro správné zachycení a zpracování relevantních dat z virtuálních hostů.V tabulce je přehled prototypů pro objevení hostů.

Item prototypy – Discovery bhyve machines
Item name Item key Processing JSONPath
VM Host {#BHYVE_NAME} auto zbx.bhyve.vm.auto[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.auto.first()
VM Host {#BHYVE_NAME} cpu zbx.bhyve.vm.cpu[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.cpu.first()
VM Host {#BHYVE_NAME} datastore zbx.bhyve.vm.datastore[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.datastore.first()
VM Host {#BHYVE_NAME} loader zbx.bhyve.vm.loader[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.loader.first()
VM Host {#BHYVE_NAME} memory zbx.bhyve.vm.memory[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.memory.first()
VM Host {#BHYVE_NAME} name zbx.bhyve.vm.name[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.name.first()
VM Host {#BHYVE_NAME} state zbx.bhyve.vm.state[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.state.first()
VM Host {#BHYVE_NAME} vnc zbx.bhyve.vm.vnc[{#BHYVE_NAME}] $.[?(@.name==‚{#BHYVE_NAME}‘)]­.vnc.first()

V rámci nastavení Low-Level Discovery (LLD) v Zabbixu je také možné definovat filtry. Ty mohou být použity k omezení objevování určitých entit, například k vyloučení konkrétních hostů z procesu monitorování. Tímto způsobem můžete zefektivnit monitorování tím, že se zaměříte pouze na ty hosty, které jsou pro vaše potřeby relevantní, a zároveň eliminujete zbytečnou zátěž systému sledováním nežádoucích nebo nepotřebných hostů.

Výsledek monitoringu hostů

Zabbix Latest data

Autor: Lukáš Malý

Šablona se vyvíjí

Šablona FreeBSD bhyve by Zabbix agent  aktuálně existuje, ale ještě je ve fázi vývoje. Tuto šablonu můžete najít na GitHubu, kde jsou k dispozici verze pro Zabbix 6.0 i 7.0. Jakmile bude do balíčku vm-bhyve integrována podpora pro JSON, uvažuji o tom, že tuto šablonu přidám do komunitního repozitáře, aby byla snadno dostupná pro širší komunitu uživatelů Zabbixu a bhyve.

V další fázi bych se rád věnoval libvirt, konkrétně jeho integraci s bhyve.  Příjemně mě překvapilo zjištění, že pro bhyve existuje specifický driver pro bhyve. Toto odhalení otevírá nové možnosti pro správu a monitorování virtualizovaných prostředí pomocí libvirt v kombinaci s bhyve technologií.

Autor článku

Pracuje jako systém administrátor – UNIX/Linux systémů. Vystudoval VOŠ Liberec, obor Počítačové systémy. Ve svém oboru prosazuje otevřená řešení IT infrastruktury.