Takip et

Giriş: Prometheus ve İzleme Dünyasına Adım

Giriş: Prometheus ve İzleme Dünyasına Adım Modern BT altyapılarında sistemlerin ve uygulamaların sürekli izlenmesi, olası sorunları proak

Giriş: Prometheus ve İzleme Dünyasına Adım

Modern BT altyapılarında sistemlerin ve uygulamaların sürekli izlenmesi, olası sorunları proaktif bir şekilde tespit etmek ve performansı optimize etmek için hayati öneme sahiptir. Bu bağlamda, Prometheus, zaman serisi veritabanı tabanlı, açık kaynaklı bir izleme ve uyarı aracı olarak öne çıkmaktadır. Güçlü sorgulama dili PromQL sayesinde, toplanan metriklerden anlamlı bilgiler çıkarmak ve karmaşık sistem davranışlarını analiz etmek mümkündür.

Bu rehberin ilk bölümünde, Ubuntu 14.04 gibi eski ama hala belirli ortamlarda kullanılan sistemlerde Prometheus’u nasıl sorgulayacağınızı adım adım inceleyeceğiz. Ubuntu 14.04’ün seçimi, Prometheus’un çeşitli Linux dağıtımlarında tutarlı bir şekilde çalıştığını göstermekle birlikte, eski sistemlerdeki potansiyel uyumluluk veya kurulum farklılıklarını da akılda tutmayı gerektirir. Ancak PromQL’in kendisi platformdan bağımsızdır ve bu rehberdeki sorgular diğer Linux sürümlerinde veya farklı işletim sistemlerinde de geçerlidir.

Amacımız, Prometheus’un temel kavramlarını tanıtmak, PromQL’in sözdizimini açıklamak ve yaygın izleme senaryoları için pratik sorgu örnekleri sunmaktır. Bu rehberin sonunda, Prometheus arayüzünü kullanarak sistemleriniz hakkında bilgi edinebilecek ve temel sorun giderme adımları atabileceksiniz.

Prometheus ve Metrik Temelleri

Prometheus, öncelikle bir zaman serisi veritabanı olarak işlev görür. Bu, topladığı tüm verilerin zamana göre etiketlendiği anlamına gelir. Prometheus’un çalışma prensibi “çekme” (pull) modeline dayanır; yani izlenecek hedeflerden (sunucular, uygulamalar, servisler) düzenli aralıklarla metrikleri çeker (scrape eder).

Metrik Nedir?

Metrikler, sistem veya uygulama hakkında ölçülebilir verilerdir. Prometheus’ta her metrik bir isim ve isteğe bağlı etiketler (labels) kümesinden oluşur. Etiketler, metriği daha spesifik hale getiren anahtar-değer çiftleridir. Örneğin, http_requests_total bir metrik ismiyken, http_requests_total{method="GET", path="/api/users", status="200"} bu metriğin belirli bir HTTP GET isteği, belirli bir yol ve başarılı bir durum kodu için değerini temsil eder.

Metrik Türleri

Prometheus dört ana metrik türünü destekler:

  1. Counter (Sayaç): Sadece artan, sıfırlanabilen bir değerdir. Örneğin, toplam HTTP isteği sayısı veya bir sistemin açıldığı andan itibaren geçen toplam CPU süresi.
  2. Gauge (Gösterge): Rastgele artıp azalabilen bir değerdir. Örneğin, mevcut RAM kullanımı, CPU sıcaklığı veya bir kuyruktaki öğe sayısı.
  3. Histogram: Gözlemlenen değerlerin belirli aralıklarda dağılımını (bucket) ve toplam sayısını/toplamını örnekleyen karmaşık bir türdür. Özellikle istek süreleri veya yanıt boyutları gibi dağılımı önemli olan metrikler için kullanılır.
  4. Summary (Özet): Histogram’a benzer ancak istemci tarafında yapılandırılabilir yüzdelik dilimler (quantiles) hesaplar.

Bu metrik türlerini anlamak, PromQL sorgularını doğru bir şekilde yazmak için kritik öneme sahiptir.

Prometheus Arayüzüne Erişim

Prometheus genellikle varsayılan olarak 9090 portundan web arayüzü sunar. Ubuntu 14.04 sunucunuzda Prometheus kurulu ve çalışır durumdaysa, bir web tarayıcısı üzerinden http://:9090 adresine giderek arayüze erişebilirsiniz. Bu arayüz, PromQL sorgularınızı yazabileceğiniz ve sonuçları tablo veya grafik olarak görebileceğiniz ana çalışma alanınızdır.

PromQL’e Giriş ve Temel Sorgular

