DBA Günlükleri #6 : Grafana ile Sunucu ve Yük Dengeleyici İzlenme Ortamlarının Hazırlanması

Hüseyin Demir
Devops Türkiye☁️ 🐧 🐳 ☸️
6 min readJun 29, 2019

Merhabalar, serinin son iki yazısından bu yana veritabanı monitoring konularına değiniyoruz. Daha önceki yazılarda, Grafana ile SQL Server Monitoring Ortamı ve Threshold&Alarm Yönetimi konularına değinmiştik.

Bu yazıda ise, daha çok PostgreSQL tarafında kullandığım izleme araçlarına değineceğim. PostgreSQL üzerinde yüksek erişilebilir küme oluşturulduktan sonra bu küme içerisindeki parçaların da izlenmesi çok önemli bir konudur. Çünkü kümedeki elemanların hepsinin sağlıklı çalışması doğrudan veritabanın erişilebilirliğinin sağlıklı olması demektir. PostgreSQL yüksek erişilebilir küme kurulumu ve içerisindeki bileşenlerin görevleri incelemek için aşağıdaki linkten faydalanabilirsiniz.

PostgreSQL veritabanı kümesinde sunucuları ve kümenin önündeki yük dengeleyici olarak görev yapan HAProxy’leri izlemek için gerekli ortamı hazırlayacağız. Bunu başarmak için bu sefer InfluxDB yerine veri kaynağı olarak Promethues kullanacağız.

Burada doğrudan promethues kurulumunu açıklamak ve adım adım göstermek konunun içeriğinden uzaklaştıracağı için ben doğrudan hazır prometheus kullanarak sizlere node_exporter ve ha_exporter ile grafana kullanımını açıklamaya gayret edeceğim. Yazının geri kalan kısmını iki parçaya ayırdım takip edilmesi ve birbirinden bağımsız incelenebilmesi için. İlk kısımda Node Exporter ile Grafana İzleme Ortamı Kurulması ikinci kısımda ise HA Exporter ile Grafana İzleme Ortamı Kurulması şeklinde iki farklı konu başlığı altında inceledim olayı.

Node Exporter ile Grafana İzleme Ortamı Kurulması

Kullanılan Sunucu : CentOS

Node Exporter kurulumu ve grafana entegrasyonu için takip edilmesi gereken adımlar aşağıdaki gibidir.

  • PostgreSQL veritabanı sunucularına node_exporter kurulumu
  • PostgreSQL veritabanı sunucularında node_exporter yapılandırılması
  • Grafana üzerinde prometheus veri kaynağı yapılandırılması
  • Grafana üzerinde node exporter’a uygun dashboard taslağının import edilmesi

Veritabanı sunucusuna node_exporter kurulumu için işletim sistemine node_exporter binary dosyalarının kopyalanması ve ardından systemd servisi olarak sistemde sürekli çalışır hale getirilmesi gerekmektedir.

İlk olarak, node_exporter dosyasının sunucu üzerine alınması gerekmektedir.

cd /tmp

curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-0.18.1.linux-amd64.tar.gz

Daha sonrasında, tar.gz formatındaki dosya yine aynı dizin altında unpack(açılır) edilir. Ardından açılan dosya sunucunun binary dizini olan /usr/local/bin altına kopyalanır.

tar -xvf node_exporter-0.18.1.linux-amd64.tar.gz

sudo mv node_exporter-0.18.1.linux-amd64/node_exporter /usr/local/bin/

Sunucu üzerinde artık node_exporter kullanıma hazırdır. Ancak sürekli açık olması ve iş yapması için işletim sistemi üzerinde systemd servisi olarak tanımlanmalıdır. Bu sayede gerektiğinde açılıp kapatılabilir.

Node_exporter’ı systemd servisi olarak tanımlamak için, /etc/systemd/system altına yeni bir node_exporter_service şeklinde bir servis tanımlanır. Servisin içeriği de aşağıdaki gibi doldurulabilir.

vi /etc/systemd/system/node_exporter.service

Servis oluşturulduktan sonra systemctl start node_exporter komutu ile servis başlatılır. Servis durumunu kontrol ettiğinizde ise herhangi bir problem olmaması durumunda aşağıdaki çıktıyı elde etmemeiz gerekiyor.

