Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

6 Monitorowanie pliku logu

Przegląd

Zabbix może być użyty do monitorowania i analizowania plików logu z lub bez obsługi rotacji.

Można użyć powiadomień, żeby ostrzegać użytkowników, gdy w pliku logu pojawią się określone ciągi znaków lub wzorce.

Żeby monitorować plik logu najpierw należy:

  • uruchomić agenta Zabbix na hoście
  • ustawić pozycję monitorowania logu

Ograniczenie rozmiaru monitorowanego pliku logu zależy od obsługi dużych plików.

Konfiguracja

Weryfikacja parametrów agenta

Należy się upewnić, że w pliku konfiguracyjnym agenta:

  • Parametr 'Hostname' jest zgodny z nazwą hosta w interfejsie użytkownika
  • W parametrze 'ServerActive' określono serwery do przetwarzania aktywnych sprawdzeń
Konfiguracja pozycji

Konfiguracja pozycji monitorowania logu:

W przypadku pozycji monitorowania logu należy wprowadzić:

Typ Wybrać Agent Zabbixa (aktywny).
Klucz Ustawić:
log[/ścieżka/do/pliku/nazwa_pliku,<regexp>,<kodowanie>,<maxlinii>,<tryb>,<wyjście>]
lub
logrt[/ścieżka/do/pliku/regexp_opisujący_wzorzec_nazwy_pliku,<regexp>,<kodowanie>,<maxlinii>,<tryb>,<wyjście>]
Gdy podano wyrażenie regularne <regexp>, Agent Zabbix przefiltruje wpisy pliku logu.
Należy się upewnić, czy użytkownik 'zabbix' ma prawo do odczytu pliku, inaczej stan pozycji zostanie ustawiony na 'niewspierany'.
Więcej szczegółów na temat wpisów log i logrt można zobaczyć w rozdziale kluczy pozycji agenta Zabbix.
Typ informacji Wybrać Log.
Interwał aktualizacji (w sek) Parametr określa, jak często agent Zabbix będzie sprawdzał zmiany w pliku logu. Ustawienie go na 1 sekundę zapewni, że będziemy otrzymywać nowe rekordy tak szybko, jak to możliwe.
Format czasu dla logowania W polu tym można opcjonalnie określić wzorzec do parsowania znacznika czasu pliku logu.
Jeżeli pozostanie puste, znacznik czasu nie będzie parsowany.
Obsługiwane wzorce:
* y: Rok (0001-9999)
* M: Miesiąc (01-12)
* d: Dzień (01-31)
* h: Godzina (00-23)
* m: Minuta (00-59)
* s: Sekunda (00-59)
Na przykład, rozpatrzmy następującą linię z pliku logu agenta Zabbix:
" 23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2 (revision 11211)."
Zaczyna się sześcioma znakami dla PID, następnie data, czas i reszta linii.
Format czasu dla logowania dla tej linii powinien być taki "pppppp:yyyyMMdd:hhmmss".
Należy zauważyć, że znaki "p" i ":" to tylko znaki pozycjonowania, którymi mogą być dowolne znaki z wyjątkiem "yMdhms".

