Devops

Prometheus Stack / Linux server Kurulum

Prometheus Nedir?

Prometheus, open-source bir izleme aracıdır. Metrik verileri toplar ve toplanan veriyi görselleştirmek için araçlar sunar. Temelde GoLang ile yazılmıştır ve 2016 yılında Cloud Native Computing Foundation bünyesine girmiştir.

Ayrıca, Prometheus, metrikleri belirli bir kullanıcı eşiğine ulaştığında uyarılar oluşturmanıza da olanak tanır.

Metrikler, bir sistemin belirli bir anda durumunu temsil etmek için kullanılan temel veri yapılarıdır. Anahtar-değer çiftleri şeklindedir; burada anahtar metrik adını, değer ise sayısal bir veri noktasını(numeric value)temsil eder.


Prometheus’un bu metrikleri toplama şekli, metrikleri bir HTTP endpoint’inde sergileyen hedefleri (targets) sorgulamaktır. Yani, metrikleri toplamak istediğimiz uygulama ya da sistem, metrikleri belirli bir HTTP endpoint’inde sunacak ve biz de bu endpoint’e GET isteği göndererek metrikleri alacağız.

Toplanan metrikler, bir zaman serisi veritabanında saklanır ve Prometheus’un yerleşik sorgu dili PromQL kullanılarak sorgulanabilir.

Prometheus’ta üç ana bileşen vardır: Data Retrieval worker, Time series veritabanı ve PromQL sorgusu kabul eden HTTP server.

Prometheus, hangi türdeki metrikleri izlemek için kullanılabilir?

  • Linux/Windows server
  • Apache/nginx Web Server
  • Databases
  • Cpu/Memory Utilization
  • Disk Space
  • Service Uptime
  • Application specific data such as:
  • >Number of exceptions
  • >Latency
  • >Pending Requests

Prometheus, sayısal olan zaman serisi verilerini izlemek için tasarlanmıştır.

Prometheus, hangi türdeki metrikleri izlemez:

  • >Events
  • >System logs
  • >Traces

Prometheus Mimarisi

Önceki bölümde Prometheus’un üç bileşeni olduğunu belirttik. Data retrieval, Time series veritabanı ve HTTP sunucusu. Gerçek senaryolarda, bu durum biraz daha karmaşık hale gelir.

Prometheus, izlemek istediğiniz sistem veya uygulama için tüm çözümü oluşturacak birçok bileşene sahiptir.

Not: Varsayılan olarak, uygulamalarınız, sunucularınız veya genel olarak herhangi bir sisteminiz (Targets) otomatik olarak Prometheus’a uygun şekilde metrik sunmaz.

Exporters

Örneğin, Exporter’lar, hedefinizde çalışan ve metrikleri sunmaktan sorumlu olan küçük işlemlerdir, böylece ‘Data Retrieval worker’, metrikleri çekmek için ‘Pull’ Metodu ile bunları sorgulayabilir.

Yani, target’larınız asla veriyi bize göndermez. Prometheus her zaman o veriyi sorgular.

Push Gateway

Ancak, zaman zaman kısa ömürlü job’ların, Prometheus’un pull tabanlı modeliyle çalışamayacağı durumlar olacaktır. İşte bu durumda, Push Gateway bileşeni devreye girer. Kısa ömürlü bir processiniz olduğunda, verileri Prometheus’a göndermek için bu bileşeni kullanabilirsiniz çünkü bir sisteminizde job olarak çalışan processler varsa, o processlerden verileri almak için yeterince uzun süre çalışmayacaktır.

Service Discovery

Buna ek olarak, Prometheus’un tüm hedeflerini(targets) bilmesi gerekir. Konfigürasyon dosyasında(prometheus.yml) bunları sabit bir şekilde belirleyebilirsiniz, ancak Kubernetes gibi dinamik ortamlar ya da Cloud ortamlarında örn: EC2 dinamik şekilde up ve down gibi durumları oluyorsa hedef listenizi dinamik olarak güncellemek gerekir. Bu tür senaryoda service discovery kullanılır.

Alert Manager

Daha önce belirttiğimiz gibi, Prometheus aynı zamanda uyarılar oluşturmak için kullanılabilir, ancak Prometheus, bildirimleri gönderme işinden sorumlu değildir. Uyarıları tetiklemek için kullanılır, ancak bildirimleri e-posta, SMS veya Slack gibi yöntemlerle gönderecek ayrı bir bileşen olan Alert Manager’a ihtiyacınız vardır.

BileşenAçıklama
AlertmanagerUyarıları yönetir ve dış sistemlere iletir
PrometheusMetrikleri toplar ve alarmları üretir
Node ExporterSunucu metriklerini sağlar
Gmail SMTPAlarm mail’leri için SMTP sunucusu olarak kullanılır