PromQL (Prometheus Query Language), Prometheus’un zaman serisi verilerini sorgulamak için kullandığı güçlü ve esnek bir dildir. Metrikleri seçmek, etiketlere göre filtrelemek, zaman aralıklarını belirlemek ve matematiksel işlemler yapmak için kullanılır.

Temel Sözdizimi

PromQL’in temel yapı taşı, metrik seçicileridir. Bir metrik seçici, bir metrik ismini ve isteğe bağlı etiket eşleştiricilerini içerir:

metric_name{label_name="label_value", another_label=~"regex.*"}
  • metric_name: Sorgulamak istediğiniz metriğin adı.
  • {...}: Etiket filtrelerini içerir.
  • label_name="label_value": Tam eşleşme.
  • label_name!="label_value": Tam eşleşmeyen.
  • label_name=~"regex": Regex ile eşleşen.
  • label_name!~"regex": Regex ile eşleşmeyen.

Anlık Vektörler (Instant Vectors) ve Aralık Vektörleri (Range Vectors)

  • Anlık Vektör: Belirli bir zaman noktasındaki bir dizi zaman serisinin en son değerini temsil eder. Çoğu PromQL sorgusu varsayılan olarak anlık vektör döndürür.
    up

    Bu sorgu, tüm hedeflerin o anki durumunu (1=yukarı, 0=aşağı) döndürür.

  • Aralık Vektörü: Belirli bir zaman aralığındaki bir dizi zaman serisinin değerlerini temsil eder. Metrik isminin sonuna köşeli parantez içinde bir süre belirtilerek oluşturulur (örneğin, [5m] 5 dakika, [1h] 1 saat). Aralık vektörleri genellikle rate(), sum_over_time() gibi fonksiyonlarla birlikte kullanılır.
    node_cpu_seconds_total[5m]

    Bu sorgu, son 5 dakikadaki node_cpu_seconds_total metriğinin tüm değerlerini döndürür.

Temel Sorgu Örnekleri

Prometheus arayüzündeki “Expression” kutucuğuna aşağıdaki sorguları yazıp “Execute” düğmesine tıklayarak sonuçları gözlemleyebilirsiniz.

1. Tüm Metrikleri Görüntüleme

Tüm metrikleri listelemek için boş bir sorgu yapamazsınız. Belirli bir metrik adını yazmanız gerekir.

up

Bu, tüm hedeflerin anlık sağlık durumunu gösterir (1 = sağlıklı, 0 = sağlıksız). Genellikle up metriği Prometheus’un kendi tarafından sağlanan bir metriktir.

2. Etiketlere Göre Filtreleme

Sadece belirli bir instance’a ait up metriklerini görmek için:

up{instance="localhost:9090"}

Veya belirli bir job’a ait metrikleri filtrelemek için:

node_cpu_seconds_total{job="node_exporter"}

3. Regex Kullanarak Filtreleme

eth ile başlayan tüm ağ arayüzlerine ait metrikleri görmek için:

node_network_receive_bytes_total{device=~"eth.*"}

4. Sayısal Karşılaştırmalar

Değeri 0’dan büyük olan up metriklerini görmek için (yani çalışan hedefleri):

up > 0

Pratik PromQL Sorgu Örnekleri

Şimdi daha karmaşık ve pratik senaryolar için PromQL sorgularına bakalım. Bu sorgular genellikle node_exporter tarafından sağlanan metrikleri kullanır. Eğer Ubuntu 14.04 sunucunuzda node_exporter kurulu değilse, bu metrikler görünmeyecektir.

1. CPU Kullanım Yüzdesi Hesaplama

CPU kullanımını yüzde olarak görmek, en yaygın izleme ihtiyaçlarından biridir. node_cpu_seconds_total metriği, CPU’nun farklı modlarda (idle, user, system vb.) harcadığı toplam süreyi saniye cinsinden tutan bir sayaçtır. rate() fonksiyonu, bu sayacın saniyedeki ortalama artış hızını hesaplar.

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

Açıklama:

  • node_cpu_seconds_total{mode="idle"}[5m]: Son 5 dakikadaki boşta (idle) CPU süresini anlık olarak değil, bir aralık vektörü olarak alır.
  • rate(...): Bu aralık vektörü üzerindeki saniyedeki ortalama artış hızını hesaplar.
  • avg by (instance) (...): Her bir instance (sunucu) için ortalama idle CPU süresi oranını hesaplar.
  • 100 - (...): Toplam CPU süresinden boşta geçen süreyi çıkararak CPU kullanım yüzdesini verir.

2. Bellek Kullanım Yüzdesi Hesaplama

