Soms zijn logboeken de laatste dingen die worden gecontroleerd als er iets misgaat, maar meestal zijn het de eerste dingen die om hulp schreeuwen als er iets gebeurt. Het handmatig doorzoeken van de logboeken op problemen helpt, maar waarom zou u geen logboekanalysatoren gebruiken om automatisch rapporten te genereren om inzicht te krijgen in de database voordat er iets misgaat?
De PostgreSQL log analyzer "pgBadger" is een open source "fast PostgreSQL log analysis report" programma geschreven in Perl dat de log output van een draaiende PostgreSQL instantie neemt en deze verwerkt in een HTML-bestand. Het rapport dat het genereert, toont alle gevonden informatie in een mooi en gemakkelijk te lezen rapportformaat. Deze rapporten kunnen helpen licht te werpen op fouten in het systeem, checkpoint-gedrag, vacuümgedrag, trends en andere elementaire maar cruciale informatie voor een PostgreSQL-systeem.
PostgreSQL-logboekinstellingen
Om pgBadger effectief te gebruiken, moet inloggen in PostgreSQL zo worden ingesteld dat pgBadger zoveel mogelijk informatie krijgt. Een handvol opties kan worden aangepast zodat het databasesysteem nuttige informatie kan loggen voor pgBadger om nuttige rapporten te genereren. Volledige documentatie voor PostgreSQL-configuratie is te vinden op de pgBadger github-pagina, maar hieronder staat wat basisinformatie.
Als het wordt uitgevoerd, verwerkt pgBadger de logbestanden van PostgreSQL, of ze nu syslog, stderr of csvlog zijn, zolang de logregels zelf voldoende informatie in het voorvoegsel bevatten.
Voorbeeld log_line_prefix waarden:
Als log_destination ='syslog'
log_line_prefix = 'user=%u,db=%d,app=%aclient=%h '
Als log_destination ='stderr'
log_line_prefix = '%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h '
Basisconfiguratie-instellingen om in te stellen in 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)
Een van de meer nuttige onderdelen van de rapporten van pgBadger is het trage queryrapport, dat afhankelijk is van de databaseregistratiequery's die de log_min_duration_statement-waarde overschrijden. Deze waarde wordt weergegeven in milliseconden en elke query die wordt voltooid met een grotere tijd dan deze wordt geregistreerd en vervolgens worden rapporten gegenereerd door pgBadger. Dit is handig voor het vinden en analyseren van zoekopdrachten die langer duren dan gewenst.
Hoewel het instellen van deze waarde op 0 om alle query's te loggen, de meeste informatie zou opleveren, kan dit gemakkelijk leiden tot het genereren van logbestanden die veel te groot zijn, en de prestaties van de database zelf beïnvloeden vanwege het constant schrijven van logs. Een meer gezonde waarde levert geen perfect aantal zoekopdrachten op, maar zal rapporten nog steeds richten op langzaam lopende zoekopdrachten in het algemeen. Als zoekopdrachten die een paar minuten duren als 'traag' worden beschouwd, zou het goed zijn om de waarde in te stellen op één minuut. Als zoekopdrachten die langer dan een paar seconden duren als 'traag' worden beschouwd, zou het ook goed werken om de waarde in te stellen op ongeveer 5 seconden.
Logboeken genereren
Het genereren van logboeken gebeurt via de opdrachtregel met behulp van het uitvoerbare bestand pgBadger. Er zijn een groot aantal opties, maar de meest elementaire instelling is om het logregelvoorvoegsel te geven dat de database gebruikt, het logbestand en het html-uitvoerbestand.
./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
Voor meer informatie over de verschillende opties voor pgBadger, raadpleeg de documentatie of voer het binaire bestand uit met de --help input parameter.
Geavanceerde logboekgeneratie
Aangezien het genereren van rapporten op logs een eenvoudige opdrachtregeluitvoering is, kunnen aangepaste scripts en programma's worden ingesteld om automatisch rapporten te genereren, gefaseerd op webservers, gemaild of gearchiveerd in langdurige opslag. Ontdek de verschillende opties die beschikbaar zijn voor het genereren van rapporten en wees creatief met automatiseringssystemen voor het genereren en bezorgen van rapporten.
Logboeken bekijken
Het bekijken van de logboeken is waar het plezier om de hoek komt kijken. Het gegenereerde rapport kan nu in een webbrowser worden geopend en bekeken.
Globale statistieken
De sectie met algemene statistieken bevat enkele basisinformatie die in het PostgreSQL-logboek is gevonden, waaronder:
- Query's:het aantal gevonden zoekopdrachten, de duur, het aantal genormaliseerde zoekopdrachten, enz.
- Gebeurtenissen:totaal aantal gebeurtenissen, genormaliseerde gebeurtenissen, enz.
- Vacuüms:het totale aantal gevonden automatische stofzuigers en automatische analyses.
- Tijdelijke bestanden:het totale aantal gevonden tijdelijke bestanden, maximale grootte en gemiddelde grootte.
- Sessie:totaal aantal sessies, pieksessietijd, totale duur van sessies, gemiddelde duur van sessies, gemiddelde gevonden zoekopdrachten per sessie, gemiddelde duur van zoekopdrachten per sessie.
- Verbindingen:totaal aantal verbindingen, piekverbindingen en totaal aantal databases waarmee is verbonden.
Opmerking: Resultaten met betrekking tot zoekopdrachten, het aantal zoekopdrachten of de duur van de zoekopdracht zijn onnauwkeurig met waarden van log_min_duration_statement groter dan 0.
Voorbeeld:
pgBadger Voorbeeld van wereldwijde statistiekenVerbindingen
De verbindingspagina toont grafieken met details over de verbindingsinformatie in de logboeken. Zolang log_connections en log_disconnections beide zijn ingeschakeld, zijn de waarden hier nauwkeurig. Beschikbare grafieken zijn:
- Gevestigde verbindingen:weergave van het maximale, minimale en gemiddelde aantal verbindingen in de loop van de tijd.
- Verbindingen per database:een cirkeldiagram en tabelweergave met het aantal verbindingen voor elke gevonden database.
- Verbindingen per gebruiker:een cirkeldiagram en tabelweergave met het aantal verbindingen voor elke gevonden gebruiker.
- Verbindingen per host:een cirkeldiagram en tabelweergave met het aantal verbindingen voor elke gevonden bronhost.
Voorbeeld:
pgBadger Connections-taartdiagramvoorbeeldSessies
De sessiepagina is vergelijkbaar met de verbindingspagina, maar bevat wat meer informatie over de sessies zelf.
- Gelijktijdige sessies:een lijndiagram dat het aantal sessies in de loop van de tijd laat zien.
- Histogram van sessietijden:een staafdiagram en tabel met sessietijden.
- Sessies per database:een cirkeldiagram en tabelweergave met het aantal sessies voor elke gevonden database.
- Sessies per gebruiker:een cirkeldiagram en tabelweergave met het aantal sessies voor elke gevonden gebruiker.
- Sessies per host:een cirkeldiagram en tabelweergave met het aantal sessies voor elke gevonden bronhost.
- Sessies per toepassing:het aantal verbonden sessies per toepassing.
Checkpoints
De checkpoints-pagina biedt informatie over het checkpointer-proces, inclusief het aantal geschreven buffers, WAL-bestanden en andere algemene informatie.
- Checkpoint-buffers:een lijndiagram dat de hoeveelheid buffers laat zien die in de loop van de tijd door het checkpointproces zijn geschreven.
- Checkpoints WAL-bestanden:een lijndiagram met het aantal WAL-bestanden dat in de loop van de tijd door de checkpointer is toegevoegd, verwijderd of gerecycled.
- Afstand controlepunt:een lijndiagram met de afstand en schatting voor controlepunten.
- Activiteit van controlepunten:een tabel met de vorige vier gegevenspunten in tabelvorm.
Tijdelijke bestanden
De pagina met tijdelijke bestanden bevat informatie voor tijdelijke bestanden, die worden gemaakt wanneer een query geen work_mem meer heeft en de schijf moet gebruiken om resultaten te sorteren of te filteren voordat ze naar de toepassingen worden teruggestuurd. Deze bestanden worden automatisch verwijderd wanneer de query is voltooid, en het kennen van de activiteit van het tijdelijke bestand helpt de beheerder om de parameter work_mem af te stemmen.
- Grootte van tijdelijke bestanden:een lijndiagram dat de ruimte laat zien die in de loop van de tijd door tijdelijke bestanden wordt gebruikt.
- Aantal tijdelijke bestanden:een lijndiagram met het aantal tijdelijke bestanden dat in de loop van de tijd is gebruikt.
- Activiteit tijdelijke bestanden:een tabel met de informatie in de vorige grafieken, maar in tabelvorm.
Stofzuigers
Deze pagina toont informatie over VACUM's en ANALYSES die in de database voorkomen. Deze informatie is handig om te weten of het autovacuümproces zijn werk goed genoeg doet, of dat het vastloopt en meer middelen nodig heeft.
- Verdeling van vacuüms/analyses:een lijndiagram met VACUM'S en ANALYSES in de loop van de tijd, evenals informatie over de tabel die de meeste CPU-verwerkingskracht verbruikte.
- Analyse per tabel:een cirkeldiagram en tabel met de tabellen met de meeste analyses, wat erop wijst dat deze tabellen in hoge mate veranderen.
- Vacuüms per tafel:een cirkeldiagram en tabel met de tafels met de meeste stofzuigers, wat suggereert dat deze tafels in hoge mate veranderen.
- Tuples verwijderd per tabel:een cirkeldiagram en tabel met het aantal tupels en pagina's dat is verwijderd in vacuümprocessen voor tabellen.
- Pagina's verwijderd per tabel:een cirkeldiagram en tabel met het aantal pagina's en tupels dat is verwijderd in vacuümprocessen voor tabellen.
- Autovacuümactiviteit:een tabel met de VACUM's en ANALYSES in de tijd per uur.
Vergrendelt
De pagina met vergrendelingen bevat slechts een paar stukjes gegevens, maar het is nuttige informatie om te weten wanneer er processen zijn die andere vragen voor langere tijd kunnen tegenhouden.
- Vergrendelt op type
- Meest voorkomende wachtende zoekopdrachten:een lijst met zoekopdrachten waarvan is vastgesteld dat ze wachten, gerangschikt van meest voorkomend tot minst voorkomend.
- Query's die het meest hebben gewacht:een lijst met queries en hoe lang ze hebben gewacht, gerangschikt van langst naar kortst.
Vragen
De pagina Query's is soms de meest opwindende, omdat deze informatie toont over de soorten query's die afkomstig zijn van de applicaties en gebruikers. Deze informatie kan helpen om meer inzicht te krijgen in het soort databaseverloop dat een toepassing of gebruiker op het databasesysteem plaatst, wat kan helpen bij toekomstige afstemming. Zoals eerder hangt de nauwkeurigheid van deze getallen af van de waarde van log_min_duration_statement, aangezien elke waarde boven 0 geen query's registreert.
- Zoekopdrachten op type:een cirkeldiagram en tabel met het aantal verschillende soorten zoekopdrachten, zoals INSERT, UPDATE, DELETE, SELECT, enz.
- Zoekopdrachten per database:een cirkeldiagram en tabel met het aantal gevonden zoekopdrachten per database.
- Zoekopdrachten per applicatie:een cirkeldiagram en tabel met het aantal gevonden zoekopdrachten per applicatie.
- Aantal geannuleerde zoekopdrachten:informatie over geannuleerde zoekopdrachten.
Boven
De bovenste pagina bevat informatie over de zoektijden, de langzaamste in het algemeen, de zoekfrequentie en meer. Specifieke problematische zoekopdrachten zijn waarschijnlijk hier te vinden:
- Histogram van zoekopdrachttijden:een histogram dat aangeeft hoeveel zoekopdrachten in elke groepering van timings vallen.
- Langzaamste individuele zoekopdrachten:een lijst met de langzaamste gevonden zoekopdrachten, gerangschikt van langste naar kortste.
- Tijdrovende zoekopdrachten:een lijst met genormaliseerde zoekopdrachten en hun totale duur, gerangschikt van de grootste naar de minste.
- Meest voorkomende zoekopdrachten:een lijst met genormaliseerde zoekopdrachten en hoe vaak ze zijn uitgevoerd, gerangschikt van meest naar minst.
- Genormaliseerde langzaamste zoekopdrachten:een lijst met genormaliseerde zoekopdrachten en hun gemiddelde duur, gerangschikt van langste naar kortste.
Evenementen
De laatste pagina zijn gebeurtenissen, die informatie bevatten over de logboeken zelf, en alles wat geen vraag, vacuüm of controlepunt is.
- Logniveaus:de verschillende niveaus van logboeken verschenen per regel, zoals CONTEXT, LOG, STATEMENT, HINTs, WAARSCHUWINGEN en andere.
- Distributie van gebeurtenissen:een lijngrafiek van gebeurtenissen in de loop van de tijd voor PANIC-, FATAL-, ERROR- en WARNING-gebeurtenissen.
- Meest voorkomende fouten/gebeurtenissen:een lijst met EVENEMENTEN en hun frequentie, gerangschikt van meest voorkomend naar minst.
Bijdragen
Het pgBadger-project is gratis en bestaat onder de PostgreSQL-licentie. Het wordt momenteel goed onderhouden en bijgewerkt om te werken met nieuwere versies van PostgreSQL zoals het is ontwikkeld. Heeft u ideeën om pgBadger te verbeteren? Fork het project en laat de gemeenschap je verbeteringen zien.
Ga naar de pagina met github-problemen om bugs in te dienen.