Ważne uwagi

  • Serwer i agent przechowują rozmiar monitorowanego logu oraz czas ostatniej modyfikacji (dla logrt) w dwóch licznikach. Dodatkowo, począwszy od Zabbix 2.2.4:
   * Agent dodatkowo wewnętrznie używa numerów węzłów (inode na UNIX/GNU/Linux), indeksów pliku (na Microsoft Windows) oraz sum MD5 pierwszych 512 bajtów pliku logu, w celu przyśpieszenia sprawdzenia, czy plik logu został wyczyszczony i czy nastąpiła rotacja.
          * Na systemach UNIX/GNU/Linux zakłada się, że system plików, na którym jest składowany plik logu, udostępnia numery węzłów, które mogą być użyte do śledzenia plików.
          * Na Microsoft Windows agent Zabbix określa typ systemu plików, na którym jest umieszczony plik logu i używa:
              * Na systemach plików NTFS, 64-bitowych indeksów pliku.
              * Na systemach plików ReFS (tylko na Microsft Windows Server 2012) 128-bitowych ID plików.
              * Na systemach plików, w których następuje zmiana indeksów plików (np. FAT32, exFAT) używany jest algorytm fall-back, żeby określić w sensowny sposób, czy nastąpiła rotacja plików logu z takimi samymi ostatnimi czasami modyfikacji.
          * Numery węzłów, indeksy plików i sumy MD5 zbierane są wewnętrznie przez agenta Zabbix. Nie są przekazywane do serwera Zabbix i są tracone, gdy agent Zabbix zostanie zatrzymany.
          * Nie należy modyfikować czasu modyfikacji plików logu przy pomocy polecenia 'touch', ani kopiować pliku logu a następnie przywracać z oryginalną nazwą (zmieni to numer węzła pliku). W obu przypadkach plik zostanie uznany za nowy i będzie analizowany od początku, co może spowodować powielenie alarmów.
          * Jeżeli istnieje wiele zgodnych plików dla pozycji ''logrt[]'' i agent Zabbix wybierze najnowszy z nich, i ten najnowszy zostanie usunięty, zostanie zalogowane ostrzeżenie ''"there are no files matching "<regexp mask>" in "<directory>"''. Agent Zabbix ignoruje pliki z czasem modyfikacji mniejszym od ostatnio znanego najnowszego czasu modyfikacji dla pozycji ''logrt[]'', która była sprawdzana.
       * Agent odczytuje plik logu od pozycji, w której się zatrzymał ostatnim razem.
       * Liczba już zanalizowanych bajtów (licznik rozmiaru) i czas ostatniej modyfikacji (licznik czasu) przechowywane są w bazie danych Zabbix database i są wysyłane do agenta, żeby mieć pewność, że rozpocznie czytanie pliku logu od tego miejsca.
       * Za każdym razem, gdy plik logu staje się mniejszy od licznika rozmiaru znanego przez agenta, licznik jest zerowany i agent rozpoczyna czytanie pliku od początku, ustawiając z powrotem licznik czasu.
       * Dla pozycji ''logrt'', jeżeli istnieje wiele zgodnych plików z tym samym czasem ostatniej modyfikacji w katalogu:
         * przed Zabbix **2.2.4** agent odczytuje najmniejszy plik.
         * od Zabbix **2.2.4**:
           * Agent próbuje poprawnie zanalizować pliki logów z tym samym czasem modyfikacji i uniknąć pominięcia danych lub ponownego zanalizowania tych samych danych, jednakże nie ma gwarancji, że zadziała to poprawnie w każdej sytuacji.
           * Agent nie korzysta z żadnego schematu rotacji plików logu ani nie próbuje go określić. Gdy pojawi się wiele plików logu z tym samym czasem ostatniej modyfikacji, agent przetworzy je alfabetycznie w porządku malejącym. Zatem, dla niektórych schematów rotacji pliki logów będą analizowane i raportowane w ich właściwym porządku. Dla innych schematów rotacji oryginalny porządek plików logu nie będzie uznawany, co może spowodować raportowanie rekordów pliku logu w innej kolejności (Problem nie wystąpi, jeżeli pliki logu będą miały inne czasy ostatniej modyfikacji).
       * Agent Zabbix przetwarza nowe rekordy pliku logu raz na //Interwał aktualizacji// sekund.
       * Agent Zabbix nie wysyła więcej niż **maxlinii** pliku logu na sekundę. Ograniczenie to zapobiega przeciążeniu sieci i zasobów CPU i przykrywa wartość domyślną z parametru **MaxLinesPerSecond** w [[pl:manual:appendix:config:zabbix_agentd|pliku konfiguracyjnym agenta]]. 
       * Żeby znaleźć wymagany ciąg Zabbix będzie przetwarzał 4 razy więcej nowych linii niż jest ustawione w MaxLinesPerSecond. Zatem, na przykład, jeżeli pozycja ''log[]'' lub ''logrt[]'' ma //Interwał aktualizacji// równy 1 sekunda, domyślnie agent będzie analizował nie więcej niż 400 rekordów pliku logu i wyśle nie więcej niż 100 zgodnych rekordów do serwera Zabbix w jednym sprawdzeniu. Zwiększając **MaxLinesPerSecond** w pliku konfiguracyjnym agenta lub ustawiając parametr **maxlinii** w kluczu pozycji, limit można zwiększyć maksymalnie do 4000 analizowanych rekordów i 1000 rekordów zgodnych wysyłanych do serwera Zabbix w jednym sprawdzeniu. Jeżeli //Interwał aktualizacji// ustawiono na 2 sekundy, limity dla jednego sprawdzenia zostaną zwiększone dwukrotnie względem limitów dla //Interwału aktualizacji// równego 1 sekundzie.
       * Dodatkowo, wartości logu ograniczone są do 50% rozmiaru bufora wysyłania agenta, nawet, jeżeli nie ma w nim wartości innych niż log. Zatem, aby wysłać **maxlinii** wartości w jednym połączeniu (a nie w kilku połączeniach), parametr agenta [[pl:manual:appendix:config:zabbix_agentd|BufferSize]] musi być ustawiony przynajmniej na maxlinii x 2. 
       * W przypadku braku pozycji logu cały rozmiar bufora agenta jest używany dla wartości innych niż log. Gdy pojawią się wartości logu, zastąpią najstarsze wartości inne niż log, maksymalnie do 50%.
       * Dla rekordów pliku logu większych niż 256kB, tylko pierwsze 256kB jest sprawdzane przez wyrażenia regularne, reszta rekordu jest ignorowana. Jednakże, jeżeli agent Zabbix zostanie zatrzymany podczas obsługi długiego rekordu i stan wewnętrzny agenta zostanie utracony, po ponownym wystartowaniu agenta długi rekord może być ponownie zanalizowany w inny sposób niż poprzednio. Ograniczenie wprowadzono od Zabbix **2.2.3**.
       * Specjalna uwaga do separatorów ścieżki "\": jeżeli formatem pliku jest "plik\.log", to nie powinien istnieć katalog "plik", ponieważ nie jest możliwe jednoznaczne określenie czy "." jest faktycznie kropką, czy jest pierwszym znakiem nazwy pliku.
       * Wyrażenia regularne dla ''logrt'' obsługiwane są jedynie w nazwach plików, wyrażenia regularne dla katalogów nie są obsługiwane.
       * Na platformach UNIX pozycja ''logrt[]'' staje się NIEWSPIERANA jeżeli katalog, w którym powinien być plik logu, nie istnieje.
       * Na Microsoft Windows, jeżeli katalog nie istnieje, pozycja nie staje się NIEWSPIERANA (na przykład, jeżeli błędnie wpisano katalog w kluczu pozycji). Należy zauważyć, że przed Zabbix 2.2.3 pozycja stawała się NIEWSPIERANA.
       * Nieobecność plików logu dla pozycji ''logrt[]'' nie spowoduje, że stanie się NIEWSPIERANA (przed Zabbix 2.2.3 stawała się NIEWSPIERANA).
       * Błędy odczytu plików logu dla pozycji ''logrt[]'' są logowane jako ostrzeżenia w pliku logu agenta Zabbix ale nie powodują, że pozycja stanie się NIEWSPIERANA (przed Zabbix 2.2.3 stawała się NIEWSPIERANA).
       * Plik logu agenta Zabbix może pomóc przy określeniu, dlaczego pozycje ''log[]'' lub ''logrt[]'' stały się NIEWSPIERANE. Zabbix może monitorować plik logu agenta, z wyjątkiem gdy ustawiono DebugLevel=4.