Bu adımdan sonra sunucu tarafında node_exporter kurulumu tamamlanmıştır. Bundan sonrası için prometheus tarafında sunucun IP/Hostname bilgisi ile kayıt edilmesi gerekiyor ve ardından grafana üzerinden verisi görselleştirilebilir hale gelecektir. Yukarıda bahsettiğim gibi prometheus konusuna değinmiyorum hiç konu dışına çıkmamak adına.

Node exporter kurulumu tamamlandıktan sonra ve prometheus’a kaydedildikten sonra, Grafana üzerinde prometheus’un veri kaynağı olarak tanıtılması işleminin yapılması gerekmektedir.Bunun için grafana “data source” başlığı altında yeni bir veri kaynağı tanımlayabiliriz. Veri kaynağı tanımlamak için aşağıdaki adımları takip edebilirsiniz.

Grafana Data Source Bölümü
Grafana Prometheus Veri Kaynağı Ayarları

Veri kaynağı tanımlandıktan sonra, Grafana üzerinden dashboard uygulanması işlemlerine başlayabiliriz. Diğer yazılarda da bahsedildiği gibi Grafana üzerinde yayınlanmış olan dashboardları doğrudan kullanabiliriz.

Node exporter için 1860 ID’li dashboard’u kullandım. Bu dashboard’a ait bilgileri aşağıdaki linkten inceleyebilirsiniz. Data source olarak prometheus kullanmaktadır.

Grafana Dasboard sekmesi altından doğrudan import seçeneği ile ilerleyip daha sonrasında dashboard ID’sini yazarak bu dashboard’u kullanmaya başlayabiliriz.

ımport Dashboard
1860 Dashboard Bilgeri

Tüm bu işlemlerden sonra artık node exporter dashboard u kullanılmaya hazırdır. Aşağıdaki gibi sunucuya ait bilgileri izleyip analiz edebiliriniz …

Grafana node expporter örnek çıktı — 1
Grafana node expporter örnek çıktı — 2

Node exporter dashboard’u sayesinde, PostgreSQL veritabanını incelerken sunucu katmanında da inceleme şansını elde ediyoruz. Aslında PostgreSQL veritabanın birçok internal süreci doğrudan işletim sistemine bağlıdır ve işletim sistemi seviyesindeki hareketlerden PostgreSQL içerisindeki hareketleri yorumlamak mümkündür. Bir DBA için gayet avantajlı ve kullanışlı bir durumdur. Sunucu üzerindeki SWAP kullanımı,kirli memory durumu ve network trafiği gibi temel ve hayati KPI’ların durumunu anlık olarak görebilmek gayet iyi bir avantajdır.

Bu dashboard sonrasında yine PostgreSQL veritabanının önbahçe kapısı olan HAProxy’nin de analize açık olması gerekmektedir.

HA Exporter ile Grafana İzleme Ortamı Kurulması

Kullanılan Sunucu : CentOS

HAProxy, görevi gereği PostgreSQL sunucularına gelen yükün dağıtılmasından ve dengelenmesinden sorumludur. Bu nedene bu ortamında izlenmesi bir DBA için çok kritiktir. PostgreSQL kümesine gelen isteklerin nasıl davrandığını anlamak kümenin sağlığından emin olurken gayet faydalı olacaktır.(İlerleyen zamanlarda PostgreSQL + HAProxy kullanımına özgü bir ya da birkaç konu hakkında da yazacağım. Yeni bir konu serisinde :) )

HAProxy izleme ortamı kurulmasında aslında node exporter’a benzer yapılar tercih ettim. Yani yine veri kaynağı olarak prometheus tercih ettim ve yine grafana üzerindeki dashboardlardan yararlandım. Bu nedenle bu başlık altındaki adımların bazıları üst başlıkta yaptığımız adımlar ile aynı. Ben sadece ha exporter’a özgü adımları açıklmaya çalışacağım. Aynı olan adımları da belirteceğim.

HA Exporter izlenme ortamı kurulum ve yapılandırması için aşağıdaki adımlar takip edilir.

  • HAProxy sunucularına ha_exporter kurulumu
  • HAProxy sunucularında ha_exporter yapılandırması
  • Grafana üzerinde prometheus veri kaynağı yapılandırılması
  • Grafana üzerinde ha exporter’a uygun dashboardların ayarlanması

Zaten son iki adım node exporter başlığındaki adımların aynısıdır. Bu nedenle sadece ilk adıma odaklanmakta fayda var.

