Merhaba,

PgCluu PostgreSQL performans ve kontrol aracıdır. PgCluu kullanmak için ihtiyacımız olan Perl, psql client ve opsiyonel olarak da sar ile rapor alabilmek için sysstat paketinin kurulumu gerekir.

Fedora 27 üzerinde PgCluu kurulumu için aşağıdaki gibi ilerleyebiliriz.
 

Kurulum

pgCluu kurulumunu şu şekillerde yapabilirsiniz:
  • Red Hat Enterprise Linux / CentOS / Fedora / Oracle Enterprise Linux kullanıcıları: https://yum.postgresql.org adresindeki PostgreSQL YUM deposunu kurmak ve Fedora’da dnf, diğerlerinde de yum kullanarak paketi kurmak: 
    • RHEL/CentOS/Oracle Linux: 
      • yum install pgcluu 
    • Fedora 27+: 
      • dnf install pgcluu
  • SLES 12: https://zypp.postgresql.org adresindeki PostgreSQL Zypper deposunu kurmak ve zypper ile paketi kurmak 
    • zypper install pgcluu
  • Diğer tüm Linux dağıtımlarında: Kaynak koddan derleyerek: 
    • https://github.com/darold/pgcluu/releases linkinde yer alan tar.gz dosyasını indirdikten sonra aşağıdaki işlemleri root ile yapabilirsiniz: 
      • tar xzf pgCluu-2.x.tar.gz
        cd pgCluu-2.x/
        perl Makefile.PL
        make
        make pure install
pgCluu’nun disk etkinliği bilgilerini de alması için, zorunlu olmasa da sysstat paketini kurmanızı öneririz.
  • Red Hat Enterprise Linux / CentOS / Fedora / Oracle Enterprise Linux :
    • yum install sysstat
  • Fedora:
    • dnf install sysstat
  • SLES :
    • zypper install sysstat
  • Debian/Ubuntu:
    • apt-get install sysstat

Bu dağıtımlarda sysstat’ın başlaması için ek işlemlere gerek olabilir. Bununla ilgili dağıtımların kendi notlarını okuyabilirsiniz.

Kullanım

 

pgCluu aracının iki adımı vardır. Birincisi pgcluu_collectd komutu ile PostgreSQL ve sistem metriklerinin toplanmasıdır. pgcluu komutu ile yapılacak ikinci adım ise raporlama tarafıdır.

PostgreSQL ve sistem metriklerinin oluşturulması için önce bu bilgilerin toplanacağı dizini belirlemeniz gerekmektedir. Sunucunun yoğunluğuna, toplayacağınız bilgilere ve veri toplama süresine göre bir yer gerekebilir -- ayrıca bu dizinin /tmp altında olmamasına güvenlik açısından dikkat etmenizi öneririz. Bu dizini pgcluu_collectd komutunu çalıştırmadan önce yaratmanız gerekmektedir. Bu işlemlerin hepsini postgres kullanıcısı ile yapabilirsiniz:

mkdir -m 700 -p /var/lib/pgsql/pgcluu

pgcluu_collectd ‘nin genel kullanımı şu şekildedir:

pgcluu_collectd [options] output_dir

Burada output_dir olarak hem üstte yarattığımız dizini kullanmalısınız.

Bazı yararlı parametreleri verelim:

-D: pgcluu’yu deamon modunda çalıştırır.

-i: İstatistiklerin toplanması için çalışma aralığını verir. Genelde 60s kullanılır.

-B: Eğer veritabanında ya da veritabanlarında daha önceden kurulmuş ise, pg_buffercache eklentisinden de istatistik toplar.

-d: Tek bir veritabanı için istatistik toplanacaksa, bu parametre ile o veritabanının adını verebilirsiniz. Bu parametre verilmediğinde istatistikler o cluster içindeki tüm veritabanlarından alınır.

-p: Eğer PostgreSQL’i 5432.port dışında bir porttan çalıştırıyorsanız, bu parametre ile o portu verebilirsiniz.

-U: Eğer PostgreSQL’e bağlanmak istediğiniz kullanıcı, pgcluu_collectd komutunu çalıştırdığınız işletim sistemi kullanıcısından farklı ise (burada postgres), o kullanıcı adını bu parametre ile verebilirsiniz.

-S: Eğer sysstat kurulu değilse ya da sar bilgilerini toplamak istemiyorsanız, bu parametre ile sar’ı devre dışı bırakabilirsiniz.

Daha fazla parametre için pgcluu_collectd --help çıktısını inceleyebilirsiniz.

Tüm clusterlar için metrikleri oluşturabilmek için aşağıdaki satır kullanılabilir.

pgcluu_collectd -D -i 60
/var/lib/pgsql/pgcluu/statistic/

Belirli bir veritabanına ait kısıtlamayla metrikleri oluşturmak istersek aşağıdaki komutu kullanabiliriz.

pgcluu_collectd -D -i 60
/var/lib/pgsql/pgcluu/statistic/ -h<hostname> -U<username> -d<databasename>

Tek bir veritabanına ait metrikleri toplamak için aşağıdaki komutu kullanıyorum. Komutları postgres kullanıcısı ile çalıştıralım.

pgcluu_collectd -D -i 60
/var/lib/pgsql/pgcluu/statistic/ -hlocalhost -Upostgres -d<databasename>


Belirli bir veritabanına ait kısıtlamayla metrikleri oluşturmak istersek aşağıdaki komutu kullanabiliriz.

pgcluu_collectd -D -i 60 /var/lib/pgsql/pgcluu/ -h<hostname> -U<username> -d<databasename>

Tek bir veritabanına ait metrikleri toplamak ve bunun farklı bir kullanıcı ile yapmak için aşağıdaki komutu kullanabilirsiniz:

pgcluu_collectd -D -i 60 /var/lib/pgsql/pgcluu/ -h localhost -U postgres -d gbd

Not: Eğer verilen parametrelerde bir hata varsa pgcluu_collectd çalışmayacak, ve -D parametresi verildiğinde bu bilgi terminale dökülmeyecektir. pgcluu_collectd çalıştıktan sonra

ps -ef| grep pgcluu_collectd

ile pgcluu_collectd ‘nin çalıştığına emin olun. Eğer çalışmıyorsa, -D parametresini kullanmayın ve ekran çıktısını izleyin.

Raporun Oluşturulması

pgCluu aracının ikinci aşaması rapor oluşturmaktır. Düzgün veri toplamak için en az 24 saat, genelde de 3 gün civarında bilgi toplanmasını öneriyoruz.

Öncelikle pgcluu_collectd deamon’ını durdurup raporu oluşturmak için, pgcluu_collectd ‘ye -k (kill) parametresini verelim:

pgcluu_collectd -k
OK: pgcluu_collectd exited with value 0


Raporun oluşturulması içinse pgcluu’yu kullanabilirsiniz:

pgcluu [options] -o report_dir input_dir

report_dir alanı, raporların tutulduğu dizindir.
input_dir alanı, pgcluu_collectd ‘ye verdiğimiz “output dir” dizinidir.

Raporların saklanacağı dizini postgres kullanıcısı ile oluşturalım.
 

mkdir /var/lib/pgsql/pgcluu-report

Raporun oluşturulması için pgcluu komutunu kullanacağız. Bunun için bir kaç seçenek mevcuttur. Örneğin tüm HTML raprunu veri dosyalarının tutulduğu yerden oluşturabilirsiniz. Bunun için aşağıdaki komutu kullanabilirsiniz.

pgcluu -o /var/lib/pgsql/pgcluu-report/ \

/var/lib/pgsql/pgcluu/

Eğer sadece bazı veritabanlarına ait raporları istiyorsanız o veritabanlarını pgcluu komutunu kullanırken belirtmeniz yeterlidir:

pgcluu -o /var/lib/pgsql/pgcluu-report/ \

/var/lib/pgsql/pgcluu/ --db-only "db1,db2,db3"


Eğer sadece sar çıktısından rapor üretmek istiyorsanız aşağıdaki komutu kullanabilirsiniz. Tabi öncesinde sar dosyasına ait kullanılacak rapor dizini oluşturulmalıdır:

mkdir /var/lib/pgsql/pgcluu-report_for_sar/

sar -p -A 10 60 > /var/lib/pgsql/sar_file.txt
pgcluu -o /var/lib/pgsql/pgcluu-report_for_sar/ -i /var/lib/pgsql/sar_file.txt

ya da günlük sar dosyasından alabilirsiniz. Aşağıdaki “sa18”, ayın 18’i anlamına gelmektedir. Buna göre uygun dosyayı seçebilirsiniz:

sar -p -A -f /var/log/sa/sa18 > /root/sar_file.txt

pgcluu -o /var/lib/pgsql/pgcluu-report_for_sar/ \

-i /root/sar_file.txt --from-sa-file


Tüm cluster üzerinden raporun oluşturulması için aşağıdaki komutu kullanabilirsiniz:

pgcluu -o /var/lib/pgsql/pgcluu-report/ \ /var/lib/pgsql/pgcluu/


Raporları oluşturduğumuz dosya dizini içerisinde tüm işlemleri tamamladıktan sonra index.html dosyası oluşacak. Bu html dosyasını herhangi modern tarayıcı ile açabilirsiniz. Yukarıdaki örnek için index.html dosyası /var/lib/pgsql/pgcluu-report/index.html olarak oluşturulacak. Bu dosyayı tarayıcı üzerinde açtığımızda örnek ekran görüntüleri aşağıdaki gibidir.

Index.html 
 



System >Memory
 

Sysinfo
 



Tüm bu bilgi dolu satırlardan sonra sabırsızlar için yapılacak işlemleri özetle paylaşmak gerekirse;
 
  • mkdir /var/lib/pgsql/pgcluu/statistics 
  • pgcluu_collectd -D -i 60 <diğer options...>
  • pgcluu_collectd -k
  • mkdir /var/lib/pgsql/pgcluu/reports
  • pgcluu -o /var/lib/pgsql/pgcluu/reports

PgCluu kullnarak rapor oluşturmanın nasıl yapıldığını test ortamında deneyelim. 
 
PgCluu kullanırken ihtiyacımız olan dosya dizinlerini önceden hazırlayalım.

[postgres@localhost ~]$ mkdir -m 700 -p /var/lib/pgsql/pgcluu 
[postgres@localhost pgcluu]$ mkdir -m 700 -p /var/lib/pgsql/pgcluu/statistics
[postgres@localhost pgcluu]$ mkdir -m 700 -p /var/lib/pgsql/pgcluu/reports
[postgres@localhost ~]$ mkdir /var/lib/pgsql/pgcluu/reports_for_sar



Öncelikle raporun verilerin toplanması için pgcluu_collectd çalıştırılır.

[postgres@localhost pgcluu]$ pgcluu_collectd -D -i 60 -hlocalhost -Upostgres -p54962 -dgunce /var/lib/pgsql/pgcluu/statistics
LOG: Detach from terminal with pid: 30026


Pgbench kullanarak bazı veriler oluşturdum ve veritabanı üzerinde hareket sağlamış oldum. Kayıt başladıktan sonra veritabanı üzerinde transaction bazında hareketlilik yaratmak için pgbench yardımıyla pg_bench_Accounts tablosuna 5.000.000 satır eklenmiş oldu. 

[postgres@localhost ~]$ pgbench -i -s 50 gunce

dropping old tables...
creating tables...
5000000 of 5000000 tuples (100%) done (elapsed 15.84 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done.
1000000000 adet transaction çalıştıralım.

[postgres@localhost ~]$ pgbench -c 10 -j 2 -t 10000 gunce
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 50
query mode: simple
number of clients: 10
number of threads: 2
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 18.211 ms
tps = 549.113406 (including connections establishing)
tps = 549.148138 (excluding connections establishing)


PostgreSQL cluster üzerinde hareketliliği sağladıktan sonra pgcluu_collectd deamon’u durdurup raporu oluşturmak için kullanılacak komut aşağıdaki gibidir. pgcluu_collectd -k

[postgres@localhost ~]$ pgcluu_collectd -k
OK: pgcluu_collectd exited with value 0


Raporların saklanacağı dizini postgres kullanıcısı ile oluşturmuştuk hazırlıkları yaptığımız sırada.
Raporun oluşturulması için pgcluu komutunu kullanacağız. Bunun için bir kaç seçenek mevcut.

Örneğin tüm HTML raprunu veri dosyalarının tutulduğu yerden oluşturabilirsiniz. Bunun için aşağıdaki komutu kullanabilirsiniz. Ben hem Sar komutu için hem de pgcluu kullanarak iki farklı rapor oluşturdum.

pgcluu -o
/var/lib/pgsql/pgcluu/reports /var/lib/pgsql/pgcluu/statistics
 
Sar dosyası oluşturmak için sar komutuyla birlikte aşağıdaki komutu kullandım.

[postgres@localhost ~]$ sar -p -A 10 60 > /var/lib/pgsql/pgcluu/statistics/my_sar_file.txt

Sar raporu için aşağıdaki gibi pgcluu komutunu çalıştıralım.
[postgres@localhost ~]$ pgcluu -o /var/lib/pgsql/pgcluu/reports_for_sar/ -i /root/my_sar_file.txt

/var/lib/pgsql/pgcluu/reports altında oluşturulmuş index.html dosyasını tarayıcı üzerinde açabilirsiniz.


Sevgiler,

No comments

Add Comment

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.
E-Mail addresses will not be displayed and will only be used for E-Mail notifications.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Submitted comments will be subject to moderation before being displayed.