KURULUM

Örnek olarak ubuntu kullanacağım.

İsterseniz, Prometheus’u indirilebilir ve son sürüm LTS dosyalarının linkini buradan binary şeklinde indirip servis haline getirebilirsiniz.

Ancak ben paket yöneticisi üzerinden indirip kuracağım.

sudo apt update
sudo apt install prometheus
systemctl status prometheus
systmectl enable prometheus
sudo ufw allow 9090
  • Yapılandırma dosyası: /etc/prometheus/prometheus.yml
  • Veri dizini: /var/lib/prometheus
  • Binaries: /usr/bin/prometheus, /usr/bin/promtool

Web kullanıcı arayüzüne erişelim.

Bu komut sonrası 9090 portundan prometheus’un web arayüzüne ulaşabilirsiniz. Tarayıcı üzerinde eğer VM kullanıyorsanız localhost üzerinden görüntüleyebilirsiniz.:

http://ipadress:9090/

Ekran üzerinde görüldüğü gibi ulaşabilir ve default target olan prometheus’un kendisini up ile kontrol edebilirsiniz.

Şimdi bu altyapıyı genişletmek ve Prometheus’un gücünü göstermek için, aslında bir Kubernetes Cluster altyapısında kurulum yapmış olsaydık Node-Exporter ve Alert-manager araçlarınıda yükleyebilirdik. Ancak bunu kubernetes cluster kurulumunda ikinci yazımda yapacağım.

Fakat yazı çok fazla uzun olacağından dolayı son olarak veri görselleştirme sağlamak için grafana kurulumunu yapıp ve örnek olması açısındanda bir adet aynı linux sunucumuza mariadb kurup , Prometheus’ın exporterlarından mysqld_exporter’ını indirip veritabanı metriklerini inceleyeceğiz

MariaDB kurulumu

apt install mariadb-server

systemctl start mariadb

systemctl enable mariadb

Exporter’ın çalışması için bir MariaDB kullanıcısı oluşturun:

sudo mysql

CREATE USER ‘exporter’@’localhost’ IDENTIFIED BY ‘password’;

GRANT PROCESS, REPLICATION CLIENT, SELECT ON . TO ‘exporter’@’localhost’;

FLUSH PRIVILEGES;

mysqld_exporter Kurulumu:

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz

cp mysqld_exporter /usr/local/bin/

Exporter’ı bir systemd servisi olarak ekleyin:

sudo vi /etc/systemd/system/mysqld_exporter.service
[Unit]

Description=Prometheus MySQL Exporter

After=network.target

[Service]

User=root

ExecStart=/usr/local/bin/mysqld_exporter \

–config.my-cnf=/etc/mysql/my.cnf Restart=always

[Install] WantedBy=multi-user.target

Ardından servisi başlatın:

sudo systemctl daemon-reload

sudo systemctl start mysqld_exporter

sudo systemctl enable mysqld_exporter

prometheus.yml dosyasına yeni bir job ekleyin:

yaml’ı yazarken boşluklara dikkat edilmez ise çalışmayabilir.

vim /etc/prometheus/prometheus.yml


-job_name: "prometheus" static_configs:

-targets: ["localhost:9090"]

-job_name: "mariadb" static_configs:

