<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Monitoring | przeqpiciel's site</title><link>https://przeqpiciel.com/tags/monitoring/</link><description>Blog techniczny o homelabie, Linuxie i innych ciekawych tematach</description><generator>Hugo</generator><language>pl</language><managingEditor>przeqpiciel</managingEditor><webMaster>przeqpiciel</webMaster><lastBuildDate>Wed, 08 Jul 2026 19:37:10 +0200</lastBuildDate><atom:link href="https://przeqpiciel.com/tags/monitoring/index.xml" rel="self" type="application/rss+xml"/><item><title>Monitoring stron i aplikacji webowych w Zabbiksie</title><link>https://przeqpiciel.com/posts/zabbix-web-monitoring/</link><pubDate>Thu, 23 Jul 2026 00:00:00 +0000</pubDate><author>przeqpiciel</author><guid>https://przeqpiciel.com/posts/zabbix-web-monitoring/</guid><description>&lt;p&gt;Trzecia część serii o Zabbiksie (poprzednie: &lt;a href="https://przeqpiciel.com/posts/how-to-monitor-your-services/"&gt;wprowadzenie&lt;/a&gt;
i &lt;a href="https://przeqpiciel.com/posts/zabbix-custom-templates/"&gt;własne szablony&lt;/a&gt;). Do tej pory pytaliśmy
Zabbiksa &amp;ldquo;czy hosta znaczy działa&amp;rdquo; — CPU, dysk, konkretna usługa. Tym razem
zapytamy inaczej: &amp;ldquo;czy strona faktycznie się ładuje tak, jak powinna, z
perspektywy kogoś, kto wpisuje adres w przeglądarce&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Od zwykłego itemu HTTP agent (który po prostu odpytuje URL) różni to jedna
rzecz: &lt;strong&gt;Web scenario może mieć wiele kroków&lt;/strong&gt;, wykonywanych po kolei, z
zachowaniem ciasteczek między nimi. Dzięki temu da się nim zasymulować nie
tylko &amp;ldquo;czy strona odpowiada&amp;rdquo;, ale też prosty przepływ użytkownika — np.
wejście na stronę logowania, wysłanie formularza, sprawdzenie, czy trafiłeś
na stronę po zalogowaniu.&lt;/p&gt;</description><content:encoded>&lt;p&gt;Trzecia część serii o Zabbiksie (poprzednie: &lt;a href="https://przeqpiciel.com/posts/how-to-monitor-your-services/"&gt;wprowadzenie&lt;/a&gt;
i &lt;a href="https://przeqpiciel.com/posts/zabbix-custom-templates/"&gt;własne szablony&lt;/a&gt;). Do tej pory pytaliśmy
Zabbiksa &amp;ldquo;czy hosta znaczy działa&amp;rdquo; — CPU, dysk, konkretna usługa. Tym razem
zapytamy inaczej: &amp;ldquo;czy strona faktycznie się ładuje tak, jak powinna, z
perspektywy kogoś, kto wpisuje adres w przeglądarce&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Od zwykłego itemu HTTP agent (który po prostu odpytuje URL) różni to jedna
rzecz: &lt;strong&gt;Web scenario może mieć wiele kroków&lt;/strong&gt;, wykonywanych po kolei, z
zachowaniem ciasteczek między nimi. Dzięki temu da się nim zasymulować nie
tylko &amp;ldquo;czy strona odpowiada&amp;rdquo;, ale też prosty przepływ użytkownika — np.
wejście na stronę logowania, wysłanie formularza, sprawdzenie, czy trafiłeś
na stronę po zalogowaniu.&lt;/p&gt;
&lt;h1 id="tworzenie-scenariusza"&gt;Tworzenie scenariusza&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Data collection → Hosts&lt;/strong&gt;, wybierz hosta (albo dedykowanego, czysto
&amp;ldquo;logicznego&amp;rdquo; hosta reprezentującego stronę — tak zwykle jest wygodniej niż
wieszać to pod hostem serwera), zakładka &lt;strong&gt;Web → Create web scenario&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Na poziomie scenariusza ustawiasz m.in.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Name&lt;/strong&gt; — nazwa, po której będziesz go rozpoznawać w triggerach,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Update interval&lt;/strong&gt; — jak często Zabbix ma odpalać cały scenariusz,&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent&lt;/strong&gt; — jaki User-Agent ma być wysyłany (przydatne, jeśli backend
różnicuje odpowiedź po nagłówku).&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="pierwszy-krok-scenariusza"&gt;Pierwszy krok scenariusza&lt;/h1&gt;
&lt;p&gt;Zakładka &lt;strong&gt;Steps → Add&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;Strona główna&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;URL: &lt;code&gt;https://przyklad.local/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Required status codes: &lt;code&gt;200&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Required string: (opcjonalnie) fragment tekstu, który musi wystąpić w
odpowiedzi, np. &lt;code&gt;&amp;lt;/html&amp;gt;&lt;/code&gt; albo coś specyficznego dla Twojej strony — jeśli
serwer zwróci 200, ale wygeneruje pustą stronę błędu, kod HTTP tego nie
wychwyci, a required string tak,&lt;/li&gt;
&lt;li&gt;Timeout: &lt;code&gt;5s&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jeśli chcesz zasymulować logowanie, dodaj drugi krok wskazujący na endpoint
formularza, z wypełnionymi polami POST w sekcji &lt;strong&gt;Post fields&lt;/strong&gt; (np.
&lt;code&gt;username=demo&amp;amp;password=demo&lt;/code&gt;) i kolejnym &lt;code&gt;Required string&lt;/code&gt; sprawdzającym coś,
co pojawia się tylko po zalogowaniu.&lt;/p&gt;
&lt;div class="hint hint--warning"&gt;
 &lt;span class="hint-icon"&gt;⚠️&lt;/span&gt;
 &lt;div class="hint-content"&gt;
 Nie trzymaj w konfiguracji Zabbiksa prawdziwych, produkcyjnych danych
