Prometheus

Uygulama ve sistemleri izlemek-monitor etmek amacıyla kullanılan prometheus nedir, kurulumu, exporter ve grafana ile kullanımı yer alıyor.

Prometheus nedir?

Prometheus açık kaynaklı çekme-pull temelli monitör etme-izleme aracıdır.

Neden Monitoring veya Prometheus

İşletim sistemi, uygulamalar(mongodb, redis, java vb.) ve geliştirilen uygulamalar kendilerinden beklenen işlevi yerine getirebilmek için işlemci, hardisk, ram, ağ gibi çeşitli kaynakları kullanır. Kaynaklarda sorun olması veya yetersiz olmasından dolayı sistemlerin çalışması aksayabilir. Monitoring-monitor etme veya izleme uygulamaları kaynakları belirli aralıklarla kontrol ederek sistemlerin sorunsuz çalışması için gerekli olan kaynakların takip edilmesini sağlar. Prometheus bu işlemi yapan araçlardan birisidir.

Prometheus içerisinde yer alan uyarı sistemi veya alerting kullanılarak kaynakların kapasite ve durumuna göre uyarı göndermeyi sağlar. Monitoring yöntemi olarak itme-push ve çekme-pull yöntemleri kullanılır. Diğer sistemlerden farklı olarak Prometheus varsayılan olarak çekme-pull yöntemini kullanır. İtme-push yönteminde izlenmesi istenen kaynaklar kendilerinden beklenen işlevin yanında izleme verilerini gönderme(itme-push-gönderme) sorumluluğunu da yerine getirir. Çekme-pull yönteminde ise kaynaklar izleme verilerini bir adres üzerinden kullanıma sunarak uygulamanın(prometheus vb.) verileri almasını sağlar. Prometheus içerisinde yer alan pushgateway sayesinde itme-push temelli monitoring işlemini de sağlar.

Prometheus aracını diğer araçlardan ayıran özellikler itme-pull temelli olması, sade-basit bir yapısını olması, bulut tabanlı uygulamalarda sıklıkla kullanılması ve Cloud Native tarafından desteklenmesidir.

Prometheus nasıl çalışır

Prometheus kaynakları izlemek için exporter olarak adlandırılan araçları(node-exporter, redis-exporter vb.) kullanır.

Exporter izlenecek olan kaynağa ait verileri Prometheus sisteminin anlayacağı biçime çevirerek HTTP protokolü(/metrics) üzerinden sunar.

Prometheus ayarlarına eklenen exporter adreslerine belirlenen aralıklarla HTTP isteği yaparak verileri Zaman Serisi-Time Series veritabanına kayıt eder. Kayıt edilen izleme verileri PromQL kullanılarak Prometheus Web GUI, Grafana gibi araçlar üzerinden takip edilir.

Prometheus içerisinde yer alan Alert Manager gibi araçlar kullanılarak veriler belirli bir koşulu sağlaması halinde uyarı bildirimi gönderilir.

Prometheus kurulumu

İşletim sistemine göre kurulum dosyaları aşağıdaki adresten indirilir.

https://prometheus.io

İşletim sistemine göre kurulum işlemi yapılır.

Prometheus kurulumu *nix tabanlı işletim sistemlerinde aşağıdaki adımlar takip edilerek yapılır.

curl -L -O https://github.com/prometheus/prometheus/releases/download/v2.28.1/prometheus-2.28.1.linux-amd64.tar.gz
tar -xvzf prometheus-2.28.1.linux-amd64.tar.gz
cd prometheus-2.28.1.linux-amd64

Prometheus çalıştırılır.

./prometheus

Web tarayıcı üzerinden aşağıdaki adrese gidilerek Prometheus Web GUI erişilir.

localhost:9090
veya
ip-adresi:9090

Prometheus uygulamasının arka planda çalışması için aşağıdaki gibi servis olarak eklenmesi faydalı olacaktır.

cp -r . /usr/local/bin/prometheus
cat << EOF > /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/prometheus/prometheus --config.file=/usr/local/bin/prometheus/prometheus.yml

