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: [email protected]
from: [email protected]
smarthost: smtp.gmail.com:587
auth_username: "[email protected]"
auth_identity: "[email protected]"
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.