ha_exporter kurulumu yapmak için aslında node_exporter’a benzer bir yöntem izleyebiliriz. Wget komutu ile binary dosyalarını sunucuya alıp unpack işlemi uygulayıp sonrasında sunucunun yerel binary dizinine kopyalayabiliriz.

cd /tmp

wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.9.0/haproxy_exporter-0.9.0.linux-amd64.tar.gz

tar -xzvf haproxy_exporter-0.9.0.linux-amd64.tar.gz
cd haproxy_exporter-0.9.0.linux-amd64
cp haproxy_exporter /usr/local/bin

Bu işlemlerden sonra sunucumuz üzerine haproxy_exporter kurulumu tamalanmıştır. Sonrasında yine node_exporter için yaptığımız gibi bu exporter’a has systemd servisi oluşturulması gerekmektedir. Servis dosyası oluşturmak için yine /etc/systemd/system altına haproxy_exporter isminde bir servis açılır.

vi /etc/systemd/system/haexporter_service

bu komuttan sonra servis dosyasının içeriği aşağıdaki gibi doldurulur ve servis baslatılır.(systemctl start haproxy_exporter)

[Unit]
Description=HAProxy Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
Group=root
Type=simple
ExecStart=/usr/local/bin/haproxy_exporter — haproxy.scrape-uri=http://haproxy_sunucu_ip:port/;csv
[Install]
WantedBy=multi-user.target

Haproxy_exporter Servis Durumu

Bu işlemlerin sonunda da yine prometheus tarafında bu HAProxy sunucusunun kaydedilmesi ve verilerinin alındığından emin olunması gerekmektedir. Ardından yine ilk başlıkta olduğu gibi Grafana üzerine prometheus veri kaynağının eklenmesi gerekmektedir(Aynı prometheus kullanıyorsanız gerek yok. Farklı bir prometheus da kullanılabilir…)

Önemli Not: haproxy_exporter ve node_exporter yazılımlarının sunucu dışına veriyi hangi porttan verdiğini kontrol etmenizi öneririm. Bu portlar zaten kullanılıyorsa başka port kullanmanız gerekeceği için port kısmını lütfen ayrı değerlendirin.Sunucu üzerinde curl ile kontrol etmenizi öneririm. Örn: curl http://localhost:9091 gibi …

Konuya dönecek olursak, grafana üzerinde dashboard kullanımına hazır duruma geldik. Dashboard ekleme adımlarını bir önceki başlıkta incelediğimiz burada sadece dashboard numarasını paylaşacağım ve sonucu paylaşacağım.

Grafana üzerinden 367 numaralı dashboard’u kullanarak aşağıdaki sonuçları elde ettik.

Aslında bir DBA için veritabanı KPI’ları kadar sunucu ve yük dengeleyici KPI’ları da önem teşkil etmektedir. Çünkü, veritabanı yöneticisinin sorun anında sadece veritabanı kısmına değil çevresinde onla iletişim halinde olan altyapı katmanlarının da durumunu bilmelidir. Sadece veritabanı KPI’ları ile analiz ve çözüm üretmek her zaman sorunu çözmeyebilir. Ek olarak, upgrade&scaling projelerinde de sadece veritabanı katmanına göre karar vermek ihtiyaçlarımızı tam olarak karşılamayabilir. Çünkü sunucu kaynaklarının nasıl kullanıldığını bilmekte önem teşkil etmektedir. Örnek olarak, Uygulama bazlı dikey genişleme de tam anlamıyla çözümümüz olabilecekken doğrudan yataya genişleyerek sunucu&veritabanı yönetimini zorlaştırmamıza gerek kalmaz. Bu tarz örnekler çoğaltılabilir.

Çoğu problemi sadece tek tarafa odaklandığımız için çözümleyemiyoruz zaman zaman. Bu aynı zamanda genişleme(scaling) projelerinde ya da performans problemlerin de geçerli. Ben bu yazımda veritabanı katmanına ek olarak yük dengeleyici ve sunucu seviyesinde de izleme ortamlarının kurulumuna değinmeye çalıştım. Tabi bu değindiklerim sadece HAProxy ve CentOS sunucuları için geçerli. Yük dengeleyici ve sunucu olarak çok farklı tercihler mevcuttur ancak ana fikir bir DBA’in bu alanları da izlemesi, yorumlaması ve ürettiği çözümlerde kullanmasıdır :)

Sevgiler,

Demir.

--

--