[Install]
WantedBy=multi-user.target
EOF

Servis çalıştırılır.

service prometheus start

Servis kontrol edilir.

service prometheus status

Prometheus kullanımı

Prometheus Web GUI verilere tablo ve grafik ile erişim, prometheus ayarları, uyarı-alert alanlarına erişim sağlar.

Aşağıdaki PromQL komutu Graph bölümünde çalıştırılarak Prometheus durumu ile ilgili bilgi alınabilir.

up

Grafiksel alanda yer alan bileşenler kullanılarak dakika, saat, gün, hafta, ay, yıl bazlı verilerin gösterimi sağlanır.

Prometheus verilerine erişilir.

localhost:9090/metrics
veya
ip-adresi:9090/metrics

Sayfa her yenilendiğine veriler değişecektir.

Prometheus buradaki verileri belirlenen aralıklarla HTTP isteği gönderip alarak kayıt eder.

  • TYPE – veri türünü(counter, gauge, histogram, summary) belirtir.
  • HELP – veri türünü açıklamasını ifade eder.

Prometheus ayarları

Genellikle Prometheus ayarları YAML formatında kurulum dosyası ile birlikte gelen prometheus.yml dosyası kullanılır.

NOT: –config.file parametresi ile farklı ayar dosyası belirlenebilir.

Dosya içeriği ve açıklaması aşağıdaki gibidir.

global: # global ayarlar
	scrape_interval: 15s # verileri alma süresi
	evaluation_interval: 15s # kuralların işleme süresi

rule_files: # kurallar
	# - "first.rules"
	# - "second.rules"

scrape_configs: # verilerin alınacağı yer
	- job_name: prometheus
		static_configs:
		- targets: ['localhost:9090']

Yeni veri kaynağı eklenmek istenildiğinde dosya sonuna aşağıdaki bilgilerin eklenmesi yeterli olacaktır.

- job_name: node_exporter
  scrape_interval: 1m
  scrape_timeout: 1m
  	static_configs:
	  - targets: ['localhost:9100']

NOT: Kullanılan exporter ve adrese göre targets değeri değişiklik gösterir.

Exporter

Farklı sistemlere ait verilerin alınması ve Prometheus tarafından işlenebilmesi için Prometheus uygulamasının anlayabileceği biçime dönüştürülmesi gerekir.

Exporter uygulamaları sisteme ait verileri alarak Prometheus uygulamasının anlayabileceği biçime dönüştürür.

Aşağıdaki adreste yer alan Exporter uygulamaları kullanılarak birçok sisteme ait verinin alınması sağlanır.

https://prometheus.io/docs/instrumenting/exporters/

node_exporter

Kurulum aşağıdaki adımlar takip edilerek yapılır.

curl -L -O https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz
tar -xvzf node_exporter-1.2.0.linux-amd64.tar.gz
cd node_exporter-1.2.0.linux-amd64

Node exporter çalıştırılır.

./node_exporter

Node Exporter verilerine erişilir.

localhost:9100/metrics
veya
ip-adresi:9100/metrics

Node Exporter servis olarak eklenir.

cp -r node_exporter /usr/local/bin
cat << EOF > /etc/systemd/system/node-exporter.service
[Unit]
Description=Prometheus Node Exporter Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

Servis çalıştırılır.

service node-exporter start

Servis kontrol edilir.

service node-exporter status

Node Exporter verilerin alınması için Prometheus ayarlarına Node Exporter adresinin eklenmesi gerekir.

Ayar dosyası konumuna Prometheus Web GUI üzerinde yer alan Status>Command-Line Flags sayfasında yer alan config.file bilgisi ile erişilir.

Dosya sonuna aşağıdaki ayarların eklenmesi yeterli olacaktır.

  - job_name: 'node-exporter'
    static_configs:
    - targets: ['localhost:9100']

Hızlıca aşağıdaki gibi ekleme yapılabilir.

