Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
PostgreSQL
Brak historii obciążenia bazy - jak monitorować PostgreSQL w Percona PMM
Ten problem dotyczy zespołów, które dowiadują się o spowolnieniu bazy po fakcie, gdy w widokach statystyk nie ma już śladu. Widoki statystyk PostgreSQL nie odpowiedzą na pytanie, co działo się o konkretnej godzinie. Pokażemy, jak postawić Percona Monitoring and Management (PMM), czyli otwartoźródłowy system monitoringu baz danych, i podłączyć do niego klaster PostgreSQL 16.
Rano system działał wolno, a po południu nikt nie potrafi wskazać przyczyny. Widok pg_stat_activity pokazuje tylko sesje, które istnieją w chwili zapytania. pg_stat_statements trzyma sumy od ostatniego resetu, a z czasem łączy go tylko moment tego resetu. Sprawdziliśmy to w PostgreSQL 16.4:
SELECT column_name FROM information_schema.columns
WHERE table_name = 'pg_stat_statements_info'
ORDER BY ordinal_position;
column_name
-------------
dealloc
stats_resetWiesz więc, od kiedy liczniki rosną, ale nie wiesz, które zapytania obciążały bazę o konkretnej godzinie ani jak wyglądało wtedy użycie procesora i dysku. Bez zewnętrznego systemu monitoringu ta informacja przepada.
PostgreSQL nie zapisuje historii statystyk. Widoki z rodziny pg_stat_* to stan bieżący albo liczniki, które ktoś musi regularnie odczytywać i zapisywać. PMM robi to za Ciebie. Składa się z serwera (pmm-server, uruchamiany w kontenerze Docker, zbudowany między innymi na Grafanie, VictoriaMetrics i ClickHouse) oraz klienta (pmm-client) instalowanego na serwerze bazy. Klient przez lokalne eksportery, czyli małe programy zbierające metryki, odczytuje dane systemu operacyjnego i bazy. Moduł Query Analytics (QAN) pobiera statystyki zapytań z pg_stat_statements albo pg_stat_monitor i przechowuje je w czasie, więc nawet przy pg_stat_statements widzisz, jak obciążenie rozkładało się w ciągu dnia.
Zobacz też: Szkolenie Zaawansowana administracja PostgreSQL: High Availability, Disaster Recovery
Gdy klienta nie da się zainstalować, na przykład w Amazon RDS, serwer PMM zbiera dane sam, przez API albo zdalne połączenie z bazą. W każdym wariancie konto monitoringu potrzebuje uprawnień do cudzych statystyk. W naszym teście rola bez nich widziała w kolumnie query widoku pg_stat_activity napis <insufficient privilege> zamiast treści zapytań innych użytkowników, a wywołanie pg_ls_waldir() kończyło się błędem permission denied for function pg_ls_waldir.
curl -fsSL https://www.percona.com/get/pmm | /bin/bash. Skrypt w razie potrzeby instaluje Dockera, pobiera obraz percona/pmm-server:3 i uruchamia kontener na porcie 443. Na Rocky Linux zainstaluj najpierw Dockera ręcznie, bo automatyczna instalacja ze skryptu może się tam nie udać. Dla typowego wdrożenia, do 30 monitorowanych węzłów, dokumentacja zaleca 4 rdzenie, 8 GB RAM i 100 GB dysku. Otwórz w przeglądarce https://adres_serwera_PMM, zaloguj się jako admin z hasłem admin i zmień hasło przy pierwszym logowaniu.pg_monitor. Wybierz jeden z nich:-- wariant z dokumentacji PMM 3
CREATE USER pmm WITH SUPERUSER ENCRYPTED PASSWORD 'Mocne_Haslo_1';
-- wariant z lekcji kursu
CREATE USER pmm WITH PASSWORD 'Mocne_Haslo_1';
GRANT pg_monitor TO pmm;W naszym teście rola pg_monitor dała członkostwo w pg_read_all_settings, pg_read_all_stats i pg_stat_scan_tables. Klient PMM połączy się z bazą przez 127.0.0.1, więc w pg_hba.conf, przed pozostałymi wierszami host, dopisz host all pmm 127.0.0.1/32 scram-sha-256 i przeładuj konfigurację: SELECT pg_reload_conf();.sudo dnf install -y postgresql16-contrib, na Debianie i Ubuntu w pakiecie serwera. Dokumentacja PMM zaleca w postgresql.conf (na Red Hat w /var/lib/pgsql/16/data/, na Debianie i Ubuntu w /etc/postgresql/16/main/):shared_preload_libraries = 'pg_stat_statements'
track_activity_query_size = 2048
pg_stat_statements.track = all
track_io_timing = onZrestartuj klaster (sudo systemctl restart postgresql-16 na Red Hat, sudo systemctl restart postgresql na Debianie i Ubuntu) i w bazie postgres wykonaj CREATE EXTENSION pg_stat_statements;.pmm3-client:# Red Hat, Rocky, Alma
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release enable pmm3-client
sudo yum install -y pmm-client
# Debian, Ubuntu
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb
sudo percona-release enable pmm3-client
sudo apt update
sudo apt install -y pmm-client
# kontrola instalacji
pmm-admin --versionglsa_ i jest pokazywany tylko raz).sudo pmm-admin config --server-insecure-tls \
--server-url=https://service_token:TOKEN@adres_serwera_PMM:443Słowo service_token wpisujesz dosłownie, w miejsce TOKEN wklejasz token. Opcja --server-insecure-tls pomija weryfikację domyślnego, samopodpisanego certyfikatu serwera. Wariant z hasłem administratora w adresie dokumentacja odradza, bo hasło trafia do historii poleceń i listy procesów.sudo pmm-admin add postgresql \
--username=pmm --password=Mocne_Haslo_1 \
--host=127.0.0.1 --port=5432 --service-name=pg-ordersDomyślnym źródłem zapytań jest pgstatements. Jeśli używasz pg_stat_monitor, dodaj --query-source=pgstatmonitor.Na serwerze bazy uruchom dwa polecenia:
pmm-admin status
pmm-admin listW wyniku pmm-admin status wiersz Connected: true oznacza, że klient rozmawia z serwerem PMM. Przy Connected: false sprawdź adres serwera w rejestracji i to, czy zapora przepuszcza ruch z serwera bazy na port 443 serwera PMM. pmm-admin list wypisuje zarejestrowane usługi i agentów: pmm_agent powinien mieć status Connected, a pozostali agenci, w tym postgres_exporter, status Running. W konsoli PMM w przeglądarce otwórz Query Analytics i posortuj zapytania po kolumnach Load (łączny czas), Query Count (liczba wykonań) i Query Time (czas wykonania). Ustaw zakres z ostatniej godziny: jeśli widzisz wykres obciążenia z wcześniejszych minut, historia jest zbierana i jutro odpowiesz na pytanie o poranne spowolnienie.
Wróć do listy: 112 najczęstszych pytań i problemów z PostgreSQL
Komentarze (0)
Brak komentarzy...