Yönetilen PostgreSQL Veritabanı İstatistiklerini Elastic Stack Kullanarak Analiz Etme: Ubuntu 18.04 Üzerinde Kapsamlı Bir Rehber
Giriş
Günümüzün hızla gelişen dijital dünyasında, veritabanları uygulamaların bel kemiğini oluşturur. Özellikle PostgreSQL gibi güçlü, açık kaynaklı ilişkisel veritabanları, performansı, güvenilirliği ve genişletilebilirliği nedeniyle birçok kuruluş tarafından tercih edilmektedir. Ancak, bir veritabanını kurmak kadar, onu etkin bir şekilde izlemek ve performansını sürekli olarak optimize etmek de kritik öneme sahiptir. Yönetilen PostgreSQL hizmetleri (örneğin, AWS RDS for PostgreSQL, Azure Database for PostgreSQL, Google Cloud SQL for PostgreSQL), operasyonel yükü azaltarak ölçeklenebilirlik ve yüksek erişilebilirlik gibi avantajlar sunarken, altta yatan sistemlere doğrudan erişimin sınırlı olması nedeniyle izleme yaklaşımlarını farklılaştırır.
Bu makalede, Yönetilen PostgreSQL veritabanı istatistiklerini kapsamlı bir şekilde analiz etmek için güçlü bir araç seti olan Elastic Stack’i (Elasticsearch, Kibana, Logstash ve Beats) Ubuntu 18.04 işletim sistemi üzerinde nasıl kullanacağımızı adım adım inceleyeceğiz. Ubuntu 18.04, kararlılığı ve geniş desteği nedeniyle sunucu ortamlarında hala yaygın olarak kullanılmaktadır. Amacımız, veritabanı performansını anlamak, darboğazları tespit etmek, sorunları proaktif olarak çözmek ve kapasite planlaması yapmak için gerekli araçları ve yöntemleri sağlamaktır.
PostgreSQL Neden İzlenmeli?
Veritabanı izleme, herhangi bir uygulama altyapısının vazgeçilmez bir parçasıdır. PostgreSQL gibi karmaşık bir sistemin izlenmesi, birçok önemli avantaj sunar:
* Performans Darboğazlarını Tespit Etme: Yavaş çalışan sorgular, yüksek CPU veya I/O kullanımı, kilitlenmeler gibi performans sorunlarını belirlemek ve gidermek için temeldir.
* Kaynak Kullanımını Anlama: Bellek, disk, ağ ve CPU gibi kaynakların nasıl kullanıldığını anlamak, kapasite planlaması ve maliyet optimizasyonu için hayati öneme sahiptir.
* Hata Tespiti ve Hata Ayıklama: Veritabanı hatalarını, bağlantı sorunlarını veya replikasyon gecikmelerini hızla tespit ederek kesinti sürelerini minimize eder.
* Kapasite Planlaması: Geçmiş performans verilerini analiz ederek gelecekteki kaynak ihtiyaçlarını tahmin etmek, veritabanının büyümesini ve ölçeklenmesini yönetmeye yardımcı olur.
* Güvenlik Denetimi: Başarısız bağlantı denemeleri, yetkisiz erişim girişimleri gibi güvenlik olaylarını izleyerek olası tehditlere karşı koruma sağlar.
* Proaktif Sorun Çözme: Sorunlar kullanıcıları etkilemeden önce uyarılar alarak ve müdahale ederek sistemin genel kararlılığını artırır.
Yönetilen PostgreSQL Hizmetleri ve İzleme Zorlukları
Yönetilen PostgreSQL hizmetleri, veritabanı yönetiminin karmaşıklığını azaltarak geliştiricilerin ve operasyon ekiplerinin temel işlerine odaklanmalarını sağlar. Ancak, bu kolaylık beraberinde bazı izleme zorluklarını da getirir:
* Sınırlı İşletim Sistemi Erişimi: Yönetilen hizmetlerde, altta yatan işletim sistemine (Ubuntu 18.04 gibi) doğrudan SSH erişimi genellikle mümkün değildir. Bu, geleneksel sunucu tabanlı izleme araçlarının (örneğin, top, iostat gibi komutlar) doğrudan kullanılamaması anlamına gelir.
* Kısıtlı Yapılandırma Erişimi: postgresql.conf gibi kritik yapılandırma dosyalarına doğrudan erişim sınırlı olabilir. Yapılandırma değişiklikleri genellikle bulut sağlayıcısının konsolu veya API’leri aracılığıyla yapılır.
* Bulut Sağlayıcının Metriklerine Bağımlılık: Yönetilen hizmetler, kendi izleme panolarını ve metriklerini sunar (örneğin, AWS CloudWatch, Azure Monitor). Bu metrikler faydalı olsa da, genellikle yeterince ayrıntılı olmayabilir veya özel analiz araçlarıyla kolayca entegre edilemeyebilir.
* Uzaktan İzleme İhtiyacı: Veritabanı sunucusuna doğrudan erişim olmadığı için, izleme çözümlerinin veritabanına uzaktan bağlanabilmesi ve istatistikleri çekebilmesi gerekir. Bu, genellikle PostgreSQL’in kendi istatistik görünümlerini kullanmayı içerir.
Bu zorluklara rağmen, Elastic Stack gibi güçlü bir çözüm, Yönetilen PostgreSQL veritabanlarının derinlemesine izlenmesi için esnek ve kapsamlı bir yaklaşım sunar.
Elastic Stack’i Tanıyalım
Elastic Stack, gerçek zamanlı veri analizi, arama ve görselleştirme için tasarlanmış açık kaynaklı bir yazılım paketidir. Başlangıçta ELK Stack (Elasticsearch, Logstash, Kibana) olarak bilinen bu yapıya daha sonra hafif veri göndericileri olan Beats eklenmiştir.
* Elasticsearch: Dağıtık, RESTful bir arama ve analiz motorudur. Tüm verilerinizin depolandığı ve analiz edildiği merkezi depodur. JSON tabanlı belgeler halinde veri depolar ve ölçeklenebilirliği ile bilinir.
* Kibana: Elasticsearch’te depolanan verileri keşfetmek, görselleştirmek ve panolar oluşturmak için kullanılan bir web arayüzüdür. Verilerinizi grafikler, tablolar ve haritalar aracılığıyla anlamanıza yardımcı olur.
* Logstash: Dinamik veri toplama hattıdır. Çeşitli kaynaklardan (dosyalar, veritabanları, ağ akışları vb.) veri alır, dönüştürür ve Elasticsearch’e gönderir. Karmaşık veri işleme ve zenginleştirme yetenekleri sunar.
* Beats: Hafif, tek amaçlı veri göndericileri ailesidir. Sunucularınızdan veya diğer kaynaklardan belirli türdeki verileri (günlükler, metrikler, ağ trafiği vb.) toplar ve doğrudan Elasticsearch’e veya Logstash’e gönderir. PostgreSQL izlemesi için özellikle Metricbeat ve Filebeat önemlidir.
İzlenecek Temel PostgreSQL İstatistikleri
PostgreSQL, sistemin iç işleyişi hakkında zengin istatistikler sunan birçok sistem görünümü sağlar. Yönetilen bir ortamda bu görünümleri kullanarak veritabanının durumunu anlamak kritik öneme sahiptir.
* pg_stat_activity: Hangi arka plan işlemlerinin çalıştığını, hangi sorguların aktif olduğunu, bekleyen olayları (wait events) ve her bir sorgunun durumunu gösterir. Darboğazları ve uzun süren sorguları tespit etmek için çok önemlidir.
* pg_stat_database: Veritabanı düzeyinde istatistikler sunar. İşlem sayıları (commit/rollback), okunan/yazılan bloklar, geçersiz kılınan sorgular (conflicts) ve geçici dosya kullanımı gibi bilgileri içerir.
* pg_stat_statements: Bu uzantı etkinleştirildiğinde, tüm sorguların performans istatistiklerini (toplam yürütme süresi, çağrı sayısı, ortalama süre vb.) izler. Sorgu optimizasyonu için vazgeçilmezdir. Yönetilen hizmetlerde bu uzantıyı etkinleştirmek için bulut sağlayıcısının arayüzünü kullanmanız gerekebilir.
* pg_stat_user_tables / pg_stat_all_tables: Tablo düzeyinde istatistikler sağlar. Sıralı taramalar (sequential scans), indeks taramaları (index scans), canlı/ölü tuple sayıları, ekleme/güncelleme/silme işlemleri gibi bilgileri içerir.
* pg_stat_user_indexes / pg_stat_all_indexes: İndeks kullanım istatistiklerini gösterir. Hangi indekslerin kullanıldığını, kaç kez tarandığını ve indeksin disk üzerindeki boyutunu izlemek için faydalıdır.
* pg_locks: Veritabanındaki aktif kilitlenmeleri gösterir. Kilit çekişmelerini (lock contention) ve performans düşüşlerine neden olabilecek engellenen işlemleri tespit etmek için kullanılır.
* pg_replication_slots / pg_stat_replication: Eğer replikasyon kullanılıyorsa, replikasyon durumunu, gecikmeleri ve slot bilgilerini izlemek için kullanılır.
* pg_settings: Mevcut veritabanı yapılandırma parametrelerini gösterir.
* PostgreSQL Logları: Hatalar, yavaş sorgular, bağlantı denemeleri, checkpoint’ler ve diğer önemli olaylar hakkında bilgi içerir. Yönetilen hizmetlerde bu loglara doğrudan dosya sistemi üzerinden erişim olmasa da, bulut sağlayıcısının log hizmetleri (örn. CloudWatch Logs) aracılığıyla erişilebilir ve Elastic Stack’e aktarılabilirler.
Ubuntu 18.04 Üzerinde İzleme Ortamını Kurma
Bu bölümde, Elastic Stack bileşenlerini Ubuntu 18.04 sunucumuza kuracak ve Yönetilen PostgreSQL veritabanımızı izleme için yapılandıracağız.
Elastic Stack Kurulumu
Elastic Stack bileşenlerini kurmadan önce, Elastic GPG anahtarını ve APT deposunu sistemimize eklememiz gerekiyor.
# GPG anahtarını ekle
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
apt-transport-https paketini yükle (eğer yüklü değilse)
sudo apt-get install apt-transport-https
Elastic deposunu ekle
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
Paket listesini güncelle
sudo apt-get update
Elasticsearch Kurulumu:
sudo apt-get install elasticsearch
Kurulumdan sonra, Elasticsearch’ü yapılandırmamız gerekir. sudo nano /etc/elasticsearch/elasticsearch.yml dosyasını açın ve aşağıdaki temel ayarları yapın:
# Ağ ayarları
network.host: 0.0.0.0 # Tüm arayüzlerden erişime izin verir, güvenlik duvarı ile kısıtlayın
http.port: 9200
Küme ve düğüm adları (isteğe bağlı)
cluster.name: elastic-cluster
node.name: node-1
Bellek ayarları (sistem belleğinizin yarısı, max 31GB)
jvm.options dosyasında ayarlanır, ancak burada bir not düşelim:
sudo nano /etc/elasticsearch/jvm.options
-Xms4g
-Xmx4g
Değişiklikleri kaydedin ve Elasticsearch servisini başlatın ve başlangıçta otomatik çalışacak şekilde etkinleştirin:
sudo systemctl start elasticsearch
sudo systemctl enable elasticsearch
sudo systemctl status elasticsearch # Durumunu kontrol edin
Tarayıcınızdan http://:9200 adresine giderek Elasticsearch’ün çalıştığını doğrulayabilirsiniz.
Kibana Kurulumu:
sudo apt-get install kibana
Kibana’yı yapılandırmak için sudo nano /etc/kibana/kibana.yml dosyasını düzenleyin:
server.port: 5601
server.host: "0.0.0.0" # Tüm arayüzlerden erişime izin verir
elasticsearch.hosts: ["http://localhost:9200"] # Elasticsearch adresini belirtin
Kibana servisini başlatın ve etkinleştirin:
sudo systemctl start kibana
sudo systemctl enable kibana
sudo systemctl status kibana
Tarayıcınızdan http://:5601 adresine giderek Kibana arayüzüne erişebilirsiniz.
Logstash Kurulumu (İsteğe Bağlı ama Gelişmiş Log İşleme için Önerilir):
sudo apt-get install logstash
Logstash, özellikle karmaşık log formatlarını ayrıştırmak veya birden fazla kaynaktan gelen verileri birleştirmek gerektiğinde faydalıdır. Bu makalede ana odak Metricbeat ve Filebeat üzerinde olacağı için Logstash yapılandırmasına daha sonra değineceğiz.
Yönetilen PostgreSQL’i İzleme İçin Yapılandırma
Yönetilen bir PostgreSQL hizmetinde, doğrudan dosya sistemi erişiminiz olmadığı için yapılandırma adımları bulut sağlayıcınızın yönetim konsolu üzerinden yapılmalıdır.
1. pg_stat_statements Uzantısını Etkinleştirme: Performans analizi için kritik olan pg_stat_statements uzantısını etkinleştirin. Genellikle bu, veritabanı parametre grubunuzu düzenleyerek shared_preload_libraries ayarına pg_stat_statements ekleyerek ve veritabanını yeniden başlatarak yapılır. Ayrıca, pg_stat_statements.max ve pg_stat_statements.track gibi ayarları da yapılandırmanız gerekebilir.
2. Günlük Kayıt Ayarlarını Düzenleme: Yönetilen hizmetlerde, günlük kayıt ayarlarını bulut sağlayıcınızın konsolu üzerinden yapılandırın. Özellikle aşağıdaki ayarlar önemlidir:
* log_min_duration_statement: Belirtilen süreden daha uzun süren tüm sorguları günlüğe kaydeder (örn. 250ms). Yavaş sorguları tespit etmek için hayati öneme sahiptir.
* log_checkpoints: Checkpoint olaylarını günlüğe kaydeder.
* log_connections, log_disconnections: Bağlantı açılış ve kapanışlarını günlüğe kaydeder.
* log_error_verbosity: Günlüklerdeki hata mesajlarının detay seviyesini ayarlar (örn. default, verbose).
3. İzleme Kullanıcısı Oluşturma: Elastic Stack’in PostgreSQL’e bağlanabilmesi için özel, salt okunur bir kullanıcı oluşturmak en iyi güvenlik uygulamasıdır. Bu kullanıcıya pg_stat_* görünümlerine ve pg_settings‘e erişim izni verin.
CREATE USER monitor WITH PASSWORD 'sifre';
GRANT SELECT ON pg_stat_activity TO monitor;
GRANT SELECT ON pg_stat_database TO monitor;
-- Diğer pg_stat_* görünümleri için de benzer izinler verin
GRANT SELECT ON pg_stat_statements TO monitor; -- Eğer etkinse
GRANT SELECT ON pg_settings TO monitor;
4. Güvenlik Duvarı Kuralları: Ubuntu 18.04 sunucunuzdan Yönetilen PostgreSQL örneğinize (genellikle varsayılan 5432 numaralı port üzerinden) bağlantıya izin veren güvenlik duvarı kurallarını (hem sunucunuzun güvenlik duvarı hem de bulut sağlayıcınızın güvenlik grupları/ağ ACL’leri) yapılandırdığınızdan emin olun.
Metricbeat ve Filebeat ile PostgreSQL Verilerini Toplama
Metricbeat ve Filebeat, PostgreSQL’den metrikleri ve logları toplamak için kullanılan hafif veri göndericileridir.
Metricbeat ve Filebeat Kurulumu
Daha önce Elastic deposunu eklediğimiz için doğrudan kurulum yapabiliriz:
sudo apt-get install metricbeat filebeat
Metricbeat Yapılandırması (PostgreSQL Metrikleri İçin)
Metricbeat, PostgreSQL için hazır bir modül ile gelir. Bu modülü etkinleştirmemiz ve yapılandırmamız gerekir.
sudo metricbeat modules enable postgresql
Şimdi modülün yapılandırma dosyasını düzenleyin: sudo nano /etc/metricbeat/modules.d/postgresql.yml.
hosts bölümünü Yönetilen PostgreSQL örneğinizin uç noktası ve portu ile güncelleyin. Kullanıcı adı ve şifreyi de ekleyin.
- module: postgresql
metricsets:
- database
- bgwriter
- activity
- statement # pg_stat_statements uzantısı etkinse
- wal # WAL istatistikleri için
- replication # Replikasyon istatistikleri için
- index # Index istatistikleri için
- table # Table istatistikleri için
period: 10s
hosts: [":5432"] # Örnek: ["mypgdb.xxxx.eu-west-1.rds.amazonaws.com:5432"]
username: "monitor"
password: "sifre"
# database: "your_database_name" # Belirli bir veritabanını izlemek için
# sslmode: "require" # Eğer SSL kullanıyorsanız
Metricbeat’in çıktısını Elasticsearch’e göndermesi için sudo nano /etc/metricbeat/metricbeat.yml dosyasını düzenleyin. Elasticsearch çıktı bölümünü etkinleştirin ve Logstash çıktı bölümünü yorum satırı yapın (eğer Logstash kullanmıyorsanız):
output.elasticsearch:
hosts: ["localhost:9200"]
# username: "elastic" # Eğer Elasticsearch güvenliği etkinse
# password: "changeme"
Filebeat Yapılandırması (PostgreSQL Logları İçin)
Yönetilen PostgreSQL hizmetlerinde, log dosyalarına doğrudan sunucu dosya sistemi üzerinden erişiminiz yoktur. Logları toplamak için genellikle bulut sağlayıcınızın log hizmetlerinden yararlanmanız gerekir.
Yaygın Yaklaşımlar:
1. Bulut Sağlayıcının Log Akışı:
* AWS RDS: PostgreSQL logları CloudWatch Logs’a gönderilir. Buradan Kinesis Firehose veya Lambda fonksiyonları aracılığıyla S3’e aktarılabilir. S3’ten Logstash veya özel bir uygulama ile Elasticsearch’e gönderilebilir.
* Azure Database for PostgreSQL: Azure Monitor Logs’a gönderilir. Buradan Event Hubs aracılığıyla Logstash’e veya Azure Functions ile Elasticsearch’e gönderilebilir.
* Google Cloud SQL: Cloud Logging’e gönderilir. Buradan Pub/Sub ile Logstash’e veya Dataflow ile Elasticsearch’e aktarılabilir.
Bu senaryolarda, Filebeat doğrudan PostgreSQL sunucusunda çalışmaz. Bunun yerine, logları alan bir ara sunucuda veya bir bulut fonksiyonunda çalışır. Basitlik adına, eğer logları bir şekilde merkezi bir sunucuya (örneğin bir NFS paylaşımı veya bir log toplama hizmeti aracılığıyla) aktarabiliyorsanız, Filebeat’i bu sunucuda yapılandırabilirsiniz.
Örnek Filebeat Yapılandırması (Logların Erişilebilir Olduğu Varsayılarak):
Bu, logların Filebeat’in çalıştırıldığı sunucuda bir dizinde olduğu senaryo içindir. Yönetilen PostgreSQL için genellikle bu geçerli değildir, ancak logların bir şekilde bu sunucuya aktarıldığını varsayalım.
sudo filebeat modules enable postgresql
Ardından, sudo nano /etc/filebeat/modules.d/postgresql.yml dosyasını düzenleyin:
- module: postgresql
log:
enabled: true
# logs'ların bulunduğu dizini belirtin.
# Yönetilen hizmetlerde bu genellikle bir bulut sağlayıcısının log hizmetinden çekilerek
# yerel bir dizine yazılmış olmalıdır veya Logstash gibi bir ara katman kullanılmalıdır.
var.paths: ["/var/log/postgresql/*.log"] # Bu örnek bir yerel yol gösterir.
# Gerçekte, bulut sağlayıcınızın loglarını çeken
# bir mekanizma ile bu loglar buraya yazılmalı.
Filebeat’in çıktısını Elasticsearch’e göndermesi için sudo nano /etc/filebeat/filebeat.yml dosyasını düzenleyin:
output.elasticsearch:
hosts: ["localhost:9200"]
# username: "elastic"
# password: "changeme"
Önemli Not: Yönetilen PostgreSQL loglarını Filebeat ile toplamak, bulut sağlayıcının log toplama mekanizmasına bağlı olarak karmaşık olabilir. En yaygın senaryo, bulut sağlayıcının loglarını kendi log hizmetine (CloudWatch, Azure Monitor vb.) aktarması, ardından bu hizmetlerden Logstash veya bir bulut fonksiyonu aracılığıyla Elasticsearch’e gönderilmesidir. Bu makalede, Metricbeat’in pg_stat_* görünümlerinden metrik toplama yeteneğine odaklanırken, log toplama için yukarıdaki bulut sağlayıcı entegrasyonlarını akılda tutmak önemlidir.
Dashboards Yükleme ve Beats’i Başlatma
Metricbeat ve Filebeat, Elasticsearch’e hazır panoları ve indeks şablonlarını yüklemek için setup komutuna sahiptir.
# Metricbeat için
sudo metricbeat setup -e
Filebeat için (eğer log toplama yapılandırıldıysa)
sudo filebeat setup -e
Şimdi Metricbeat ve Filebeat servislerini başlatın ve başlangıçta otomatik çalışacak şekilde etkinleştirin:
sudo systemctl start metricbeat
sudo systemctl enable metricbeat
sudo systemctl status metricbeat
sudo systemctl start filebeat
sudo systemctl enable filebeat
sudo systemctl status filebeat
Kibana’da Verileri Analiz Etme
Veriler Elasticsearch’e akmaya başladığında, Kibana’yı kullanarak bu verileri keşfedebilir, görselleştirebilir ve panolar oluşturabilirsiniz.
Kibana’ya Erişim
Tarayıcınızdan http://:5601 adresine gidin.
Discover Sekmesini Keşfetme
Sol menüden “Discover” (Keşfet) sekmesine tıklayın. Burada metricbeat- ve filebeat- (eğer loglar toplanıyorsa) indeks kalıplarını seçerek ham verileri görebilirsiniz. Zaman aralığını sağ üst köşeden ayarlayarak son 15 dakika, son 1 saat gibi belirli zaman dilimlerindeki verilere odaklanabilirsiniz.
Hazır Panoları Kullanma
Metricbeat, PostgreSQL için önceden tanımlanmış panolarla birlikte gelir. Sol menüden “Dashboard” (Pano) sekmesine gidin ve arama çubuğuna postgresql yazın. [Metricbeat PostgreSQL] Overview panosunu açın. Bu pano, aşağıdaki gibi önemli metrikleri gösterir:
* Veritabanı işlem sayıları (commit/rollback)
* Aktif bağlantılar
* Cache hit oranları
* I/O istatistikleri
* WAL (Write-Ahead Log) istatistikleri
* Uzun süren sorgular (eğer pg_stat_statements veya loglardan geliyorsa)
* Tablo ve indeks tarama sayıları
Bu panolar, veritabanınızın genel sağlığı ve performansı hakkında hızlı bir genel bakış sağlar.
Özel Görselleştirmeler Oluşturma
Hazır panolar yeterli olmadığında veya belirli bir metrik üzerinde daha derinlemesine analiz yapmak istediğinizde, kendi görselleştirmelerinizi oluşturabilirsiniz.
1. “Visualize” (Görselleştir) Sekmesine Gidin: Sol menüden “Visualize” sekmesine tıklayın ve “Create new visualization” (Yeni görselleştirme oluştur) seçeneğini seçin.
2. Görselleştirme Türünü Seçin: Örneğin, “Line” (Çizgi) grafik seçelim.
3. İndeks Kalıbını Seçin: metricbeat- veya filebeat- (loglar için).
4. Metrikleri ve Gruplamaları Ayarlayın:
* Y-ekseni (Metrik):
* Ortalama aktif bağlantı sayısını görmek için Aggregation: Average, Field: postgresql.activity.count seçebilirsiniz.
* Saniyedeki işlem sayısını görmek için Aggregation: Sum, Field: postgresql.database.transactions.committed veya rolled_back seçip “Rate” dönüşümünü kullanabilirsiniz.
* pg_stat_statements verilerinden ortalama sorgu süresini görmek için Aggregation: Average, Field: postgresql.statement.total_time seçebilirsiniz.
* X-ekseni (Kova):
* Zamana göre değişimi görmek için Aggregation: Date Histogram, Field: @timestamp seçin.
* Gruplama (Split Series/Split Slice):
* Farklı veritabanları için metrikleri ayırmak için Aggregation: Terms, Field: postgresql.database.name.keyword seçebilirsiniz.
Örnek: Yavaş Sorguları Görselleştirme (Loglardan):
Eğer PostgreSQL loglarınızda log_min_duration_statement etkin ve bu loglar Filebeat/Logstash aracılığıyla Elasticsearch’e geliyorsa, yavaş sorguları görselleştirebilirsiniz.
1. “Visualize” sekmesinde yeni bir görselleştirme oluşturun (örneğin, “Data Table” veya “Bar Chart”).
2. Y-ekseni için Aggregation: Count seçin.
3. X-ekseni (Kova) için Aggregation: Terms, Field: message.keyword (veya log mesajını ayrıştırdıysanız sorgu metnini içeren alan) seçin.
4. Filter ekleyerek sadece yavaş sorgu loglarını filtreleyebilirsiniz (örn. message: "duration:").
Bu sayede en sık görülen yavaş sorguları tespit edebilirsiniz.
Watcher ile Uyarılar Oluşturma
Kibana’nın Watcher özelliği (X-Pack’in bir parçasıdır ve bazı sürümlerde temel olarak mevcuttur), belirli koşullar karşılandığında uyarılar göndermenizi sağlar.
* Senaryolar:
* Ortalama CPU kullanımı belirli bir eşiği aştığında.
* Aktif bağlantı sayısı belirli bir sınırı geçtiğinde.
* PostgreSQL loglarında “ERROR” veya “FATAL” mesajlarının sayısı belirli bir süre içinde arttığında.
* Belirli bir sorgunun ortalama yürütme süresi beklenenin üzerine çıktığında.
Watcher’ı yapılandırmak için Kibana’da “Stack Management” -> “Watcher” yolunu izleyebilirsiniz. Bir uyarı oluştururken, bir sorgu tanımlarsınız (örneğin, son 5 dakikadaki postgresql.activity.count ortalaması > 100 ise), bir koşul belirlersiniz ve bir eylem (e-posta gönderme, Slack bildirimi, webhook çağırma) tanımlarsınız.
Gelişmiş İzleme Hususları
pg_stat_statements ile Sorgu Optimizasyonu
pg_stat_statements uzantısı, veritabanınızdaki en pahalı sorguları belirlemek için paha biçilmezdir. Metricbeat bu verileri topladığında, Kibana’da aşağıdaki gibi analizler yapabilirsiniz:
* En Uzun Süren Sorgular: postgresql.statement.total_time alanına göre sıralayarak.
* En Çok Çalışan Sorgular: postgresql.statement.calls alanına göre sıralayarak.
* Ortalama Yürütme Süresi: postgresql.statement.mean_time alanını kullanarak.
Bu verilerle, hangi sorguların optimize edilmesi gerektiğini, hangi indekslerin eksik olduğunu veya hangi veritabanı şemasının yeniden tasarlanması gerektiğini hızlıca anlayabilirsiniz.
Bulut Sağlayıcı Metrikleri ile Entegrasyon
Yönetilen PostgreSQL hizmetleri, kendi yerel metriklerini (CPU, bellek, disk I/O, ağ trafiği gibi altyapı metrikleri) sağlar. Bu metrikler, Elasticsearch’e doğrudan Metricbeat ile toplanamaz çünkü doğrudan işletim sistemi erişimi yoktur. Ancak, bu metrikleri de Elastic Stack’e dahil etmek mümkündür:
* CloudWatch/Azure Monitor/GCP Monitoring API’leri: Bu API’leri kullanarak metrikleri çekebilir ve Logstash veya özel bir uygulama aracılığıyla Elasticsearch’e gönderebilirsiniz.
* Elastic Cloud Entegrasyonları: Elastic Cloud, bazı bulut sağlayıcılarının metriklerini doğrudan entegre etme yeteneğine sahiptir.
Bu entegrasyonlar, PostgreSQL performans verilerini temel altyapı metrikleriyle ilişkilendirerek daha bütünsel bir görünüm sağlar.
Güvenlik
Elastic Stack kurulumunuzun güvenliğini sağlamak kritik öneme sahiptir:
* X-Pack Güvenliği: Elasticsearch ve Kibana’da kullanıcı kimlik doğrulamasını ve yetkilendirmeyi etkinleştirin. Rol tabanlı erişim kontrolü (RBAC) kullanarak farklı kullanıcılara farklı izinler verin.
* SSL/TLS: Elastic Stack bileşenleri arasındaki iletişimi ve istemci erişimini SSL/TLS ile şifreleyin.
* Güvenlik Duvarı: Elasticsearch (9200) ve Kibana (5601) portlarına sadece güvenilir IP adreslerinden erişime izin verin.
* Veritabanı Kullanıcısı: PostgreSQL’e bağlanan Metricbeat kullanıcısının sadece gerekli minimum izinlere sahip olduğundan emin olun (salt okunur).
Ölçeklenebilirlik
İzlenen veritabanı sayısı veya veri hacmi arttıkça Elastic Stack kurulumunuzu ölçeklendirmeniz gerekebilir:
* Elasticsearch Kümesi: Birden fazla Elasticsearch düğümü ekleyerek veri depolama ve sorgulama kapasitesini artırın.
* Beats Yükü: Eğer çok sayıda Managed PostgreSQL örneğini izliyorsanız, birden fazla Metricbeat/Filebeat sunucusu kurarak yükü dağıtabilirsiniz.
* Logstash: Eğer karmaşık veri işleme ihtiyaçlarınız varsa, Logstash’i bir küme olarak çalıştırabilir veya Kafka/RabbitMQ gibi mesaj kuyrukları ile entegre edebilirsiniz.
Sık Karşılaşılan Sorun Giderme
* Veriler Kibana’da Görünmüyor:
* Elasticsearch’ün çalışır durumda olduğundan emin olun (sudo systemctl status elasticsearch).
* Kibana’nın çalışır durumda olduğundan emin olun (sudo systemctl status kibana).
* Metricbeat/Filebeat’in çalışır durumda olduğundan emin olun (sudo systemctl status metricbeat).
* Metricbeat/Filebeat loglarını kontrol edin (sudo journalctl -u metricbeat -f veya /var/log/metricbeat/metricbeat). Bağlantı hataları veya yapılandırma sorunları olabilir.
* Elasticsearch’e erişim için güvenlik duvarı kurallarını kontrol edin.
Kibana’da doğru indeks kalıbını (metricbeat-, filebeat-*) seçtiğinizden ve zaman aralığının doğru ayarlandığından emin olun.
* PostgreSQL Bağlantı Hataları:
* Metricbeat yapılandırma dosyasındaki (postgresql.yml) hosts, username, password bilgilerinin doğru olduğundan emin olun.
* PostgreSQL kullanıcısının doğru izinlere sahip olduğundan emin olun.
* Ubuntu sunucunuzdan Yönetilen PostgreSQL örneğine ping atabildiğinizden veya psql ile bağlanabildiğinizden emin olun. Güvenlik duvarı kurallarını kontrol edin.
* Performans Sorunları (İzleme Sunucusunda):
* Elasticsearch için yeterli bellek ayrıldığından emin olun (jvm.options dosyasında Xms/Xmx ayarları).
* Disk I/O’sunu kontrol edin. Elasticsearch yüksek I/O kullanabilir. SSD kullanılması önerilir.
* CPU kullanımını izleyin. Gerekirse Elastic Stack bileşenleri için daha güçlü bir sunucuya geçin veya kümenizi genişletin.
Sonuç
Yönetilen PostgreSQL veritabanlarının performansı ve sağlığı, herhangi bir modern uygulamanın başarısı için hayati öneme sahiptir. Bu makalede, Elastic Stack’in (Elasticsearch, Kibana, Logstash ve Beats) Ubuntu 18.04 üzerinde nasıl kurulacağını ve Yönetilen PostgreSQL istatistiklerini nasıl toplayıp analiz edeceğini kapsamlı bir şekilde inceledik.
Metricbeat’in PostgreSQL modülü sayesinde, pg_stat_* görünümlerinden elde edilen zengin metrikleri kolayca toplayabilir ve Elasticsearch’e aktarabiliriz. Kibana’nın güçlü görselleştirme yetenekleri ile bu metrikleri anlamlı panolara dönüştürerek veritabanı performansını gerçek zamanlı olarak izleyebilir, darboğazları tespit edebilir ve potansiyel sorunları proaktif olarak çözebiliriz. Yönetilen hizmetlerde log toplama, bulut sağlayıcının log hizmetleri üzerinden daha karmaşık bir süreç gerektirse de, bu logların Elastic Stack’e aktarılmasıyla kapsamlı bir izleme çözümü elde edilebilir.
Elastic Stack, sadece anlık sorunları çözmekle kalmaz, aynı zamanda uzun vadeli kapasite planlaması ve performans trendlerinin analizi için de değerli bir araç seti sunar. Bu rehberdeki adımları takip ederek, Yönetilen PostgreSQL veritabanlarınız üzerinde tam kontrol sağlayabilir ve uygulamalarınızın her zaman en yüksek performansta çalışmasını garanti edebilirsiniz.