Wyciąganie części zgodnej z wyrażeniem regularnym

Czasami chcemy wyciągnąć tylko interesujące nas wartości z pliku docelowego zamiast całej linii, w której znaleziono ciąg zgodny z wyrażeniem regularnym.

Poprzednio, jeżeli Zabbix znalazł ciąg zgodny z wyrażeniem regularnym, zwracał całą linię. Począwszy od Zabbix 2.2.0, pozycje log rozszerzone zostały o możliwość wybrania określonych wartości z takich linii. Można tego dokonać dodając dodatkowy parametr wyjście do pozycji log i logrt.

'wyjście'' pozwala określić podgrupy zgodności, które nas interesują.

Zatem, na przykład

log[/ścieżka/do/pliku,large result buffer allocation.*Entries: ([0-9]+),,,,\1]

powinna pozwolić wyciągnąć licznik wpisów znalezionych w tekście:

Fr Feb 07 2014 11:07:36.6690 */ Thread Id 1400 (GLEWF) large result
       buffer allocation - /Length: 437136/Entries: 5948/Client Ver: >=10/RPC
       ID: 41726453/User: AUser/Form: CFG:ServiceLevelAgreement

Powodem, dla którego Zabbix zwróci jedynie liczbę jest wyjście ustawione na \1, określające pierwszą jedyną interesującą nas podgrupę: ([0-9]+)

A, w związku z możliwością zwracania liczb, wartość może być użyta do zdefiniowania wyzwalaczy.