Takip et

Prometheus UI ile Gelişmiş PromQL Sorguları

Prometheus, modern sistemlerin izlenmesinde devrim yaratan güçlü bir açık kaynak araçtır. “How To Query Prometheus on Ubuntu 14.04 Part 1” re

Prometheus, modern sistemlerin izlenmesinde devrim yaratan güçlü bir açık kaynak araçtır. “How To Query Prometheus on Ubuntu 14.04 Part 1” rehberimizde Prometheus sunucusunu, Node Exporter’ı kurmayı ve basit PromQL sorgularını çalıştırmayı öğrenmiş olmalısınız. Bu ikinci bölümde ise, Prometheus’un PromQL sorgu dilini kullanarak daha karmaşık verileri nasıl çekeceğinizi, bunları nasıl analiz edeceğinizi ve Grafana ile nasıl görselleştireceğinizi detaylı bir şekilde inceleyeceğiz. Ubuntu 14.04 gibi biraz daha eski bir işletim sistemi üzerinde bile bu tekniklerin nasıl uygulanabileceğini göstereceğiz.

Prometheus UI ile Gelişmiş PromQL Sorguları

Prometheus’un web arayüzü (genellikle http://localhost:9090/graph adresinde bulunur), PromQL sorgularınızı test etmek ve sonuçları anlık olarak görmek için harika bir yerdir. Part 1’de temel metrikleri sorgulamayı görmüştük. Şimdi daha derinlemesine PromQL yeteneklerine odaklanalım.

Zaman Serisi Seçimi ve Etiket Eşleştirme

Bir sorgu, temelde bir veya daha fazla zaman serisi seçimiyle başlar. Etiketler, seçiminizi daraltmak için kritik öneme sahiptir.

  • Eşitlik Eşleştirme: {label="value"}
  • Eşitsizlik Eşleştirme: {label!="value"}
  • Regex Eşleştirme: {label=~"value.*"}
  • Regex Eşitsizlik Eşleştirme: {label!~"value.*"}

Örneğin, yalnızca belirli bir işten (job) veya belirli bir örnekten (instance) gelen metrikleri seçebilirsiniz:

node_cpu_seconds_total{job="node_exporter", instance="localhost:9100"}

Toplama Fonksiyonları (Aggregation Functions)

Prometheus, birden fazla zaman serisini tek bir sonuçta birleştirmek için çeşitli toplama fonksiyonları sunar. Bu fonksiyonlar genellikle by veya without anahtar kelimeleriyle birlikte kullanılır.

  • sum(): Tüm değerlerin toplamı
  • avg(): Tüm değerlerin ortalaması
  • count(): Zaman serisi sayısı
  • min(): Minimum değer
  • max(): Maksimum değer
  • stddev(): Standart sapma
  • stdvar(): Standart varyans
  • group(): Tüm giriş serilerini tek bir çıkış serisinde birleştirir (değer 1).

Örnek: Tüm sunuculardaki toplam boşta CPU süresini almak:

sum(node_cpu_seconds_total{mode="idle"})

Eğer her bir sunucu için ayrı ayrı toplam boşta CPU süresini görmek isterseniz (instance etiketine göre gruplayarak):

sum by (instance) (node_cpu_seconds_total{mode="idle"})

Bu, her bir instance etiketi için ayrı bir zaman serisi döndürecektir.

Oran ve Değişim Fonksiyonları (Rate and Change Functions)

Sayaç (counter) tipi metrikler sürekli artar. Bunların değişim oranını veya belirli bir zaman dilimindeki artışını görmek için özel fonksiyonlar kullanırız.

  • rate(v[r]): Belirtilen zaman aralığındaki (r) saniye başına ortalama artış oranı. En yaygın kullanılan fonksiyondur.
  • irate(v[r]): Belirtilen zaman aralığındaki son iki örnek kullanılarak anlık artış oranı. Hızlı değişen, ani yükselişler gösteren metrikler için daha duyarlıdır.
  • increase(v[r]): Belirtilen zaman aralığındaki toplam artış.
  • delta(v[r]): Belirtilen zaman aralığındaki değer farkı. Sayaç olmayan (gauge) metrikler için kullanılır.

Örnek: Son 5 dakikadaki CPU kullanım oranını hesaplama:

100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100

Bu sorgu, her bir sunucu için boşta kalma süresinin oranını hesaplar ve 100’den çıkararak CPU kullanım yüzdesini verir.

Aritmetik İşlemler ve Karşılaştırmalar

PromQL, metrikler üzerinde standart aritmetik işlemleri (+, -, *, /, %) ve karşılaştırma operatörlerini (==, !=, >, <, >=, <=) destekler. Bu, daha karmaşık hesaplamalar yapmanıza olanak tanır.

Örnek: Belirli bir diskin kullanım yüzdesini hesaplama (varsayımsal node_disk_bytes_used ve node_disk_bytes_total metrikleri ile):

node_disk_bytes_used{device="/dev/sda1"} / node_disk_bytes_total{device="/dev/sda1"} * 100

Örnek: Bellek kullanımının %80’in üzerinde olduğu sunucuları bulma:

node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes > (node_memory_MemTotal_bytes * 0.80)

Bu sorgu, toplam bellekten kullanılabilir belleği çıkararak kullanılan belleği bulur ve bunun toplam belleğin %80’inden fazla olup olmadığını kontrol eder.

Prometheus Metriklerini Grafana ile Görselleştirme

Prometheus’un kendi UI’ı güçlü olsa da, karmaşık panolar oluşturmak ve uzun vadeli eğilimleri izlemek için Grafana gibi bir görselleştirme aracı vazgeçilmezdir. Grafana, Prometheus’u bir veri kaynağı olarak kullanır ve PromQL sorgularınızla dinamik, etkileşimli panolar oluşturmanıza olanak tanır.

Grafana Kurulumu (Ubuntu 14.04 için)

Ubuntu 14.04 için Grafana’yı kurmak, depodan yükleyerek veya manuel olarak indirilerek yapılabilir. Ancak 14.04 eski olduğu için, doğrudan resmi depolardan en yeni sürümü almak zor olabilir. Genellikle aşağıdaki adımlar izlenir:

# GPG anahtarını ekle
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

Grafana deposunu sources.list.d'ye ekle

Ubuntu 14.04 için 'stable' yerine 'main' veya belirli bir sürüm gerekebilir.

En güvenlisi, Grafana'nın kendi sitesinden .deb paketini indirmektir.

Örnek: wget https://dl.grafana.com/oss/release/grafana_9.x.x_amd64.deb

sudo dpkg -i grafana_9.x.x_amd64.deb

sudo apt-get update && sudo apt-get install grafana

Eğer depodan kuracaksanız (daha yeni Ubuntu sürümleri için daha uygun):

echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list sudo apt-get update sudo apt-get install grafana

Grafana servisini başlat ve başlangıçta etkinleştir

sudo systemctl daemon-reload sudo systemctl start grafana-server sudo systemctl enable grafana-server

Kurulumdan sonra Grafana’ya genellikle http://localhost:3000 adresinden erişebilirsiniz. Varsayılan kullanıcı adı/şifre: admin/admin (ilk girişte değiştirmeniz istenecektir).

Prometheus’u Grafana’ya Veri Kaynağı Olarak Ekleme

  1. Grafana’ya giriş yapın.
  2. Sol menüden “Configuration” (Dişli çark simgesi) -> “Data Sources” seçeneğine tıklayın.
  3. “Add data source” butonuna tıklayın.
  4. Listeden “Prometheus”u seçin.
  5. Aşağıdaki bilgileri doldurun:

    • Name: Prometheus (veya istediğiniz bir isim)
    • URL: http://localhost:9090 (Prometheus sunucunuzun adresi)
    • Diğer ayarları varsayılan olarak bırakabilirsiniz.
  6. “Save & Test” butonuna tıklayın. “Data source is working” mesajını görmelisiniz.

Grafana Paneli Oluşturma ve Sorgulama

  1. Sol menüden “Dashboards” (Dört kare simgesi) -> “New dashboard” -> “Add new panel” seçeneğine tıklayın.
  2. Panelin altındaki “Query” sekmesinde, “Data source” olarak eklediğiniz Prometheus’u seçin.
  3. “Prometheus” sorgu alanına PromQL sorgunuzu girin. Örneğin:
rate(node_network_receive_bytes_total{device="eth0"}[5m]) * 8

Bu sorgu, eth0 arayüzünden gelen ağ trafiğini (bit/saniye cinsinden) gösterecektir.

  1. Grafana, sorgunuzu otomatik olarak görselleştirecektir. Sağ taraftaki “Panel options” bölümünden grafik tipini (Graph, Stat, Gauge vb.), eksenleri, legend’i ve diğer görsel ayarları düzenleyebilirsiniz.
  2. “Apply” butonuna tıklayarak paneli dashboard’unuza ekleyin.

Değişkenler (Variables) ile Dinamik Panolar

Grafana’nın değişkenler özelliği, panolarınızı daha esnek ve etkileşimli hale getirir. Örneğin, bir açılır menüden sunucu seçerek tüm panonun o sunucuya göre güncellenmesini sağlayabilirsiniz.

  1. Dashboard’unuzdayken, sağ üstteki “Dashboard settings” (Dişli çark) simgesine tıklayın.
  2. Sol menüden “Variables” seçeneğini seçin.
  3. “Add variable” butonuna tıklayın.
  4. Örnek bir instance değişkeni oluşturalım:

    • Name: instance
    • Type: Query
    • Data source: Prometheus
    • Query: label_values(node_cpu_seconds_total, instance) (Bu, node_cpu_seconds_total metriğindeki tüm instance etiket değerlerini çeker.)
    • Multi-value: Açık (Birden fazla sunucu seçimi için)
    • Include All option: Açık (Tüm sunucuları seçme seçeneği için)
  5. “Update” ve ardından “Save” butonlarına tıklayın.

Artık panellerinizde $instance değişkenini kullanabilirsiniz:

rate(node_cpu_seconds_total{instance="$instance", mode="idle"}[5m])

Dashboard’unuzun üstünde bir “instance” açılır menüsü belirecek ve seçiminize göre grafikler güncellenecektir.

Pratik İpuçları ve En İyi Uygulamalar

Sorgu Optimizasyonu

  • Etiketleri Akıllıca Kullanın: Sorgularınızı mümkün olduğunca erken ve spesifik etiketlerle filtreleyin. Örneğin, sum(rate(my_metric[5m])) by (job) yerine sum(rate(my_metric{job="my_app"}[5m])) by (instance) daha verimlidir.
  • Zaman Aralığına Dikkat Edin: Özellikle rate(), irate() gibi fonksiyonlarda, zaman aralığı ([5m]) ne kadar uzun olursa sorgu o kadar fazla veri noktası işlemelidir. Gereksiz yere uzun aralıklar kullanmaktan kaçının.
  • Kardinaliteye Dikkat Edin: Çok yüksek kardinaliteye sahip (çok fazla benzersiz etiket kombinasyonu olan) metrikler Prometheus sunucusunu yavaşlatabilir. Gereksiz etiketlerden kaçının.

Kullanışlı PromQL Fonksiyonları

  • topk(k, vector): Bir vektördeki en yüksek k değere sahip öğeleri döndürür. Örneğin, en çok CPU kullanan 5 sunucuyu bulmak için:
    topk(5, sum by (instance) (rate(node_cpu_seconds_total{mode!="idle", mode!="iowait"}[5m])))
  • bottomk(k, vector): Bir vektördeki en düşük k değere sahip öğeleri döndürür.
  • histogram_quantile(phi, histogram_bucket_vector): Gecikme metrikleri gibi histogram kovalarından belirli bir yüzde (percentile) değerini hesaplamak için kullanılır. Örneğin, %99 gecikme:
    histogram_quantile(0.99, sum by (le) (rate(http_request_duration_seconds_bucket[5m])))

Metrik İsimlendirme Konvansiyonları

Tutarlı ve anlamlı metrik isimleri kullanmak, sorgulamayı ve izlemeyi çok daha kolay hale getirir. Prometheus topluluğu genellikle aşağıdaki konvansiyonları önerir:

  • Metrik adları İngilizce, küçük harf ve alt çizgi ile ayrılmış olmalıdır (örn. http_requests_total).
  • Birimler genellikle metrik adının sonunda belirtilir (örn. _bytes, _seconds, _total).
  • Sayaçlar için _total soneki kullanın.

Alerting ile Entegrasyon

Prometheus’un gücünün önemli bir kısmı, tanımladığınız PromQL sorgularına dayalı olarak uyarılar oluşturabilmesidir. Oluşturduğunuz karmaşık sorguları, ALERT kuralları olarak tanımlayarak sisteminizdeki anormallikler hakkında bilgilendirilebilirsiniz. Bu, genellikle alert.rules dosyalarında yapılır ve Alertmanager tarafından işlenir.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, Ubuntu 14.04 üzerinde çalışan Prometheus sunucunuzu kullanarak PromQL’nin daha gelişmiş özelliklerini nasıl kullanacağınızı ve Grafana ile nasıl etkili görselleştirmeler oluşturacağınızı öğrendiniz. Agregasyon fonksiyonları, oran hesaplamaları, aritmetik işlemler ve Grafana’nın dinamik panoları sayesinde sistemlerinizin sağlığı ve performansı hakkında derinlemesine içgörüler elde edebilirsiniz. Unutmayın ki izleme, sürekli bir süreçtir ve ihtiyaçlarınız değiştikçe sorgularınızı ve panolarınızı geliştirmeye devam etmelisiniz.

Sıkça Sorulan Sorular (SSS)

S1: Prometheus neden Ubuntu 14.04 gibi eski bir işletim sisteminde kullanılıyor?
C1: Bu rehber, belirli bir senaryoyu (Ubuntu 14.04) ele almak için oluşturulmuştur. Gerçek dünyada, genellikle daha yeni ve desteklenen işletim sistemleri tercih edilir. Ancak, Prometheus’un temel çalışma prensipleri ve PromQL sorgu dili işletim sisteminden bağımsızdır. Eski sistemlerde bile temel izleme ihtiyaçlarını karşılayabilir.

S2: Sorgularım neden yavaş çalışıyor veya çok fazla kaynak tüketiyor?
C2: Bunun birkaç nedeni olabilir:

  • Yüksek Kardinalite: Çok fazla benzersiz etiket kombinasyonu olan metrikler.
  • Geniş Zaman Aralığı: Çok uzun bir zaman dilimini kapsayan sorgular.
  • Verimsiz Etiket Eşleştirme: Sorgunuzu erken filtrelememek.
  • Yetersiz Prometheus Kaynakları: Prometheus sunucusunun RAM veya CPU’sunun yetersiz olması.

Sorgu optimizasyonu tekniklerini gözden geçirin ve Prometheus sunucunuzun kaynaklarını kontrol edin.

S3: Grafana’da Prometheus verilerini neden göremiyorum?
C3: Şunları kontrol edin:

  • Prometheus sunucusu çalışıyor mu? (sudo systemctl status prometheus)
  • Grafana veri kaynağı ayarlarında Prometheus URL’si doğru mu? (http://localhost:9090 veya doğru IP/port)
  • Grafana’da “Save & Test” başarılı oldu mu?
  • PromQL sorgunuz doğru mu yazılmış? Prometheus UI’da test edin.
  • Zaman aralığı Grafana’da doğru ayarlanmış mı? (Sağ üst köşedeki zaman seçici)

S4: rate() ve irate() arasındaki temel fark nedir?
C4: Her ikisi de sayaç metriklerinin değişim oranını hesaplar.

  • rate(): Belirtilen zaman aralığındaki tüm örnekleri kullanarak ortalama bir oran verir. Daha yumuşak bir eğri gösterir ve ani yükselişleri gizleyebilir. Uzun vadeli eğilimler için uygundur.
  • irate(): Yalnızca zaman aralığındaki son iki örneği kullanarak anlık bir oran verir. Ani ve keskin değişimleri anında yakalar. Kısa vadeli, hızlı değişen metrikler (örn. anlık istek hızı) için daha uygundur.

S5: Hangi metrikleri izlemeliyim?
C5: İzlenecek metrikler uygulamanızın ve altyapınızın doğasına bağlıdır. Genellikle aşağıdaki kategorilerdeki metrikler kritik öneme sahiptir:

  • Sistem Metrikleri: CPU kullanımı, bellek, disk G/Ç, ağ trafiği (Node Exporter sağlar).
  • Uygulama Metrikleri: İstek sayısı, hata oranları, gecikmeler, kuyruk uzunlukları, veritabanı bağlantıları.
  • Hata Metrikleri: Uygulama hataları, HTTP 5xx yanıtları, başarısız işlemler.

RED (Rate, Errors, Duration) veya USE (Utilization, Saturation, Errors) metodolojileri, hangi metrikleri izlemeniz gerektiği konusunda iyi bir başlangıç noktası sunar.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.