Článek přečtěte do 6 min.

V tomto příspěvku na blogu vás provedeme vytvořením vlastní šablony pro sledování nejnovějších verzí Zabbix přímo z uživatelského rozhraní Zabbix (monitorujte nová vydání Zabbix nativně). Postupujte podle jednoduchého návodu, abyste věděli, jak na to:

Úvod

S vydáním Zabbix 7.0 je možné vidět, kterou verzi Zabbix používáte a jaká je nejnovější:

Samozřejmě velké zlepšení, ale (alespoň v 7.0.0rc1) mi chybí spouštěče, které by mě upozorňovaly, a možná je to opravdu zajímavé, o starších verzích není nic k dispozici.

Jakmile jsme viděli výše uvedený snímek obrazovky, začali jsme být zvědavý, odkud tato data skutečně pocházejí a co je k dispozici. Rychlý hluboký ponor do zdrojového kódu (https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/ui/js/class.software-version-check.js#18) odhalil adresu URL, která se používá pro tuto funkci: https://services.zabbix.com/updates/v1. Jakmile navštívíte tuto adresu URL, získáte pěkný výstup ve formátu JSON:

{
  "verze": [
    {
      "version": "5.0",
      "end_of_full_support": pravda,
      "poslední vydání": {
        "vytvořeno": "1711361454",
        "release": "5.0.42"
      }
    },
    {
      "version": "6.0",
      "end_of_full_support": nepravda,
      "poslední vydání": {
        "vytvořeno": "1716274679",
        "release": "6.0.30"
      }
    },
    {
      "version": "6.4",
      "end_of_full_support": nepravda,
      "poslední vydání": {
        "vytvořeno": "1716283254",
        "release": "6.4.15"
      }
    }
  ]
}

A jak možná víte, Zabbix je docela dobrý v analýze dat ve formátu JSON. Takže jsme vytvořili rychlou šablonu, abych to mohl spustit a být informován, jakmile bude vydána nová verze.

V níže uvedených příkladech jsem použil svou instanci 6.4, ale funguje to také na 6.0 a samozřejmě 7.0.

Budova šablony

Než se pustíme do stavební části, je důležité vymyslet nejlepší přístup pro tuto šablonu.

Myslíme, že jsou 2:

  • Vytvořte 1 položku HTTP a několik závislých položek pro různé verze
  • Vytvořte 1 položku HTTP, pravidlo LLD a několik prototypů položek.

Dáváme přednost cestě LLD, protože díky ní je šablona co nejdynamičtější (méně času na její údržbu), ale také zábavnější na vytváření!

Jak na to

Nejprve přejděte na Sběr dat -> Šablony a vytvořte tam novou šablonu:

Samozřejmě můžete změnit název šablony a skupiny. Je to zcela na vás.

Jakmile je šablona vytvořena, je to stále prázdná skořápka a musíme ji naplnit.

Začneme normální položkou typu HTTP agent:

(poznámka: snímek obrazovky je zkrácen)

Potřebujeme přidat 3 pole dotazu:

  • ‚type‘ s hodnotou ‚software_update_check‘
  • ‚version‘ s hodnotou ‚1.0‘
  • ‚software_update_check_hash‘ s 64 znaky: zde můžete dělat zábavné věci 😉 pro příklad jsme právě použili ‚here_are_exact_64_characters_needed_as_a_custom_hash_for_zabbix_‘

Když jdeme na cestu LLD, už jsem nastavil „Doba ukládání historie“ na „Neuchovávat historii“. Pokud vytváříte šablonu, doporučuje se uchovávat historii a ujistit se, že máte data, se kterými můžete pracovat pro zbytek šablony. Jakmile vše funguje, vraťte se k této položce a nezapomeňte změnit dobu ukládání Historie.

Na výše uvedeném snímku obrazovky můžete vidět, že jsem již použil 2 kroky předběžného zpracování.

Prvním je nahrazení textu ‚versions‘ textem ‚data‘. To se děje proto, že Zabbix očekává pole „data“ pro svou logiku LLD. Tato ‚data‘ nejsou k dispozici, tak jsem jen nahradil text ‚verze‘. Rychle a špinavě.
Druhým krokem předběžného zpracování je „vyřazení beze změny s tepem“. Dokud nebude žádné nové vydání, nezajímají mě data, která přišla, ale chci je uložit jednou denně, abych se ujistil, že položka stále funguje. S tímto přístupem sledujeme URL každých 30 minut, takže získáváme „rychlé“ aktualizace, ale stále nevyužíváme mnoho místa na disku.

Výsledek konfigurace předběžného zpracování:

Nyní je čas stisknout tlačítko „otestovat všechny kroky“ a zjistit, zda vše funguje.

Výsledek, který dostanete je:

{
  "data": [
    {
      "version": "5.0",
      "end_of_full_support": pravda,
      "poslední vydání": {
        "vytvořeno": "1711361454",
        "release": "5.0.42"
      }
    },
    {
      "version": "6.0",
      "end_of_full_support": nepravda,
      "poslední vydání": {
        "vytvořeno": "1716274679",
        "release": "6.0.30"
      }
    },
    {
      "version": "6.4",
      "end_of_full_support": nepravda,
      "poslední vydání": {
        "vytvořeno": "1716283254",
        "release": "6.4.15"
      }
    }
  ]
}

To je téměř totožné s informacemi přímo z adresy URL, kromě toho, že „verze“ je nahrazeno „data“. Skvělé. Takže jakmile uložíte tuto položku, budeme nyní sledovat vydání (nezapomeňte propojit šablonu s hostitelem, jinak se nic nestane)!
Tyto informace přitom nejsou absolutně vůbec užitečné, jelikož se jedná pouze o textovou část. Musíme to analyzovat a LLD je způsob, jak jít.

V šabloně přejdeme na „Pravidla zjišťování“ a v pravém horním rohu klikneme na „Vytvořit pravidlo zjišťování“.
Nyní vytvoříme nové pravidlo LLD, které se nebude dotazovat na samotný web, ale bude získávat informace od agenta HTTP, kterého jsme právě vytvořili.

Na výše uvedeném snímku obrazovky vidíte, jak je nakonfigurován. název, zadejte ‚Závislá položka‘ nějaký klíč jen proto, že Zabbix vyžaduje klíč a položka Master je položka agenta HTTP, kterou jsme právě vytvořili.

Nyní jsou všechna data z položky http agent vložena do pravidla LLD, jakmile jsou přijata, a musíme z nich vytvořit makra LLD.

Takže v pravidle Discovery přejdete na 3. kartu „makra LLD“ a přidáte tam nové makro:

{#VERSION} s JSONPATH$..version.first()

Jakmile je toto hotovo, uložte pravidlo LLD a pojďme vytvořit prototypy položek.

První prototyp položky je nejsložitější, ostatní jsou víceméně „copy/paste“.

Vytvoříme nový prototyp položky, který vypadá takto:

Vzhledem k tomu, že typ je závislý a získává všechny informace z hlavní položky agenta HTTP, je zapotřebí předběžného zpracování, aby se odfiltrovaly pouze ty konkrétní informace, které jsou potřeba. Přejděte na kartu předběžného zpracování a přidejte tam krok JSONpath:

Pro účely kopírování/vkládání: $.data.[?(@.version=='{#VERSION}‘)].latest_release.created.first()
V tomto kroku se odehrává docela kouzla. Řekneme mu, aby použil cestu JSON k nalezení správné hodnoty, ale existuje také vyhledávání:

[?(@.version=='{#VERSION}')]

To, co zde děláme, je, že mu říkáme, aby přešel do pole dat a hledal ‚verze‘ pole s hodnotou {#VERSION}. Makro LLD {#VERSION} bude samozřejmě dynamicky nahrazeno pravidlem zjišťování se správnou verzí. Jakmile nalezne objekt verze, jděte dovnitř a najděte objekt ‚latest_release‘ a od tohoto objektu chceme hodnotu ‚vytvořeno‘. Nyní se nám vrátí doba epochy tohoto vydání a v položce to analyzujeme pomocí Unit unixtime.

Uložte položku a okamžitě ji naklonujte, abyste vytvořili prototyp 2. položky, abyste získali stav podpory:

Zde změníme typ informace a samozřejmě předzpracování by se mělo mírně lišit, protože hledáme jiný objekt:

JSONPath:

$.data.[?(@.version=='{#VERSION}')].end_of_full_support.first()

Uložte si také tuto položku a pojďme vytvořit naši poslední položku, aby se zobrazilo vedlejší číslo vydání:

Předzpracování je opět mírně odlišné:

JSONPath:

$.data.[?(@.version=='{#VERSION}')].latest_release.release.first()

V tomto okamžiku byste měli mít 1 hlavní položku, 1 pravidlo LLD a 3 prototypy položek.

Nyní vytvořte nového hostitele a propojte s ním tuto šablonu. Poměrně rychle byste měli vidět přicházející data a vše by mělo být pěkně analyzováno:

Jediné, co nyní chybí, je spouštěč, který vás upozorní, jakmile bude vydána nová verze, takže se vraťme k šabloně, pravidlu zjišťování a najděte prototypy spouště. Vytvořte nový, který vypadá takto:

Vzhledem k tomu, že jsme vyplnili i sudý název, bude název našeho problému odrážet již nejnovější verzi:

Užijte si svou novou šablonu! 🙂

Zdroj: Zabbix