Pokud používáte Throttling u stavových položek můžete se potkat s falešně pozitivními alerty. Throttling vám totiž neumožňuje použít funkce min
, max
nebo avg
pro vyhodnocení více hodnot. Je to proto, že Zabbix stejné, po sobě jdoucí stavy zahazuje.
Popis problematiky
U stavových položek, jako jsou stavy Windows služeb nejspíše používáte filtrování stejných hodnot v řadě (tzv. Throttling). Jistě jste si tedy všimli, že Throttling nemůžete použít, protože se pak neaktivuje trigger, který je standardně nastaven na 3 po sobě jdoucí hodnoty. Nicméně existuje řešení, jak tuto situaci změnit. Toto řešení vám umožní v rozsáhlých systémech ušetřit významné množství zdrojů tím, že nebudete ukládat nerelavantní data. Návod vychází ze standardní šablony pro Windows služby a slouží jako obecný příklad. Pokud například máte 1000 Windows serverů, na každém běží 100 služeb a kontrola probíhá každou minutu, pak bez tohoto vylepšení se průměrně každou sekundu načte 1 660 hodnot. S touto malou změnou v konfiguraci se situace změní na odhadem 0-100 hodnot za minutu, v závislosti na četnosti změn stavu služeb. Uvedená čísla jsou orientační a ve vašem prostředí se mohou lišit.
Snadné řešení
Pro vyřešení tohoto problému můžete použít preprocessing. Ten provede manipulaci s chybovou hodnotou (přidá časovou značku) tak, aby byla chybová hodnota pokaždé jiná. Chybová hodnota tedy projde skrz throttling (discard unchanged). Hodnota indikující správný stav se opakuje a je pomocí throttlingu (discard unchanged) zahazována. Nastavení můžete v preprocessingu provést následovně:
- První krok přidává časovou značku k chybové hodnotě
- Druhý krok zahazuje nezměněné hodnoty
- Třetí krok z časové značky vytáhne původní chybovou hodnotu
Přidání časové značky je jednoduché:
if (value == 0 ) {
return value;
} else {
return (Math.floor(Date.now() / 1000) - 1707000000 )*1000 + value;
}
Po průchodu throttlingem získáte zpět původní hodnotu pomocí výrazu:
return value % 1000;
Výše uvedený příklad funguje pro chybové stavy od 1 – 999 a pro stav s hodnotou 0, kdy je stav OK.
S výše uvedeným preprocessingem můžete stále používat definici triggeru s funkcemi min/max/avg a bude to fungovat dle očekávání. Je to proto, že chybové hodnoty máte v klasickém intervalu:
min(//service.info["{#SERVICE.NAME}",state],#3)<>0
Dejte nám Like, sdílejte nás nebo nás sledujte 😍
Ať vám nic neunikne: