Skip to main content

PgCluu Kurulumu

Merhaba,

Pgcluu, PostgreSQL cluster kullanımı istatisikleri ve veritabanına dair önemli precess'lerin, backgroung, checkpoint gibi, istatistiksel bilgilerinin toplanmasını ve bu bilgilerin grafiksel olarak son kullanıcıya aktarılmasını sağlayan açık kaynak kodlu bir araçtır. Pgcluu'nun websitesine buradan ulaşabilirsiniz.

PgCluu kullanmak için ihtiyacımız olan Perl, Postgres client ve opsiyonel olarak da sar ile rapor alabilmek için sysstat paketinin kurulumu gerekir.

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.

Adımlar

Pgcluu aracının üç adımı vardır. 
  • İlk adım, pgcluu_collectd komutu ile PostgreSQL ve sistem metriklerinin toplanmasıdır.
  • İkinci adımsa raporları oluşturmak için başlattığımız process'i sonlandırmaktır.
  • Son adım ise raporlama istenen raporun oluşturulmasıdır.

Kullanım

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.

Başlatılmış Process'in Sonlandırılması

Öncelikle pgcluu_collectd deamon’ını durdurmamız gerekir.
pgcluu_collectd ‘ye -k (kill) parametresini verelim:

pgcluu_collectd -k
OK: pgcluu_collectd exited with value 0

Raporun Oluşturulması

Pgcluu aracının son 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. 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,

Comments

Popular posts from this blog

pg_ctl: command not found

Hi, If you can not reach pg_ctl command in bash also you are sure this command exists in your server, check $PATH. -bash-4.2$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin So, the directory of pg_ctl is not seem in PATH. Input directory of pg_ctl and check it then run it.

PostgreSQL Foreign Data Wrappers

Hi all, I would like to mention about generating Foreign Data Wrappers(FDW) on PostgreSQL 9.6. FDW is used for remote access to tables from external data storage. If needed to use remote table in a query, you can use FDW tables. For instance you can get a table from remote database, but there is a condition. The condition is that user should have proper privileges on FDW table. There is two extension for FDW on PostgreSQL. First one is used for accessing PostgreSQL database to PostgreSQL database, called postgres_fdw . Second one is used for accessing PostgreSQL database to different databases (SQL Server, Sysbase) called tds_fdw .  Foreign Data Wrappers feature lets you to cross-query between remote database tables. Postgres_fdw and tds_fdw has different structure. Tds_fdw usign Tabular Data Stream application layer protocol to transfer data between database server and client. Generating Tds_fdw and Postgres_fdw is similar. I share an example for generating FDW between two Po

PostgreSQL High Availability - Patroni 2

Patroni kurulumuyla ilgili oldukça fazla kaynak bulunmakta fakat kurulum ve yönetimini beraber barındıran kaynağa denk gelmedim. Bu yazıda hem Patroni kurulumu hem de kurulum sonrası yönetimiyle alakalı detaylara ulaşabilirsiniz. PostgreSQL cluster'larının yönetimi için kullanılan Patroni ile ilgili temel bilgilerin yer aldığı Autofailover üzerine hazırladığım yazı serisine aşağıdaki linklerden erişebilirsiniz. PostgreSQL ve Autofailover PostgreSQL'de Autofailover ve Patroni 1 (Giriş) PostgreSQL'de Autofailover ve Patroni 2 (Kurulum, Konfigürasyon ve Yönetim) PostgreSQL'de Autofailover ve Patroni 3 (Mevcut PostgreSQL Cluster'inin Patroni'ye Geçirilmesi) Patroni, PostgreSQL veritabanlarının kurulumundan ve konfigürasyonundan sorumludur. Yani Patroni'yi kurduğumuz sunucular aynı zamanda Patroni ile kurulmuş PostgreSQL'leri barındıracak. Üç node'lu PostgreSQL ve üç node'lu ETCD cluster'larını oluşturacağım. Kuruluma önce üç no