Prometheus ve Grafana ile Sunucu Monitoring Rehberi

z

zafer ak

Yazar

29 December 2025 4 dakika okuma 490 görüntülenme
Prometheus ve Grafana ile Sunucu Monitoring Rehberi
Prometheus ve Grafana ile kapsamlı monitoring sistemi kurulumu. Metrik toplama, alert yapılandırması ve dashboard oluşturma.

Prometheus ve Grafana, modern altyapı monitoring'inin temel araçlarıdır. Bu rehberde kapsamlı bir monitoring sistemi kurmayı öğreneceksiniz.

Monitoring Dashboard

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
Server Metrics

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 Dashboard

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

  1. Configuration > Data Sources
  2. Add data source > Prometheus
  3. URL: http://localhost:9090
  4. 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.

İlgili Yazılar