Czasami dzienniki są ostatnimi sprawami sprawdzanymi, gdy coś idzie nie tak, ale zwykle są pierwszymi, które wołają o pomoc, gdy coś się dzieje. Ręczne przeglądanie dzienników w poszukiwaniu problemów pomaga, ale dlaczego nie użyć analizatorów dzienników do automatycznego generowania raportów, aby zapewnić wgląd w bazę danych, zanim coś pójdzie nie tak?
Analizator dzienników PostgreSQL „pgBadger” to program typu open source „szybki raport analizy dzienników PostgreSQL” napisany w Perlu, który pobiera dane wyjściowe dziennika z działającej instancji PostgreSQL i przetwarza je w plik HTML. Raport, który generuje, pokazuje wszystkie znalezione informacje w ładnym i łatwym do odczytania formacie raportu. Raporty te mogą pomóc rzucić światło na błędy występujące w systemie, zachowanie punktów kontrolnych, zachowanie próżni, trendy i inne podstawowe, ale kluczowe informacje dla systemu PostgreSQL.
Konfiguracja logowania PostgreSQL
Aby efektywnie używać pgBadgera, logowanie w PostgreSQL powinno być skonfigurowane tak, aby dostarczać pgBadgerowi jak najwięcej informacji. Kilka opcji można dostosować, aby umożliwić systemowi bazy danych rejestrowanie przydatnych informacji, aby pgBadger mógł generować przydatne raporty. Pełna dokumentacja dotycząca konfiguracji PostgreSQL znajduje się na stronie github pgBadger, ale kilka podstawowych informacji znajduje się poniżej.
Po uruchomieniu pgBadger będzie przetwarzać logi z PostgreSQL, niezależnie od tego, czy są to syslog, stderr czy csvlog, o ile same linie dziennika zawierają wystarczającą ilość informacji w prefiksie.
Przykładowe wartości log_line_prefix:
Jeśli log_destination =„syslog”
log_line_prefix = 'user=%u,db=%d,app=%aclient=%h '
Jeśli log_destination =‘stderr’
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
Podstawowe ustawienia konfiguracyjne do ustawienia w postgresql.conf:
log_checkpoints = on
log_connections = on
log_disconnections = on
log_lock_waits = on
log_temp_files = 0
log_autovacuum_min_duration = 0
log_error_verbosity = default
log_statement = off
lc_messages='C'
Log_min_duration_statement = (see below)
Jedną z bardziej pomocnych części raportów pgBadgera jest raport o wolnych zapytaniach, który opiera się na zapytaniach rejestrowania bazy danych, które przekraczają wartość log_min_duration_statement. Ta wartość jest reprezentowana w milisekundach, a każde zapytanie, które zakończy się w czasie dłuższym niż ten, zostanie zarejestrowane, a następnie raporty wygenerowane przez pgBadger. Jest to pomocne przy znajdowaniu i analizowaniu zapytań, które trwają dłużej niż oczekiwano.
Podczas gdy ustawienie tej wartości na 0, aby rejestrować wszystkie zapytania, dostarczyłoby najwięcej informacji, co może łatwo skończyć się generowaniem zbyt dużych plików dziennika i wpłynąć na wydajność samej bazy danych z powodu ciągłego zapisywania dziennika. Bardziej rozsądna wartość nie zapewni idealnej liczby zapytań, ale nadal będzie skupiać raporty na ogólnie rzecz biorąc wolno działających zapytań. Jeśli zapytania, które działają przez kilka minut, są uważane za „wolne”, ustawienie wartości na jedną minutę byłoby dobrze. Jeśli zapytania działające dłużej niż kilka sekund są uważane za „wolne”, ustawienie wartości na około 5 sekund również będzie działać.
Generowanie dzienników
Generowanie logów odbywa się za pomocą wiersza poleceń przy użyciu pliku wykonywalnego pgBadger. Istnieje wiele opcji, ale najbardziej podstawową konfiguracją jest dostarczenie przedrostka wiersza dziennika używanego przez bazę danych, pliku dziennika i wyjściowego pliku html.
./pgbadger --prefix '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h ' postgresql.log -o postgresql.html
[========================>] Parsed 560607407 bytes of 560607407 (100.00%), queries: 2929645, events: 5
Aby uzyskać więcej informacji na temat różnych opcji pgBadger, zapoznaj się z dokumentacją lub uruchom plik binarny z parametrem wejściowym --help.
Zaawansowane generowanie dzienników
Ponieważ generowanie raportów w dziennikach jest prostym wykonaniem wiersza poleceń, niestandardowe skrypty i programy można skonfigurować tak, aby automatycznie generowały raporty, umieszczane na serwerach internetowych, przesyłane pocztą e-mail lub archiwizowane w pamięci długoterminowej. Poznaj różne dostępne opcje generowania raportów i bądź kreatywny dzięki automatycznym systemom generowania i dostarczania raportów.
Przeglądanie dzienników
Przeglądanie dzienników to podstawa zabawy. Wygenerowany raport można teraz otworzyć w przeglądarce internetowej i przejrzeć.
Statystyki globalne
Sekcja statystyk globalnych zawiera podstawowe informacje znalezione w dzienniku PostgreSQL, w tym:
- Zapytania:liczba znalezionych zapytań, czas trwania, liczba znormalizowanych zapytań itp.
- Zdarzenia:łączna liczba zdarzeń, znormalizowanych zdarzeń itp.
- Odkurzacze:łączna liczba znalezionych automatycznych odkurzań i automatycznych analiz.
- Pliki tymczasowe:Całkowita liczba znalezionych plików tymczasowych, maksymalny rozmiar i średni rozmiar.
- Sesja:łączna liczba sesji, szczytowy czas sesji, całkowity czas trwania sesji, średni czas trwania sesji, średni czas znalezionych zapytań na sesję, średni czas trwania zapytań na sesję.
- Połączenia:Całkowita liczba połączeń, połączenia szczytowe i całkowita liczba połączonych baz danych.
Uwaga: Wyniki dotyczące zapytań, liczby zapytań lub czasu trwania zapytania będą niedokładne z wartościami log_min_duration_statement większymi niż 0.
Przykład:
Przykład statystyk globalnych pgBadgerPołączenia
Strona połączeń przedstawia wykresy zawierające szczegółowe informacje o połączeniu znalezione w dziennikach. Dopóki log_connections i log_disconnections są włączone, wartości tutaj będą dokładne. Dostępne wykresy to:
- Ustalone połączenia:Pokazuje maksymalną, minimalną i średnią liczbę połączeń w czasie.
- Połączenia na bazę danych:wykres kołowy i widok tabeli pokazujący liczbę połączeń dla każdej znalezionej bazy danych.
- Połączenia na użytkownika:wykres kołowy i widok tabeli przedstawiający liczbę połączeń dla każdego znalezionego użytkownika.
- Połączenia na hosta:wykres kołowy i widok tabeli przedstawiający liczbę połączeń dla każdego znalezionego hosta źródłowego.
Przykład:
Przykład wykresu kołowego pgBadger ConnectionsSesje
Strona sesji jest podobna do strony połączeń, ale zawiera więcej informacji dotyczących samych sesji.
- Sesje symultaniczne:wykres liniowy pokazujący liczbę sesji w czasie.
- Histogram czasów sesji:wykres słupkowy i tabela przedstawiająca czasy sesji.
- Sesje na bazę danych:wykres kołowy i widok tabeli przedstawiający liczbę sesji dla każdej znalezionej bazy danych.
- Sesje na użytkownika:wykres kołowy i widok tabeli przedstawiający liczbę sesji dla każdego znalezionego użytkownika.
- Sesje na hosta:wykres kołowy i widok tabeli przedstawiający liczbę sesji dla każdego znalezionego hosta źródłowego.
- Sesje na aplikację:liczba sesji połączonych na aplikację.
Punkty kontrolne
Strona punktów kontrolnych zawiera informacje o procesie wskaźnika kontrolnego, w tym liczbę zapisanych buforów, pliki WAL i inne ogólne informacje.
- Bufory punktu kontrolnego:wykres liniowy pokazujący ilość buforów zapisanych przez proces punktu kontrolnego w czasie.
- Pliki kontrolne WAL:wykres liniowy pokazujący liczbę plików WAL dodanych, usuniętych lub poddanych recyklingowi przez punkt kontrolny w czasie.
- Odległość punktu kontrolnego:wykres liniowy pokazujący odległość i oszacowanie dla punktów kontrolnych.
- Aktywność punktów kontrolnych:tabela przedstawiająca poprzednie cztery punkty danych w formie tabeli.
Pliki tymczasowe
Strona plików tymczasowych zawiera informacje o plikach tymczasowych, które są tworzone, gdy w zapytaniu zabraknie work_mem i trzeba użyć dysku do sortowania lub filtrowania wyników przed zwróceniem ich do aplikacji. Pliki te są usuwane automatycznie po zakończeniu zapytania, a znajomość aktywności pliku tymczasowego pomaga administratorowi dostroić parametr work_mem.
- Rozmiar plików tymczasowych:wykres liniowy pokazujący przestrzeń zajmowaną przez pliki tymczasowe w czasie.
- Liczba plików tymczasowych:wykres liniowy pokazujący liczbę plików tymczasowych używanych w czasie.
- Aktywność na plikach tymczasowych:tabela przedstawiająca informacje podane na poprzednich wykresach, ale w formie tabeli.
Odkurzacze
Na tej stronie wyświetlane są informacje o ODKURZACZACH i ANALIZACH występujących w bazie danych. Te informacje są przydatne, aby wiedzieć, czy proces automatycznego odkurzania wykonuje swoją pracę wystarczająco dobrze, czy też ugrzęzł i potrzebuje więcej zasobów.
- Rozkład podciśnienia/analiz:wykres liniowy przedstawiający PODCIŚNIENIE i ANALIZY w czasie, a także informacje o tabeli, która zużyła najwięcej mocy obliczeniowej procesora.
- Analizy na tabelę:wykres kołowy i tabela przedstawiające tabele z największą liczbą analiz, co sugeruje, że te tabele są na wysokim poziomie zmian.
- Podciśnienie na stół:wykres kołowy i tabela przedstawiające tabele z największą liczbą podciśnieniów, co sugeruje, że te tabele są w wysokim stanie zmian.
- Krótki usunięte na tabelę:wykres kołowy i tabela pokazujące liczbę krotek i stron usuniętych w procesach próżniowych dla tabel.
- Strony usunięte na tabelę:wykres kołowy i tabela pokazujące liczbę stron i krotek usuniętych w procesach próżniowych dla tabel.
- Aktywność automatycznego odkurzania:tabela pokazująca ODKURZACZE i ANALIZY w czasie na godzinę.
Zamki
Strona blokad zawiera tylko kilka danych, ale jest to przydatna informacja, aby wiedzieć, kiedy istnieją procesy, które mogą wstrzymywać inne zapytania przez dłuższy czas.
- Blokady według typów
- Najczęściej oczekujące zapytania:lista oczekujących zapytań, uszeregowanych najczęściej do najmniej.
- Zapytania, które czekały najwięcej:lista zapytań i czas oczekiwania, uporządkowane od najdłuższego do najkrótszego.
Zapytania
Strona Zapytania jest czasami najbardziej ekscytująca, ponieważ pokazuje informacje o typach zapytań, które pochodzą z aplikacji i użytkowników. Informacje te mogą pomóc w lepszym zrozumieniu rodzaju bazy danych, które aplikacja lub użytkownik umieszcza w systemie bazy danych, co może pomóc w przyszłym dostrajaniu. Tak jak poprzednio, dokładność tych liczb zależy od wartości log_min_duration_statement, ponieważ każda wartość powyżej 0 nie będzie rejestrować zapytań.
- Zapytania według typu:wykres kołowy i tabela przedstawiająca liczbę różnych typów zapytań, takich jak INSERT, UPDATE, DELETE, SELECT itp.
- Zapytania według bazy danych:wykres kołowy i tabela przedstawiająca liczbę zapytań znalezionych w bazie danych.
- Zapytania według aplikacji:wykres kołowy i tabela przedstawiająca liczbę zapytań znalezionych na aplikację.
- Liczba anulowanych zapytań:informacje o wszelkich zapytaniach, które zostały anulowane.
Góra
Górna strona zawiera informacje o czasach zapytań, najwolniejszych zapytaniach, częstotliwości zapytań i nie tylko. Konkretne problematyczne zapytania można znaleźć tutaj:
- Histogram czasów zapytań:histogram przedstawiający, ile zapytań należy do każdej grupy czasów.
- Najwolniejsze pojedyncze zapytania:lista najwolniejszych znalezionych zapytań, uporządkowana od najdłuższego do najkrótszego.
- Zapytania czasochłonne:lista znormalizowanych zapytań i ich łączny czas trwania, uporządkowana według największego czasu poświęconego do najmniejszego.
- Najczęstsze zapytania:lista znormalizowanych zapytań i ile razy zostały wykonane, uporządkowane od największej do najmniejszej.
- Znormalizowane najwolniejsze zapytania:lista znormalizowanych zapytań i ich średni czas trwania, uporządkowane od najdłuższego do najkrótszego.
Wydarzenia
Ostatnia strona to zdarzenia, które zawierają informacje o samych dziennikach i wszystkim, co nie jest zapytaniem, próżnią ani punktem kontrolnym.
- Poziomy dzienników:różne poziomy dzienników pojawiały się według wiersza, np. KONTEKST, DZIENNIK, OŚWIADCZENIE, WSKAZÓWKI, OSTRZEŻENIA i inne.
- Rozkład zdarzeń:wykres liniowy zdarzeń w czasie dla zdarzeń NAPAD, KRYTYCZNE, BŁĄD i OSTRZEŻENIE.
- Najczęstsze błędy/zdarzenia:lista WYDARZEŃ i ich częstotliwości, uporządkowane od najczęstszych do najmniej.
Wkład
Projekt pgBadger jest darmowy i istnieje na licencji PostgreSQL. Obecnie jest dobrze utrzymywany i aktualizowany do pracy z nowszymi wersjami PostgreSQL w miarę jego rozwoju. Masz pomysły na ulepszenie pgBadgera? Rozwiń projekt i pokaż społeczności swoje ulepszenia.
Aby zgłosić błędy, odwiedź stronę z problemami na githubie.