Prometheus ve Grafana ile Sunucu Monitoring Rehberi
zafer ak
Yazar
Prometheus ve Grafana, modern altyapı monitoring'inin temel araçlarıdır. Bu rehberde kapsamlı bir monitoring sistemi kurmayı öğreneceksiniz.
Prometheus Nedir?
Prometheus, time-series veritabanı tabanlı bir monitoring ve alerting sistemidir:
- Pull-based: Hedeflerden metrik çeker
- Multi-dimensional: Label tabanlı veri modeli
- PromQL: Güçlü sorgulama dili
- Alerting: Entegre alert yönetimi
- Service discovery: Otomatik hedef keşfi
Prometheus Kurulumu
# İndirme
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvfz prometheus-*.tar.gz
cd prometheus-*
# Yapılandırma
cat > prometheus.yml <<EOF
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
EOF
# Başlat
./prometheus --config.file=prometheus.yml
Systemd Service
# /etc/systemd/system/prometheus.service
[Unit]
Description=Prometheus
After=network.target
[Service]
User=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.listen-address=:9090
Restart=always
[Install]
WantedBy=multi-user.target
Node Exporter
Sunucu metriklerini toplamak için Node Exporter kurulumu:
# İndirme
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-*.tar.gz
# Başlat
./node_exporter
# Systemd service
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
Prometheus Yapılandırması
# prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
rule_files:
- "rules/*.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets:
- 'server1:9100'
- 'server2:9100'
- 'server3:9100'
labels:
env: 'production'
- job_name: 'nginx'
static_configs:
- targets: ['localhost:9113']
PromQL Sorguları
# CPU kullanımı
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Bellek kullanımı
(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100
# Disk kullanımı
(1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) * 100
# Network I/O
rate(node_network_receive_bytes_total[5m])
rate(node_network_transmit_bytes_total[5m])
# HTTP istek oranı
rate(http_requests_total[5m])
# Hata oranı
sum(rate(http_requests_total{status=~"5.."}[5m])) / sum(rate(http_requests_total[5m]))
Alert Rules
# rules/alerts.yml
groups:
- name: node_alerts
rules:
- alert: HighCPUUsage
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
for: 5m
labels:
severity: warning
annotations:
summary: "High CPU usage on {{ $labels.instance }}"
description: "CPU usage is above 80% for 5 minutes"
- alert: HighMemoryUsage
expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 > 90
for: 5m
labels:
severity: critical
annotations:
summary: "High memory usage on {{ $labels.instance }}"
- alert: DiskSpaceLow
expr: (1 - (node_filesystem_avail_bytes / node_filesystem_size_bytes)) * 100 > 85
for: 10m
labels:
severity: warning
annotations:
summary: "Disk space low on {{ $labels.instance }}"
Grafana Kurulumu
# Ubuntu/Debian
sudo apt-get install -y apt-transport-https software-properties-common
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install grafana
# Başlat
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
# Erişim: http://localhost:3000
# Default: admin/admin
Grafana Datasource
- Configuration > Data Sources
- Add data source > Prometheus
- URL: http://localhost:9090
- Save & Test
Dashboard Oluşturma
Grafana panellerinde kullanılabilecek sorgular:
# CPU Panel
100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
# Memory Panel
node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes
# Disk I/O Panel
rate(node_disk_read_bytes_total[5m])
rate(node_disk_written_bytes_total[5m])
# Network Panel
rate(node_network_receive_bytes_total{device="eth0"}[5m])
rate(node_network_transmit_bytes_total{device="eth0"}[5m])
Hazır Dashboardlar
Grafana Dashboard ID'leri (Import ile):
- Node Exporter Full: 1860
- Node Exporter Quickstart: 11074
- Nginx: 9614
- MySQL: 7362
- PostgreSQL: 9628
Sonuç
Prometheus ve Grafana kombinasyonu, altyapınızı görselleştirmek ve proaktif monitoring yapmak için mükemmel bir çözümdür. Alert yapılandırması ile sorunları erkenden tespit edebilirsiniz.