How to monitor your services

Czy zastanawiałeś się kiedykolwiek, w jaki sposób administratorzy monitorują usługi, za które są odpowiedzialni? Chciałbyś także dostać powiadomienie zawczasu, że kończy się miejsce na dysku? A może informację o końcu żywota dysku twardego w maszynie i mieć szansę uratować dane, zanim dysk dokona swego żywota? A może znudziło Cię otrzymywanie informacji od osób postronnych, że dana usługa właśnie nie działa, mimo że byłeś przekonany, że te ostatnie poprawki nic nie popsuły?

Do tego i wielu innych rzeczy wykorzystuje się oprogramowanie, którego zadaniem jest powtarzalne sprawdzanie wielu parametrów usługi w równych odstępach czasu. W przypadku parametrów, które nie są akceptowalne, system wysyła powiadomienie do osoby odpowiedzialnej, że dzieje się coś niedobrego. W tym wpisie poruszać będę konfigurację Zabbix. Jednak warto wiedzieć o istnieniu innych i dobraniu według własnego upodobania. Są to Nagios i jego fork Icinga2, CheckMK, UptimeKuma i pewnie kilka innych, które w tej chwili nie przychodzą mi do głowy.

Wszelkie informacje opisywane w tym artykule dotyczące sposobu instalacji oraz konfiguracji Zabbix są do znalezienia w oficjalnej dokumentacji

Instalacja

Instalacja serwera Zabbix jest niczym spacer po parku w letni poranek. Wystarczy udać się do konfiguratora instalatora zabbix i postępować zgodnie z opisanymi krokami. Na poniższym zrzucie ekranu prezentuję mój wybór.

Obraz nie znaleziony: images/zabbix-choose.png

W punkcie 2 są opisane wszystkie kroki jakie są potrzebne do wykonania instalacji, ja natomiast muszę tutaj wskazać że przed przystąpieniem do instalacji wszystkiego dobrze by było mieć już zainstalowany serwer bazodanowy, gdyż paczka zabbix-server-mysql ma mylącą nazwę - przynajmniej dla mnie - i nie zainstaluje w tym przypadku serwera a jedynie paczki związane z obsługą bazy danych przez Zabbix.

Po przejściu przez pozostałe kroki wskazane w dokumentacji powinieneś skończyć z zainstalowanym i uruchomionym serwerem Zabbix, do którego jesteś w stanie się zalogować.

Domyślne dane do logowania do świeżej instancji Zabbix są następujące: l: Admin p: zabbix

Wstęp

Na początek warto by było uporządkować sobie kilka elementów

Item

Ile razy będziesz myśleć o jakimś parametrze hosta, który chcesz monitorować czy jest to temperatura CPU, ilość zajętego miejsca na dysku, ilość interfejsów sieciowych to będziemy takie rzeczy nazywać item’ami. Item to nie jest nic innego jak odwzorowanie do danej metryki

Trigger

Trigger to wyzwalacz, który przełącza się w stan Problem w momencie, kiedy item osiągnie zadany próg, a wraca do stanu OK, gdy wartości wrócą do normy. Każdemu triggerowi przypisujemy severity, czyli wagę problemu - w Zabbix jest to skala: Not classified, Information, Warning, Average, High oraz Disaster

Template

Template, czyli szablon, to zbiór predefiniowanych item’ów, triggerów, grafów i innych elementów, które można przypisać do hosta. Dzięki temu nie musimy za każdym razem definiować tych samych rzeczy dla podobnych hostów. Wystarczy przypisać szablon i voila - mamy gotowy zestaw monitorowanych parametrów.

Pierwszy host monitorowany

Skoro już mamy działający Zabbix, czas dodać pierwszy host do monitorowania. Ja zwykle zaczynam od samej maszyny, na której stoi Zabbix. Przejdźmy przez to razem:

  1. Upewnij się, że masz zainstalowanego agenta Zabbix na maszynie, którą chcesz monitorować:

    apt install zabbix-agent
    
  2. Edytuj plik konfiguracyjny agenta:

    nano /etc/zabbix/zabbix_agentd.conf
    
  3. Znajdź linijkę z Server= i ustaw tam IP twojego serwera Zabbix, na przykład:

    Server=192.168.1.100
    
  4. Zrestartuj agenta:

    systemctl restart zabbix-agent
    
  5. W interfejsie webowym Zabbix przejdź do Data collection -> Hosts -> Create host

    • Wpisz nazwę hosta (np. “Local Server”)
    • Dodaj grupy (np. “Linux servers”)
    • Ustaw IP lub nazwę DNS w polu “Agent interface”
    • Przypisz szablon “Linux by Zabbix agent”
    • Kliknij “Add”

I to wszystko! Po kilku minutach Zabbix zacznie zbierać dane z twojego pierwszego monitorowanego hosta. Możesz przejść do sekcji “Monitoring -> Latest data”, aby zobaczyć napływające dane.

Pierwsza automatyzacja