Sistem belleği kullanımını yüzde olarak görmek için:

((node_memory_MemTotal_bytes - node_memory_MemFree_bytes - node_memory_Cached_bytes - node_memory_Buffers_bytes) / node_memory_MemTotal_bytes) * 100

Açıklama:

  • node_memory_MemTotal_bytes: Toplam fiziksel bellek.
  • node_memory_MemFree_bytes: Boşta olan bellek.
  • node_memory_Cached_bytes: Önbelleğe alınmış bellek.
  • node_memory_Buffers_bytes: Tamponlanmış bellek.
  • Bu sorgu, toplam bellekten boş, önbelleğe alınmış ve tamponlanmış belleği çıkararak kullanılan gerçek bellek miktarını bulur ve bunu toplam belleğe bölerek yüzdeyi hesaplar.

3. Disk G/Ç (I/O) Hızı

Belirli bir diskteki okuma işlemleri hızını saniyedeki okuma sayısı olarak görmek için:

rate(node_disk_reads_completed_total{device="sda"}[5m])

Açıklama:

  • node_disk_reads_completed_total: Tamamlanan disk okuma işlemlerinin toplam sayısı (sayaç).
  • device="sda": Sadece sda diski için filtreler.
  • rate(...): Son 5 dakikadaki ortalama okuma hızını saniyede tamamlanan okuma sayısı olarak verir.

4. Ağ Trafiği Hızı

Belirli bir ağ arayüzündeki gelen bayt hızını görmek için:

rate(node_network_receive_bytes_total{device="eth0"}[5m])

Giden bayt hızı için:

rate(node_network_transmit_bytes_total{device="eth0"}[5m])

Açıklama:

  • node_network_receive_bytes_total ve node_network_transmit_bytes_total: Toplam alınan ve gönderilen bayt sayısı (sayaçlar).
  • device="eth0": Sadece eth0 arayüzü için filtreler.
  • rate(...): Son 5 dakikadaki ortalama bayt hızını saniyede bayt olarak verir.

5. Yüksek Kardinaliteli Metriklerle Çalışma (irate())

rate() fonksiyonu, bir aralık üzerindeki ortalama hızı hesaplarken, irate() (instantaneous rate) ise sadece son iki örnek arasındaki artış hızını hesaplar. Özellikle çok sık değişen (yüksek kardinaliteli) metrikler veya ani sıçramaları yakalamak istediğiniz durumlarda irate() daha kullanışlı olabilir.

irate(node_network_receive_bytes_total{device="eth0"}[1m])

Açıklama: Son 1 dakikadaki en son iki örnek arasındaki ani ağ alım hızını gösterir. Ani trafik artışlarını veya düşüşlerini daha hızlı yakalamanıza yardımcı olur.

Prometheus ile Veri Analizi ve İpuçları

Prometheus UI sadece sorgu yazmakla kalmaz, aynı zamanda verileri görselleştirmenize de olanak tanır.

Graph (Grafik) Sekmesi

Sorgunuzu çalıştırdıktan sonra “Graph” sekmesine geçerek zaman serisi verilerinin grafiksel temsilini görebilirsiniz. Bu, trendleri, ani yükselişleri veya düşüşleri görsel olarak anlamak için çok faydalıdır. Grafik üzerinde zaman aralığını değiştirebilir, kaydırabilir ve yakınlaştırabilirsiniz.

Table (Tablo) Sekmesi

“Table” sekmesi, sorgunuzun döndürdüğü anlık vektörlerin veya aralık vektörlerinin ham sayısal değerlerini gösterir. Özellikle belirli bir zaman noktasındaki kesin değerleri veya etiketleri incelemek istediğinizde kullanışlıdır.

by ve without Operatörleri

PromQL’de toplama (aggregation) fonksiyonlarını kullanırken (sum(), avg(), count() vb.), by ve without operatörleri, sonuçları hangi etiketlere göre gruplayacağınızı veya hangi etiketleri göz ardı edeceğinizi belirtmenize olanak tanır.

  • sum by (instance) (rate(node_cpu_seconds_total[5m])): Her bir instance için toplam CPU kullanım hızını hesaplar.
  • sum without (mode) (rate(node_cpu_seconds_total[5m])): mode etiketi hariç diğer tüm etiketlere göre gruplayarak toplam CPU kullanım hızını hesaplar.

Zaman Aralıkları ve Çözünürlük

Sorgularınızdaki zaman aralıkları (örneğin, [5m], [1h]) Prometheus’un o aralıktaki verileri nasıl değerlendireceğini belirler. Daha kısa aralıklar daha yüksek çözünürlük sağlarken, daha uzun aralıklar daha genel trendleri gösterir. Prometheus’un veri saklama süresini (retention) ve scrape aralığını (scrape_interval) dikkate alarak sorgularınızı optimize etmeniz önemlidir.