cat << EOF >> /usr/local/bin/prometheus/prometheus.yml
  - job_name: 'node-exporter'
    static_configs:
    - targets: ['localhost:9100']
EOF

Verileri alma sıklığı scrape_interval ayarı eklenerek değiştirilebilir.

NOT: Veri alma sıklığı belirtilmediğinde genel-global ayarlar kullanılır.

Prometheus servisi yeniden başlatılarak ayarlar aktif hale getirilir.

service prometheus restart

Prometheus Web GUI üzerinden Status bölümündeki sayfalar kullanılarak ayarlar kontrol edilebilir.

Graph bölümünde node_ ile başlayan değerler ile Node Exporter verilerine ulaşılır.

node_uname_info

PromQL sorguları ve çeşitli matematiksel işlemler yapılarak verilerin gösterimi istenilen biçime dönüştürülür.

count without(cpu, mode) (node_cpu_seconds_total{mode="idle"})
(1 - avg(irate(node_cpu_seconds_total{mode="idle"}[10m])) by (instance)) * 100

Verilerin gösterimi sırasında kullanılan uzun PromQL sorgularına takma isimle erişmek için Rule özelliği kullanılır.

NOT: Diğer exporter araçlarının kurulumu ve kullanımı Node Exporter ile benzerlik gösterir.

Rule

Prometheus Rule özelliği uzun PromQL sorgularını takma isim altında toplayıp kullanmayı sağlar.

Özellik aşağıdaki gibi ayrı dosyalara yazılan YAML formatı ile hazırlanır.

cat <<EOF > /usr/local/bin/prometheus/kural.yml
groups:
- name: bellek_kullanimi_10dk
  rules: 
  - record: bellek_kullanimi_10dk
    expr: (1 - avg(irate(node_cpu_seconds_total{mode="idle"}[10m])) by (instance)) * 100
EOF

Dosya promtool aracı ile kontrol edilir.

./promtool check rules kural.yml

Kural Prometheus ayar dosyasındaki rule_files bölümüne eklenir.

rule_files:
   - "kural.yml"

Prometheus servisi yeniden başlatılarak ayarlar aktif hale getirilir.

service prometheus restart

Sorguya Prometheus Web GUI bölümündeki Status>Rules sayfasından erişilebilir veya takma ad ile sorgu çalıştırılır.

bellek_kullanimi_10dk

Prometheus Rule dosyasına çeşitli koşullarda uyarı verilmesi için kullanılan Alert Manager özelliği aşağıdaki gibi eklenebilir.

cat <<EOF >> /usr/local/bin/prometheus/kural.yml
- name: uyarilar
  rules:
    - alert: KaynakKontrol
      expr: up == 0
      for: 1m
      labels:
        severity: critical
      annotations:
        summary: "[{{ $labels.instance }}] ulaşılamıyor. "
        description: "[{{ $labels.instance }}] kaynağına 1 dakikadır ulaşılamıyor."
EOF

Prometheus Web GUI üzerinde yer alan Status>Rules ve Alert ile uyarı durumu kontrol edilir.

Kaynakların takip edilmesi için kullanılan Node Exporter servisi durdurularak uyarı sisteminin çalışması kontrol edilir.

service node-exporter stop
service node-exporter start

Alert Manager

Uyarı koşulunun gerçekleşmesiyle e-posta göndermek, web sayfasına istek göndermek veya farklı servislere bildirim gönderiminde Alert Manager aracı kullanılır.

Kurulum aşağıdaki adımlar takip edilerek yapılır.

curl -L -O https://github.com/prometheus/alertmanager/releases/download/v0.22.2/alertmanager-0.22.2.linux-amd64.tar.gz
tar -xvzf alertmanager-0.22.2.linux-amd64.tar.gz
cd alertmanager-0.22.2.linux-amd64

Alert Manager servis olarak eklenir.

cp -r . /usr/local/bin/alertmanager
cat << EOF > /etc/systemd/system/alertmanager.service
[Unit]
Description=Prometheus Alert Manager
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/alertmanager/alertmanager --config.file=/usr/local/bin/alertmanager/alertmanager.yml