-targets: ["localhost:9104"

Prometheus servisimizi restart edelim:

systemctl restart prometheus

Şimdi, Prometheus web arayüzünde mariadb ‘up’ şeklinde görünmüş olmalıdır.

Prometheus WebUI üzerinden MariaDB metriklerini görebileceksiniz. Örnek bir sorgu:

mysql_global_status_connections

Eğer Harici Linux rhel sunucularınız varsa bunları izlemek isterseniz, bunlar için exporter kullanmak isterseniz aşağıdaki link üzerinden exporterı , o harici sunucuya indirebilirsiniz. Sonrasında promethues kurdugunuz sunucuda , /etc/prometheus/prometheus.yml dosyanıza target olarak eklersiniz.

https://github.com/prometheus/node_exporter

Grafana Kurulum

Redhat Kullanıyorsanız

yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.1.0-1.x86_64.rpm

Ubuntu için gpg key ekleyeceğiz:

apt-get install -y software-properties-common

mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
apt update 

apt install grafana 

grafana-server -v

Grafana Servisini Başlatın:

sudo systemctl start grafana-server

sudo systemctl enable grafana-server

Grafana’ya Tarayıcıdan Erişin:

Tarayıcınızdan http://<sunucu_IP_adresi>:3000 adresine gidin.

Varsayılan kullanıcı adı ve şifre: admin / admin (İlk girişte değiştirmeniz istenir).

  • Username: admin
  • Password: admin

“Add your first data source” butonuna tıklayın.

• Listeden Prometheus’u seçin.

• Prometheus’un URL’sini girin: http://localhost:9090

• “Save & Test” diyerek bağlantıyı test edin.

Prometheus data source’unu ekledikten sonra aşağıdaki linkten maria db dashboardını arayıp ID’sini kopyalayın ve Load butonuna basarak import edin Query sekmesinde, veri kaynağının Prometheus olduğundan emin olun. https://grafana.com/grafana/dashboards

Grafana’da panellerin doğru çalışabilmesi için Prometheus’un doğru verileri toplaması gerekir. Aşağıdaki adımlarla verilerin doğru şekilde toplandığından emin olun:

Prometheus’un doğru şekilde çalıştığını doğrulamak için, Grafana’da bir sorgu çalıştırarak verilerin geldiğini kontrol edin.

• Örneğin:

mysql_global_status_connections

• Bu sorgu, MariaDB bağlantı sayısını gösterecektir. Eğer sonuç alıyorsanız, Prometheus düzgün çalışıyor demektir.

Şimdilik Grafanayı kurulum yapıp prometheus.yml dosyamızda key-value olarak targetlarımızı ekleyip servisi restart edip grafanada 3000 portundan bu targetlara erişebiliriz.

Üstüne ‘ apt install prometheus-alert manager ‘ eklenerek belirli limitler aşıldığında mail gönderimi yapılabilir ve node exporter yüklenerekte target üzerinden daha fazla veri elde edilebilir.



Alertmanager Kurulumu

Yüklemek için paket yöneticisini kullanalım

sudo apt update
sudo apt install prometheus-alertmanager -y



Servisi başlat:

sudo systemctl enable prometheus-alertmanager
sudo systemctl start prometheus-alertmanager

Alertmanager Konfigürasyonu ( /etc/prometheus.alertmanager.yml)


Gmail SMTP ile mail gönderme ayarı örneği:

global:
  smtp_smarthost: 'smtp.gmail.com:587'
  smtp_from: '[email protected]'
  smtp_auth_username: '[email protected]'
  smtp_auth_password: 'uygulama_şifresi*app_password'
  smtp_require_tls: true

route:
  receiver: 'mail-alert'

receivers:
- name: 'mail-alert'
  email_configs:
  - to: '[email protected]'
    send_resolved: true


Gmail hesabında “uygulama şifresi” oluşturmalısın.


Değişiklik sonrası Alertmanager servisini yeniden başlat:

Prometheus’a Alertmanager Tanıtımı (prometheus.yml içinde)

alerting:
  alertmanagers:
    - static_configs:
        - targets:
            - "localhost:9093"

Targets array’inin altına, olacaksa diğer objelerinizi tanımlayabilirsiniz.

Alarm Tanımlarını Yapma ( etc/prometheus/rules/alert.rules.yml

Aşağıdaki örnek olarak high cpu ve high memory kurallarını verdim. Daha fazlası için aşağıdaki linkten yararlanabilirsiniz.

https://samber.github.io/awesome-prometheus-alerts/rules

groups:
  - name: node_alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 90
        for: 2m
        labels:
          severity: critical
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage is over 90% for more than 2 minutes."

      - alert: HighMemoryUsage
        expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
        for: 2m
        labels:
          severity: warning
        annotations:
          summary: "High memory usage on {{ $labels.instance }}"
          description: "Memory usage is above 90% for more than 2 minutes."



Prometheus’a Alarm Kurallarını Tanıtmak


Prometheus konfig dosyasında (/etc/prometheus/prometheus.yml) aşağıya ekleyin:

rule_files:
  - "/etc/prometheus/rules/alert.rules.yml"

Kurulum sırasında Alınan hata ve çözümleri


Alertmanager servisini başlattığında 

ts=2025-04-20T19:54:20.350Z caller=cluster.go:177 level=warn component=cluster err="couldn't deduce an advertise address: no private IP found, explicit advertise addr not provided"

Çözüm


 /lib/systemd/system/prometheus-alertmanager.service veya custom servis dosyanıza şunu ekleyin:

[Service]
ExecStart=/usr/bin/prometheus-alertmanager --cluster.advertise-address=0.0.0.0:9093

Bir sonraki yazımda aynı kurulumların, Helm Chart ile daha kolay uygulanabildiği ve Kubernetes Cluster içerisinde uygulanışını göstereceğim.

İlgili Makaleler

Bir yanıt yazın

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

Başa dön tuşu