Sonuç ve Sıkça Sorulan Sorular

Bu rehberin ilk bölümünde, Prometheus’un temel kavramlarını, metrik türlerini ve PromQL’in sözdizimini öğrendik. Ayrıca, CPU, bellek, disk ve ağ kullanımı gibi yaygın izleme senaryoları için pratik PromQL sorguları yazdık. Prometheus arayüzünü kullanarak verileri nasıl sorgulayacağınızı ve görselleştireceğinizi de inceledik.

Prometheus’un gücü, doğru PromQL sorgularını yazma yeteneğinizde yatmaktadır. Bu temel bilgileri kullanarak sistemlerinizin performansını anlamaya başlayabilir ve potansiyel sorunları erken aşamada tespit edebilirsiniz.

Rehberin ikinci bölümünde, daha gelişmiş PromQL konularına, uyarı kurallarına (alerting rules), kayıt kurallarına (recording rules) ve Grafana gibi dashboard araçları ile entegrasyona odaklanacağız.

Sıkça Sorulan Sorular (SSS)

1. Prometheus metrikleri neden görünmüyor?

Bunun birkaç nedeni olabilir:

  • Hedef çalışmıyor: Prometheus’un izlediği hedef (örneğin, node_exporter) çalışmıyor olabilir.
  • Prometheus hedefi scrape edemiyor: Prometheus yapılandırma dosyasında (prometheus.yml) hedef doğru şekilde tanımlanmamış veya erişilemez durumda olabilir (güvenlik duvarı, ağ sorunu). Prometheus UI’daki “Status” -> “Targets” sayfasını kontrol edin.
  • Yanlış metrik adı/etiket: PromQL sorgunuzda yanlış bir metrik adı veya etiket kullanıyor olabilirsiniz.
  • Veri yok: Prometheus henüz o metriği çekmemiş veya metrik henüz üretilmemiş olabilir.

2. PromQL sorgum neden hata veriyor?

PromQL sorgularında yaygın hatalar şunlardır:

  • Sözdizimi hatası: Yanlış parantez kullanımı, eksik tırnak işaretleri veya yanlış operatörler.
  • Metrik/etiket bulunamadı: Sorguladığınız metrik veya etiket Prometheus’ta mevcut değil.
  • Geçersiz zaman aralığı: Özellikle aralık vektörlerinde [5m] gibi süre belirtimlerinde hata.
  • Fonksiyon argümanları: Fonksiyonların beklediği argüman türüyle uyuşmayan değerler.

Hata mesajlarını dikkatlice okuyun; genellikle sorunun nerede olduğunu belirtirler.

3. Ubuntu 14.04’te Prometheus’u nasıl kurarım?

Bu rehber PromQL sorgulamaya odaklandığı için kurulum adımlarını içermemektedir. Ancak özetle, Prometheus ve Node Exporter’ın ikili dosyalarını indirmeli, uygun dizinlere yerleştirmeli, prometheus.yml yapılandırma dosyasını oluşturmalı ve systemd veya SysV init betikleri aracılığıyla servis olarak çalıştırmanız gerekir. Ubuntu 14.04’ün eski bir sürüm olması nedeniyle, modern Prometheus ikili dosyalarını doğrudan çalıştırmak yerine derlemeniz veya statik derlenmiş sürümleri kullanmanız gerekebilir. Prometheus’un resmi dokümantasyonu en güncel kurulum bilgilerini sağlar.

4. rate() ve irate() arasındaki fark nedir?

  • rate(): Belirtilen zaman aralığı boyunca bir sayacın saniyedeki ortalama artış hızını hesaplar. Daha yumuşak bir eğri sağlar ve kısa süreli dalgalanmaları filtreler.
  • irate(): Yalnızca belirtilen aralıktaki son iki veri noktası arasındaki artış hızını hesaplar. Daha ani değişimleri yakalar ve ani yükselişleri/düşüşleri hızlıca gözlemlemek için kullanışlıdır. Yüksek kardinaliteli veya ani değer değişimleri olan metrikler için daha uygundur.

5. Prometheus’ta hangi port kullanılır?

Prometheus sunucusu varsayılan olarak 9090 portunu kullanır. Node Exporter gibi diğer exporter’lar ise genellikle 9100 gibi farklı portlarda çalışır. Bu portlar prometheus.yml dosyasında yapılandırılabilir.

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

Gönder

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.
Mobil sürümden çık