[Install]
WantedBy=multi-user.target
EOF

Bildirimin gönderileceği servisler/yerler tanımlanır.

E-posta göndermek;

receivers:
- name: 'email'
  email_configs:
  - send_resolved: true
    to: yusufsezer@mail.com
    from: admin@admin.com
    smarthost: smtp.gmail.com:587
    auth_username: "admin@admin.com"
    auth_identity: "admin@admin.com"
    auth_password: "****"

Web isteği göndermek;

receivers:
- name: 'web'
  webhook_configs:
  - url: 'http://yusufsezer.com:5001/'

NOT: Bildirim gönderimi gönderilecek olan yere göre farklılık gösterir.

Ayar dosyası amtool aracı ile kontrol edilir.

./amtool check-config alertmanager.yml

Servis çalıştırılır.

service alertmanager start

Servis durumu kontrol edilir.

service alertmanager status

Alert Manager erişilir.

localhost:9093
veya
ip-adresi:9093

Aşağıdaki ayarlar Prometheus ayar dosyasında düzenlenerek Alert Manager entegrasyonu sağlanır.

alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - alertmanager:9093

Servis yeniden başlatılarak ayarlar aktif edilir.

service prometheus restart

Uyarının çalışması için gerekli olan koşul(node-exporter servisinin durdurmak gibi) sağlanarak sonuç kontrol edilir.

Grafana

Prometheus verilerinin daha anlamlı ve anlaşılır olabilmesi amacıyla Grafana aracı sıklıkla kullanılır.

Grafana Prometheus ile bağlantı sağlayarak PromQL sorgularını çalıştırmayı ve görsel veya grafiksel gösterimini sağlar.

Grafana kurulumu

İşletim sistemine göre kurulum aşağıdaki adreste yer alan yönergeler takip edilerek yapılır.

https://grafana.com/grafana/download

Grafana kurulumu işletim sistemine ait uygulama kurulum dosyasının indirilmesi ve işletim sistemine göre kurulması ile yapılır.

curl -L -O https://dl.grafana.com/oss/release/grafana-8.0.6-1.x86_64.rpm
sudo yum install grafana-8.0.6-1.x86_64.rpm

Grafana servisi başlatılır.

service grafana-server start

Grafana arayüzüne erişilir.

localhost:3000
veya
ip-adresi:3000

Kurulum sonrası kullanıcıadı:şifre bilgisi admin:admin ile giriş yapılarak kurulum tamamlanır.

Grafana Prometheus bağlantısı

Grafana Data Sources bölümünden Prometheus adresi eklenerek Prometheus verilerine erişim sağlanır.

Grafana üzerinden PromQL sorguları kullanılarak görsel veya grafiksel gösterim hazırlanır.

Görsel veya grafiksel gösterimin hazırlanışı zaman alacağından Import ile başka geliştiriciler tarafından hazırlanan şablonların kullanımı ve düzenlenmesi faydalı olacaktır.

Grafana şablonlarına aşağıdaki adresten erişim sağlanır.

https://grafana.com/grafana/dashboards

Şablon seçildikten sonra(örn: 1860) adres veya şablon numarası(ID) Grafana Import bölümüne yazılarak şablon kullanılır.

Son

Sağlamış olduğu basit ve sade yapısı ile birlikte Cloud Native tarafından desteklenen Prometheus kaynakların takibini kolay hale getirir.

Verilerin daha anlaşılır olarak gösterilmesi-ifade edilmesinde Prometheus ile birlikte Grafana aracı sıklıkla kullanılmaktadır.

Ancak PromQL kullanılarak görsel veya grafiksel, uyarı sorgularının hazırlanması zaman alabilmektedir.

Bundan dolayı önceden hazırlanmış sorgu ve şablonların kullanımı faydalı olacaktır.

Hayırlı günler dilerim.


Bunlara'da bakmalısın!