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şen | Açıklama |
---|---|
Alertmanager | Uyarıları yönetir ve dış sistemlere iletir |
Prometheus | Metrikleri toplar ve alarmları üretir |
Node Exporter | Sunucu metriklerini sağlar |
Gmail SMTP | Alarm 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.:

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.targetArdı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.