Log dosyaları işler ters gittiğinde bakılması gereken yerlerdendir. Sorun olduğunda log dosyasını açıp okumak o an için yardımcı olabilir. Bir şeylerin ters gitmesini beklemeden veritabanının durumundan haberdar olmak için logları analiz edip raporlayan ” pgBadger “ı kullanıyoruz.
PostgreSQL log analiz aracı pgBadger, Perl ile yazılmış PostgreSQL instance’a ait log dosyasını alan ve bir HTML dosyasına işleyen açık kaynak kodlu bir programdır. Oluşturduğu rapor grafikler yardımıyla okuması kolay biçimde log dosyasındaki tüm bilgileri gösterir. Bu raporlar, sistem hataları, vacuum bilgileri, trend sorguları ve buna benzer veritabanı için temel ve önemli bilgilerin takibini kolaylaştırır.
PgBadger ile sadece bir veritabanının yada belirli bir zaman aralığına ait logun raporunu üretebilirsiniz.
PostgreSQL Log Ayarları
PgBadger’i etkin bir şekilde kullanmak için öncelikle PostgreSQL’i, pgbadger’a olabildiğince detaylı kayıtların tutulduğu bir log dosyası sağlamak için ayarlamalıyız.
Aşağıda örnek olarak bir kaç parametreyi değiştireceğimizi göstereceğim.
Ayarlayacağımız parametreler;
Veritabanında çalışan tüm sorguların loglanması için;
log_min_duration_statement = 0
Log dosyasında her bir satırın başına gelen ön kısmı log_line_prefix ile belirtiyoruz. Log_line_prefix’in pgBadger için en az zaman bilgisi (%t,%m yada %n) ve sürec veya oturum ID bilgilerini içermesi gerekir.
Log formatı ‘stderr’ ise log_line_prefix en azından aşağıdaki gibi olmalıdır;
log_line_prefix = ‘% t [% p]:’
Log formatı ‘syslog’ ise log_line_prefix’i aşağıdaki gibi ayarlayabiliriz;
log_line_prefix = ‘user=%u,db=%d,app=%a,client=%h ‘
Log formatım ‘stderr’ olduğu için log dosyası ön ekinde veritabanı adı, uygulama adı ve istemci IP bilgisi bulunması için aşağıdaki gibi ayarlıyorum;
log_line_prefix = ‘%t [%p]: db=%d,user=%u,app=%a,client=%h ‘
Bu ayarlara ek olarak postgresql.conf da aşağıdaki ayarları yapıyoruz;
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
Yaptığımız bu değişiklerden sonra log dosyasında oluşan kayıtları pgBadger ile raporladığımızda log_min_duration_statement=0 ayarı sayesinde veritabanında çalıştırılan sorgulardan en uzun sürenleri bulup analiz edebiliriz. Bu parametreyi sıfır(0) olarak ayarlayıp tüm sorguları log dosyasına kaydetmek az da olsa veritabanında yük oluşturabilir. Eğer sizin için önemli olan sadece yavaş sorguları bulmaksa bu parametreyi dakikaya göre ayarlayabilirsiniz.
Rapor Oluşturma
Pgbadger komutu ile postgresql.log dosyamdaki logları al ve bana postgresql.html adında bir rapor oluştur, diyoruz.
pgbadger --prefix '%t [%p]: db=%d, user=%u,app=%a,client=%h ' postgresql.log -o postgresql.html
Raporu oluşturduğunuzda bir web tarayıcısında açabilir ve gözden geçirebilirsiniz.
Pgbadger ayarlarını daha detaylı olarak github sayfasında bulabilirsiniz.