Zabbix nie musi być tylko biernym obserwatorem - może także działać. Pokażę jak skonfigurować prostą automatyzację, która będzie czyścić stare logi, kiedy dysk zacznie się zapełniać:

  1. Utwórz nowy skrypt w katalogu /usr/lib/zabbix/alertscripts/:

    nano /usr/lib/zabbix/alertscripts/cleanup_logs.sh
    
  2. Dodaj zawartość:

    #!/bin/bash
    # Skrypt do czyszczenia starych logów
    find /var/log -name "*.log.*" -type f -mtime +7 -delete
    exit 0
    
  3. Nadaj uprawnienia wykonywania:

    chmod +x /usr/lib/zabbix/alertscripts/cleanup_logs.sh
    
  4. W interfejsie Zabbix przejdź do Alerts -> Scripts -> Create script

    • Nazwa: “Cleanup Old Logs”
    • Scope: Action operation
    • Type: Script
    • Execute on: Zabbix server
    • Commands: /usr/lib/zabbix/alertscripts/cleanup_logs.sh
  5. Teraz potrzebny jest trigger, który wykryje niski poziom wolnego miejsca. Szablon “Linux by Zabbix agent” zbiera item o kluczu vfs.fs.size[/,pfree] (procent wolnego miejsca na /). Przejdź do Data collection -> Hosts, kliknij Triggers przy swoim hoście, a następnie Create trigger:

    • Nazwa: “Low disk space on /”
    • Severity: Warning
    • Expression:
    last(/Local Server/vfs.fs.size[/,pfree])<15
    

    Gdzie Local Server to nazwa Twojego hosta z poprzedniego rozdziału.

ℹ️
Jeżeli spotkasz w internecie zapisy w stylu {Host:vfs.fs.size[/,pfree].last()}<15, to jest to stara składnia triggerów, która została usunięta w Zabbix 5.4. Obecnie obowiązuje format funkcja(/host/klucz_itemu).
  1. Na koniec spinamy wszystko akcją w Alerts -> Actions -> Trigger actions -> Create action
    • Nazwa: “Auto Cleanup Logs When Disk Full”
    • Conditions: Trigger equals “Low disk space on /”
    • Operations: Run script “Cleanup Old Logs” na hoście, którego dotyczy problem

Teraz, gdy wolne miejsce na dysku spadnie poniżej 15%, trigger przejdzie w stan Problem, a akcja automatycznie uruchomi skrypt czyszczenia starych logów.

Powiadomienia

Co z tego, że system wykryje problem, jeśli nikt o tym nie wie? Skonfigurujmy powiadomienia email:

  1. Przejdź do Alerts -> Media types -> Email
  2. Skonfiguruj ustawienia SMTP:
    • SMTP server: smtp.gmail.com (lub twój serwer)
    • SMTP port: 587
    • SMTP email: twoj_email@domena.com
    • Connection security: STARTTLS
    • Authentication: Username and password
⚠️
Jeżeli korzystasz z Gmaila, zwykłe hasło do konta nie zadziała - musisz wygenerować hasło aplikacji (wymaga włączonej weryfikacji dwuetapowej) i to jego użyć w polu password.
  1. Teraz dodaj media do swojego użytkownika (Users -> Users)

    • Kliknij na swój profil
    • Przejdź do zakładki Media
    • Dodaj medium typu Email z twoim adresem
  2. Utwórz action dla powiadomień (Alerts -> Actions -> Trigger actions -> Create action)

    • Nazwa: “Email Notifications”
    • Warunki: Severity >= Warning
    • Operacje: Send message to User “Admin” using media “Email”
    • Treść: “Problem: {EVENT.NAME}\nHost: {HOST.NAME}\nSeverity: {EVENT.SEVERITY}\nTime: {EVENT.TIME}\nDescription: {EVENT.DESCRIPTION}”
  3. Opcjonalnie dodaj operację recovery, która powiadomi Cię, gdy problem zostanie rozwiązany

Od teraz będziesz otrzymywać maile, gdy wystąpią problemy z monitorowanymi hostami.

Podsumowanie

Zabbix to potężne narzędzie, które odpowiednio skonfigurowane może być Twoim trzecim okiem w infrastrukturze. Zamiast reagować na problemy, gdy już wystąpią i użytkownicy zaczną dzwonić, możesz je wykrywać, zanim ktokolwiek inny je zauważy.

W tym artykule zaledwie musnęliśmy powierzchnię możliwości Zabbix. W kolejnych wpisach zagłębimy się bardziej w zaawansowane funkcje, takie jak:

  • Tworzenie własnych szablonów
  • Monitorowanie aplikacji webowych
  • Integracja z innymi systemami
  • Automatyczne odkrywanie sieci

Ale już teraz, mając podstawową konfigurację Zabbix, możesz spać spokojniej wiedząc, że ktoś (lub coś) ciągle czuwa nad Twoją infrastrukturą.

Comments powered by Talkyard.