logowania — załóż osobne, ograniczone konto testowe wyłącznie do
monitoringu.
 &lt;/div&gt;
&lt;/div&gt;

&lt;h1 id="co-zabbix-mierzy-sam-z-siebie"&gt;Co Zabbix mierzy sam z siebie&lt;/h1&gt;
&lt;p&gt;Po zapisaniu scenariusza, bez dodatkowej konfiguracji, w &lt;strong&gt;Monitoring →
Latest data&lt;/strong&gt; zaczną się pojawiać m.in.:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;czas odpowiedzi każdego kroku,&lt;/li&gt;
&lt;li&gt;kod odpowiedzi HTTP każdego kroku,&lt;/li&gt;
&lt;li&gt;prędkość pobierania,&lt;/li&gt;
&lt;li&gt;liczba kroku, na którym scenariusz ostatnio zawiódł (0 = wszystko OK).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Te dane są też dostępne jako klucze itemów, których możesz użyć bezpośrednio
w wyrażeniach triggerów — nie musisz ręcznie dodawać dla nich osobnych
itemów.&lt;/p&gt;
&lt;h1 id="trigger-na-porażkę-scenariusza"&gt;Trigger na porażkę scenariusza&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Data collection → Hosts → Triggers (dla hosta, pod którym wisi scenariusz)
→ Create trigger&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Name: &lt;code&gt;Scenariusz &amp;quot;{ITEM.VALUE}&amp;quot; zawiódł&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Severity: &lt;code&gt;High&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Expression:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;last(/Host/web.test.fail[Strona główna])&amp;gt;0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;web.test.fail[&amp;lt;nazwa scenariusza&amp;gt;]&lt;/code&gt; zwraca numer kroku, na którym scenariusz
się wysypał — &lt;code&gt;0&lt;/code&gt;, gdy wszystko przeszło. Jeśli zależy Ci konkretnie na
czasie odpowiedzi, a nie samym sukcesie/porażce, dorzuć drugi trigger na
konkretny krok:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;avg(/Host/web.test.time[Strona główna,Strona główna],5m)&amp;gt;2
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Ten drugi trigger zaalarmuje, gdy średni czas odpowiedzi z ostatnich 5 minut
przekroczy 2 sekundy — czyli zanim strona całkiem przestanie działać, ale gdy
już zauważalnie zwalnia.&lt;/p&gt;
&lt;h1 id="podsumowanie"&gt;Podsumowanie&lt;/h1&gt;
&lt;p&gt;Web scenario to w praktyce syntetyczny monitoring — Zabbix sam, regularnie,
odgrywa rolę użytkownika i mówi Ci, zanim dowiesz się tego od kogoś innego,
że coś na stronie przestało działać. W kolejnej części serii podepniemy
powiadomienia pod coś innego niż e-mail — webhooki, m.in. w kierunku
komunikatorów.&lt;/p&gt;</content:encoded></item></channel></rss>