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.
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.
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.
pgcluu_collectd ‘ye -k (kill) parametresini verelim:
pgcluu_collectd -k
OK: pgcluu_collectd exited with value 0
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;
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,
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
- 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
Post a Comment