Někdy jsou protokoly poslední věcí, která se kontroluje, když se něco nedaří, ale obvykle jsou to první věci, které křičí o pomoc, když se něco stane. Ruční prohledávání protokolů pro problémy pomáhá, ale proč nepoužít analyzátory protokolů k automatickému generování sestav, které poskytují přehled o databázi, než se něco pokazí?
Analyzátor protokolů PostgreSQL „pgBadger“ je program s otevřeným zdrojovým kódem „rychlé zprávy o analýze protokolů PostgreSQL“ napsaný v Perlu, který přebírá výstup protokolu ze spuštěné instance PostgreSQL a zpracovává jej do souboru HTML. Zpráva, kterou generuje, zobrazuje všechny nalezené informace v pěkném a snadno čitelném formátu zprávy. Tyto zprávy mohou pomoci objasnit chyby, ke kterým dochází v systému, chování kontrolních bodů, chování vakua, trendy a další základní, ale zásadní informace pro systém PostgreSQL.
Nastavení protokolování PostgreSQL
Pro efektivní použití pgBadger by mělo být přihlášení do PostgreSQL nastaveno tak, aby poskytovalo pgBadger co nejvíce informací. Hrst možností lze vyladit tak, aby umožnily databázovému systému protokolovat užitečné informace pro pgBadger a generovat užitečné zprávy. Úplnou dokumentaci pro konfiguraci PostgreSQL lze nalézt na stránce pgBadger github, ale některé základní informace jsou uvedeny níže.
Při spuštění pgBadger zpracuje protokoly z PostgreSQL, ať už se jedná o syslog, stderr nebo csvlog, pokud samotné řádky protokolu mají dostatek informací v předponě.
Příklad hodnot log_line_prefix:
Pokud log_destination ='syslog'
log_line_prefix = 'user=%u,db=%d,app=%aclient=%h '
Pokud log_destination =‚stderr‘
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
Základní konfigurační nastavení pro nastavení v 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)
Jednou z užitečnějších částí sestav pgBadger je sestava pomalého dotazu, která se opírá o dotazy protokolování databáze, které překračují hodnotu log_min_duration_statement. Tato hodnota je vyjádřena v milisekundách a jakýkoli dotaz, který skončí s časem delším, než je čas, bude zaznamenán a poté vygenerován pgBadger. To je užitečné pro vyhledávání a analýzu dotazů, které trvají déle, než je žádoucí.
Zatímco nastavení této hodnoty na 0 pro protokolování všech dotazů by poskytlo nejvíce informací, což může snadno skončit generováním souborů protokolu, které jsou příliš velké, a ovlivnit výkon samotné databáze kvůli neustálému zápisu do protokolu. Rozumnější hodnota nezajistí dokonalé počty dotazů, ale obecně se přehledy zaměří na pomalu běžící dotazy. Pokud jsou dotazy, které trvají několik minut, považovány za „pomalé“, nastavení hodnoty na jednu minutu by bylo dobré. Pokud jsou dotazy běžící déle než několik sekund považovány za „pomalé“, nastavení hodnoty na něco jako 5 sekund by také fungovalo dobře.
Generování protokolů
Generování protokolů se provádí pomocí příkazového řádku pomocí spustitelného souboru pgBadger. Existuje celá řada možností, ale nejzákladnějším nastavením je poskytnout předponu řádku protokolu, kterou databáze používá, soubor protokolu a výstupní soubor 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
Další informace o různých možnostech pro pgBadger najdete v dokumentaci nebo spusťte binární soubor se vstupním parametrem --help.
Pokročilé generování protokolu
Vzhledem k tomu, že generování zpráv o protokolech je jednoduché provádění příkazového řádku, lze vlastní skripty a programy nastavit tak, aby zprávy generovaly automaticky, byly umístěny na webových serverech, zasílány e-mailem nebo archivovány v dlouhodobém úložišti. Prozkoumejte různé možnosti dostupné pro generování přehledů a buďte kreativní s automatizačními systémy pro generování a doručování přehledů.
Kontrola protokolů
Prohlížení protokolů je místo, kde přichází zábava. Vytvořený přehled lze nyní otevřít ve webovém prohlížeči a zkontrolovat.
Globální statistiky
Sekce globálních statistik obsahuje některé základní informace nalezené v protokolu PostgreSQL, včetně:
- Dotazy:Počet nalezených dotazů, trvání, počet normalizovaných dotazů atd.
- Události:Celkový počet událostí, normalizovaných událostí atd.
- Vakuy:Celkový počet nalezených automatických vysávání a automatických analýz.
- Dočasné soubory:Celkový počet nalezených dočasných souborů, maximální velikost a průměrná velikost.
- Relace:Celkový počet relací, maximální doba relací, celková doba trvání relací, průměrná doba trvání relací, průměr nalezených dotazů na relaci, průměrná doba trvání dotazů na relaci.
- Připojení:Celkový počet připojení, špičkový počet připojení a celkový počet připojených databází.
Poznámka: Výsledky zahrnující dotazy, počty dotazů nebo dobu trvání dotazu budou nepřesné s hodnotami log_min_duration_statement většími než 0.
Příklad:
pgBadger Global Stats příkladPřipojení
Stránka připojení zobrazuje grafy s podrobnými informacemi o připojení nalezenými v protokolech. Dokud jsou log_connections i log_disconnections zapnuté, budou zde uvedené hodnoty přesné. Dostupné grafy jsou:
- Navázaná připojení:Zobrazuje maximální, minimální a průměrný počet připojení v průběhu času.
- Připojení na databázi:Výsečový graf a tabulka zobrazující počet připojení pro každou nalezenou databázi.
- Připojení na uživatele:Výsečový graf a tabulka zobrazující počet připojení pro každého nalezeného uživatele.
- Připojení na hostitele:Výsečový graf a tabulka zobrazující počet připojení pro každého nalezeného zdrojového hostitele.
Příklad:
pgPříklad koláčového grafu připojení BadgerRelace
Stránka relace je podobná stránce připojení, ale obsahuje další informace týkající se samotných relací.
- Simultánní relace:Spojnicový graf zobrazující počet relací v průběhu času.
- Histogram časů relací:Sloupcový graf a tabulka zobrazující časy relací.
- Počet návštěv na databázi:Výsečový graf a tabulka zobrazující počet návštěv pro každou nalezenou databázi.
- Návštěvy na uživatele:Výsečový graf a tabulka zobrazující počet relací pro každého nalezeného uživatele.
- Relace na hostitele:Výsečový graf a tabulka zobrazující počet relací pro každého nalezeného zdrojového hostitele.
- Relace na aplikaci:Počet relací připojených na aplikaci.
Kontrolní body
Stránka kontrolních bodů poskytuje informace o procesu kontrolních bodů, včetně počtu zapsaných vyrovnávacích pamětí, souborů WAL a dalších obecných informací.
- Vyrovnávací paměti kontrolního bodu:Spojnicový graf zobrazující množství vyrovnávacích pamětí zapsaných procesem kontrolního bodu v průběhu času.
- Soubory WAL kontrolních bodů:Spojnicový graf zobrazující počet souborů WAL přidaných, odstraněných nebo recyklovaných kontrolním ukazatelem v průběhu času.
- Vzdálenost kontrolních bodů:Spojnicový graf zobrazující vzdálenost a odhad pro kontrolní body.
- Aktivita kontrolních bodů:Tabulka zobrazující předchozí čtyři datové body ve formě tabulky.
Dočasné soubory
Stránka dočasné soubory obsahuje informace o dočasných souborech, které se vytvářejí, když dojde dotazu work_mem a je třeba použít disk k seřazení nebo filtrování výsledků, než je vrátí aplikacím. Tyto soubory jsou po dokončení dotazu automaticky odstraněny a znalost aktivity dočasného souboru pomáhá správci vyladit parametr work_mem.
- Velikost dočasných souborů:Spojnicový graf zobrazující prostor využitý dočasnými soubory v průběhu času.
- Počet dočasných souborů:Spojnicový graf zobrazující počet dočasných souborů použitých v průběhu času.
- Aktivita dočasných souborů:Tabulka zobrazující informace uvedené v předchozích grafech, ale ve formě tabulky.
Vakua
Tato stránka zobrazuje informace o VACUUM a ANALÝZACH vyskytujících se v databázi. Tyto informace jsou užitečné k tomu, abyste věděli, zda proces autovakuování dělá svou práci dostatečně dobře, nebo zda je zaseknutý a potřebuje více zdrojů.
- Distribuce vakua / analýz:Spojnicový graf zobrazující VAKUUM a ANALÝZY v průběhu času a také informace o tabulce, která spotřebovala nejvíce procesorového výkonu.
- Analýzy na tabulku:Výsečový graf a tabulka zobrazující tabulky s největším počtem analýz, což naznačuje, že tyto tabulky jsou ve vysokém stavu změn.
- Vakua na stůl:Výsečový graf a tabulka znázorňující tabulky s největším počtem vakuů, což naznačuje, že tyto tabulky jsou ve vysokém stavu změn.
- N-tice odstraněné v tabulce:Výsečový graf a tabulka zobrazující počet n-tic a stránek odstraněných ve vakuových procesech pro tabulky.
- Stránky odstraněné v tabulce:Výsečový graf a tabulka zobrazující počet stránek a n-tic odstraněných ve vakuových procesech pro tabulky.
- Činnost automatického vakuování:Tabulka zobrazující VAKUUM a ANALÝZY v průběhu času za hodinu.
Zámky
Stránka zámků obsahuje jen několik dat, ale je to užitečná informace, abyste věděli, kdy existují procesy, které mohou zadržovat jiné dotazy po delší dobu.
- Zámky podle typů
- Nejčastější čekající dotazy:Seznam dotazů, u kterých bylo zjištěno, že čekají, seřazených od nejčastějších po nejméně.
- Dotazy, které čekaly nejvíce:Seznam dotazů a jak dlouho čekaly, seřazené od nejdelšího po nejkratší.
Dotazy
Stránka Dotazy je někdy nejzajímavější, protože zobrazuje informace o typech dotazů, které přicházejí z aplikací a uživatelů. Tyto informace mohou pomoci lépe porozumět tomu, jaký druh zahlcení databáze aplikace nebo uživatel vkládá do databázového systému, což může pomoci budoucímu ladění. Stejně jako dříve závisí přesnost těchto čísel na hodnotě log_min_duration_statement, protože jakákoli hodnota nad 0 nezaznamenává dotazy.
- Dotazy podle typu:Výsečový graf a tabulka zobrazující počet různých typů dotazů, jako jsou INSERT, UPDATE, DELETE, SELECT atd.
- Dotazy podle databáze:Výsečový graf a tabulka zobrazující počet dotazů nalezených v databázi.
- Dotazy podle aplikace:Výsečový graf a tabulka zobrazující počet dotazů nalezených na aplikaci.
- Počet zrušených dotazů:Informace o všech dotazech, které byly zrušeny.
Nahoře
Horní stránka obsahuje informace o dobách dotazů, celkově nejpomalejších dotazech, frekvenci dotazů a další. Konkrétní problematické dotazy pravděpodobně naleznete zde:
- Histogram časů dotazů:Histogram představující, kolik dotazů spadá do každé skupiny časování.
- Nejpomalejší jednotlivé dotazy:Seznam nejpomalejších nalezených dotazů seřazených podle nejdelšího po nejkratší.
- Časově náročné dotazy:Seznam normalizovaných dotazů a jejich celková doba trvání, seřazené podle největšího spotřebovaného času po nejmenší.
- Nejčastější dotazy:Seznam normalizovaných dotazů a kolikrát byly provedeny, seřazené od nejvíce po nejméně.
- Normalizované nejpomalejší dotazy:Seznam normalizovaných dotazů a jejich průměrné trvání, seřazené podle nejdelšího po nejkratší.
Události
Poslední stránkou jsou události, které obsahují informace o samotných protokolech a vše, co není dotaz, vakuum nebo kontrolní bod.
- Úrovně protokolů:Různé úrovně protokolů zobrazené po řádcích, jako jsou CONTEXT, LOG, STATEMENT, HINTS, WARNINGS a další.
- Distribuce událostí:Spojnicový graf událostí v průběhu času pro události PANIC, FATAL, ERROR a WARNING.
- Nejčastější chyby/události:Seznam UDÁLOSTÍ a jejich frekvence, seřazené od nejčastějších po nejméně.
Přispět
Projekt pgBadger je zdarma a existuje pod licencí PostgreSQL. V současné době je dobře udržovaný a aktualizován, aby fungoval s novějšími verzemi PostgreSQL, jak je vyvíjen. Máte nápady na vylepšení pgBadger? Rozdělte projekt a ukažte komunitě svá vylepšení.
Chcete-li odeslat chyby, navštivte stránku problémů s githubem.