Node Exporter Kurulumu: Sistem Metriklerini Prometheus ile Toplama

Prometheus kurulumunu tamamladınız, Grafana’yı ayarladınız ama dashboardlarınız hala boş görünüyor. İşte tam bu noktada Node Exporter devreye giriyor. Prometheus’un kendi başına sistem metriklerini toplayamadığını, bunun için ayrı bir “exporter” bileşenine ihtiyaç duyduğunu anlamak, izleme altyapısının en kritik adımını kavramak demektir. Bu yazıda Node Exporter’ı sıfırdan kuracak, yapılandıracak ve gerçek dünya senaryolarında nasıl kullanacağınızı öğreneceksiniz.

Node Exporter Nedir ve Neden Gereklidir?

Node Exporter, Linux sistemlerinde CPU kullanımı, bellek durumu, disk I/O, ağ trafiği ve çok daha fazlasını Prometheus’un anlayabileceği formatta sunan bir araçtır. Prometheus mimarisinde “pull” modeli kullanılır; yani Prometheus, metrikleri kendisi çekmeye gelir. Node Exporter ise bu metrikleri hazırlayıp /metrics endpoint’inde bekletir.

Bir sunucuda neler olduğunu anlamak için top, htop veya vmstat gibi araçları kullanabilirsiniz. Ancak bunlar anlık görüntü sunar ve tarihsel analiz yapmanıza olanak tanımaz. Node Exporter ile birlikte Prometheus ve Grafana üçlüsünü kurduğunuzda, geçen hafta Salı gecesi saat 03:00’te neden CPU spike yaşandığını, hangi diskin dolmak üzere olduğunu ve ağ trafiğinin hangi saatlerde pik yaptığını görebilirsiniz.

Ön Gereksinimler

Bu rehber Ubuntu 22.04 ve CentOS/RHEL 8+ üzerinde test edilmiştir. Aynı adımlar Debian tabanlı ve RPM tabanlı diğer dağıtımlarda da büyük ölçüde geçerlidir.

Başlamadan önce şunların hazır olduğundan emin olun:

  • Prometheus kurulu ve çalışıyor olmalı (önceki yazıya bakın)
  • Sudo yetkisine sahip bir kullanıcı
  • İzlemek istediğiniz her sunucuda Node Exporter kurulacak
  • 9100 portuna erişim (Node Exporter varsayılan portu)

Node Exporter İndirme ve Kurulum

Sistem Kullanıcısı Oluşturma

Güvenlik açısından Node Exporter’ı ayrı bir sistem kullanıcısıyla çalıştırmak en iyi pratiktir. Bu kullanıcının login shell’e ihtiyacı yok.

sudo useradd --no-create-home --shell /bin/false node_exporter

Binary İndirme

Prometheus’un GitHub releases sayfasından en güncel versiyonu indirin. Bu yazıyı yazdığım sırada 1.7.0 güncel sürümdü.

cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz

# İndirilen dosyanın bütünlüğünü kontrol edin
sha256sum node_exporter-1.7.0.linux-amd64.tar.gz

SHA256 checksum değerini GitHub releases sayfasındaki sha256sums dosyasıyla karşılaştırın. Production ortamında bu adımı asla atlamayın.

tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo cp node_exporter-1.7.0.linux-amd64/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

# Temizlik
rm -rf /tmp/node_exporter-1.7.0.linux-amd64*

Systemd Servis Dosyası Oluşturma

Node Exporter’ı sistem servisi olarak tanımlamak, sunucu yeniden başladığında otomatik olarak ayağa kalkmasını sağlar.

sudo nano /etc/systemd/system/node_exporter.service

Aşağıdaki içeriği dosyaya yapıştırın:

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target

[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter 
    --collector.systemd 
    --collector.processes 
    --web.listen-address=0.0.0.0:9100 
    --web.telemetry-path=/metrics

Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

Servisi etkinleştirip başlatın:

sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
sudo systemctl status node_exporter

Çıktıda Active: active (running) görüyorsanız kurulum başarılı demektir.

Metriklerin Doğrulanması

Node Exporter’ın çalıştığını ve metrikleri sunduğunu doğrulayalım:

curl http://localhost:9100/metrics | head -50

Bu komut yüzlerce metrik satırı döndürecektir. Birkaç örnek:

# HELP node_cpu_seconds_total Seconds the CPUs spent in each mode.
# TYPE node_cpu_seconds_total counter
node_cpu_seconds_total{cpu="0",mode="idle"} 12345.67
node_cpu_seconds_total{cpu="0",mode="system"} 234.56
node_memory_MemAvailable_bytes 4294967296
node_filesystem_avail_bytes{...} 107374182400

Belirli bir metriği filtrelemek için grep kullanabilirsiniz:

# Sadece bellek metriklerini görüntüle
curl -s http://localhost:9100/metrics | grep "^node_memory"

# Disk metriklerini görüntüle
curl -s http://localhost:9100/metrics | grep "^node_filesystem"

Güvenlik Duvarı Yapılandırması

Node Exporter, Prometheus sunucusundan erişilebilir olmalı ama internete açık olmamalıdır. Sadece Prometheus sunucusunun IP adresinden 9100 portuna erişime izin verin.

Ubuntu/Debian (UFW) için:

# Sadece Prometheus sunucusunun erişimine izin ver
sudo ufw allow from 192.168.1.100 to any port 9100

# Durumu kontrol et
sudo ufw status

CentOS/RHEL (firewalld) için:

sudo firewall-cmd --permanent --new-zone=prometheus
sudo firewall-cmd --permanent --zone=prometheus --add-source=192.168.1.100
sudo firewall-cmd --permanent --zone=prometheus --add-port=9100/tcp
sudo firewall-cmd --reload

192.168.1.100 yerine kendi Prometheus sunucunuzun IP adresini yazın. Birden fazla Prometheus sunucunuz varsa her biri için ayrı rule ekleyin.

Prometheus’a Node Exporter Hedefi Ekleme

Prometheus, Node Exporter’ı hedef olarak tanımalı ki metrikleri çekebilsin. Prometheus sunucusundaki yapılandırma dosyasını düzenleyin:

sudo nano /etc/prometheus/prometheus.yml

scrape_configs bölümüne yeni bir job ekleyin:

global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'node_exporter'
    static_configs:
      - targets:
          - '192.168.1.101:9100'  # web sunucusu
          - '192.168.1.102:9100'  # veritabanı sunucusu
          - '192.168.1.103:9100'  # uygulama sunucusu
    labels:
      environment: 'production'

Prometheus yapılandırmasını yeniden yükleyin:

sudo systemctl reload prometheus

# Ya da SIGHUP gönderin
sudo kill -HUP $(pidof prometheus)

Prometheus web arayüzünde Status > Targets menüsünden tüm hedeflerin UP durumunda olduğunu doğrulayın.

Önemli Collector’lar ve Yapılandırması

Node Exporter, varsayılan olarak etkin olan ve isteğe bağlı olarak açılabilen çok sayıda collector içerir.

Varsayılan Olarak Etkin Collector’lar

En sık kullandığınız metrik grupları şunlardır:

  • cpu: CPU kullanım modları (user, system, idle, iowait, nice, irq, softirq)
  • meminfo: Bellek kullanımı, swap durumu, buffer/cache bilgileri
  • filesystem: Disk kullanımı, inode sayıları, mount noktaları
  • diskstats: Disk okuma/yazma hızları, I/O latency
  • netdev: Ağ arayüzü istatistikleri, paket sayıları, hata oranları
  • loadavg: 1, 5 ve 15 dakikalık load average değerleri
  • stat: Sistem geneli istatistikler, boot zamanı, context switch sayısı
  • time: Sistem saati ve NTP senkronizasyon durumu
  • uname: Kernel versiyonu ve sistem bilgileri

İsteğe Bağlı Collector’lar

Bazı collector’lar performans etkisi nedeniyle varsayılan olarak kapalıdır:

  • –collector.systemd: Systemd servislerinin durumunu izler
  • –collector.processes: Çalışan process sayısı ve durumları
  • –collector.tcpstat: TCP bağlantı durumları (TIME_WAIT, ESTABLISHED vb.)
  • –collector.interrupts: CPU interrupt istatistikleri

Systemd collector ile servislerinizin çöküp çökmediğini otomatik olarak izleyebilirsiniz. Bu özellikle kritik servislerin uptime’ını takip etmek için çok kullanışlıdır.

Belirli Collector’ları Devre Dışı Bırakma

Kullanmadığınız collector’ları kapatmak hem performans kazandırır hem de gereksiz veri toplanmasını önler:

/usr/local/bin/node_exporter 
    --no-collector.arp 
    --no-collector.bcache 
    --no-collector.buddyinfo 
    --collector.systemd 
    --collector.processes

Gerçek Dünya Senaryosu: Çoklu Sunucu Ortamı

Diyelim ki 10 sunuculu bir altyapınız var. Her sunucuya tek tek gidip Node Exporter kurmak yerine Ansible ile bunu otomatize edebilirsiniz.

# ansible/roles/node_exporter/tasks/main.yml içeriğini elle uygulamak için
# Bu script ile tüm sunuculara kurulum yapabilirsiniz

#!/bin/bash
SERVERS="web01 web02 db01 db02 app01 app02"
NODE_EXPORTER_VERSION="1.7.0"

for SERVER in $SERVERS; do
    echo "Installing Node Exporter on $SERVER..."
    ssh -o StrictHostKeyChecking=no deploy@$SERVER << EOF
        # Kullanıcı oluştur
        sudo useradd --no-create-home --shell /bin/false node_exporter 2>/dev/null || true
        
        # Binary indir ve kur
        cd /tmp
        wget -q https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
        tar xf node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
        sudo cp node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64/node_exporter /usr/local/bin/
        sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
        rm -rf /tmp/node_exporter*
        
        echo "Node Exporter installed on $SERVER"
EOF
    echo "Done: $SERVER"
done

Textfile Collector ile Özel Metrik Ekleme

Node Exporter’ın en güçlü özelliklerinden biri textfile collector‘dır. Kendi script’lerinizin ürettiği metrikleri Node Exporter aracılığıyla Prometheus’a besleyebilirsiniz.

Önce textfile dizini oluşturun:

sudo mkdir -p /var/lib/node_exporter/textfile_collector
sudo chown node_exporter:node_exporter /var/lib/node_exporter/textfile_collector

Servis dosyasına textfile collector parametresini ekleyin:

ExecStart=/usr/local/bin/node_exporter 
    --collector.textfile.directory=/var/lib/node_exporter/textfile_collector 
    --collector.systemd 
    --collector.processes

Şimdi örnek bir custom metrik script’i yazalım. Bu script son backup zamanını ve backup dosya boyutunu raporlasın:

#!/bin/bash
# /usr/local/bin/backup_metrics.sh

BACKUP_DIR="/backup"
OUTPUT_FILE="/var/lib/node_exporter/textfile_collector/backup.prom"

# Son backup dosyasını bul
LAST_BACKUP=$(ls -t $BACKUP_DIR/*.tar.gz 2>/dev/null | head -1)

if [ -n "$LAST_BACKUP" ]; then
    BACKUP_TIME=$(stat -c %Y "$LAST_BACKUP")
    BACKUP_SIZE=$(stat -c %s "$LAST_BACKUP")
    BACKUP_AGE=$(($(date +%s) - BACKUP_TIME))
    
    cat > $OUTPUT_FILE << METRICS
# HELP backup_last_timestamp Unix timestamp of the last backup
# TYPE backup_last_timestamp gauge
backup_last_timestamp $BACKUP_TIME
# HELP backup_last_size_bytes Size of the last backup in bytes
# TYPE backup_last_size_bytes gauge
backup_last_size_bytes $BACKUP_SIZE
# HELP backup_age_seconds Age of the last backup in seconds
# TYPE backup_age_seconds gauge
backup_age_seconds $BACKUP_AGE
METRICS
else
    echo "backup_last_timestamp 0" > $OUTPUT_FILE
fi

Bu script’i cron ile her saat çalıştırın:

chmod +x /usr/local/bin/backup_metrics.sh

# Crontab'a ekle
echo "0 * * * * root /usr/local/bin/backup_metrics.sh" | sudo tee /etc/cron.d/backup_metrics

Yararlı PromQL Sorguları

Node Exporter kurulumunu tamamladıktan sonra Prometheus’ta şu sorguları kullanabilirsiniz:

CPU kullanım yüzdesi:

100 - (avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

Kullanılabilir bellek yüzdesi:

(node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100

Disk kullanım yüzdesi:

100 - ((node_filesystem_avail_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"}) * 100)

Ağ trafiği (bytes/saniye):

rate(node_network_receive_bytes_total{device!="lo"}[5m])

Disk I/O latency:

rate(node_disk_io_time_seconds_total[5m])

Bu sorguları Grafana’da paneller oluşturmak için kullanabilirsiniz.

Sorun Giderme

Node Exporter başlamıyor

# Detaylı log çıktısı için
sudo journalctl -u node_exporter -f

# Port çakışması kontrolü
sudo ss -tlnp | grep 9100

# Binary çalıştırma yetkisi
ls -la /usr/local/bin/node_exporter

Prometheus hedeflere ulaşamıyor

# Node Exporter'ın doğru IP'de dinlediğini kontrol et
sudo ss -tlnp | grep 9100

# Prometheus sunucusundan bağlantı testi
curl -v http://HEDEF_IP:9100/metrics

# Güvenlik duvarı kurallarını kontrol et
sudo iptables -L INPUT -n -v | grep 9100

Bazı metrikler görünmüyor

# Etkin collector listesini görüntüle
curl -s http://localhost:9100/metrics | grep "^# HELP" | cut -d' ' -f3 | sort

# systemd collector için gerekli izinler
sudo usermod -aG systemd-journal node_exporter
sudo systemctl restart node_exporter

Güvenliği Artırma: TLS ve Basic Auth

Production ortamında Node Exporter’a TLS ve kimlik doğrulama eklemek iyi bir pratiktir. Node Exporter 1.5.0’dan itibaren bu özellik built-in olarak gelir.

Konfigürasyon dosyası oluşturun:

sudo nano /etc/node_exporter/config.yml
tls_server_config:
  cert_file: /etc/node_exporter/tls.crt
  key_file: /etc/node_exporter/tls.key

basic_auth_users:
  prometheus: $2y$10$hashedpasswordhere

Şifreyi hash’lemek için:

# htpasswd aracı ile (apache2-utils paketi gerekli)
htpasswd -nBC 10 "" | tr -d ':n'

Servis dosyasını güncelleyin:

ExecStart=/usr/local/bin/node_exporter 
    --web.config.file=/etc/node_exporter/config.yml 
    --collector.systemd 
    --collector.processes

Prometheus tarafında da kimlik bilgilerini tanımlamanız gerekir:

scrape_configs:
  - job_name: 'node_exporter'
    scheme: https
    tls_config:
      ca_file: /etc/prometheus/ca.crt
    basic_auth:
      username: prometheus
      password: yourpassword
    static_configs:
      - targets: ['192.168.1.101:9100']

Sonuç

Node Exporter, Prometheus tabanlı izleme altyapısının temel taşlarından biridir. Kurulumu görece basit olsa da doğru yapılandırılması, güvenliğinin sağlanması ve textfile collector ile genişletilmesi, izleme sisteminizi gerçekten kullanışlı hale getirir.

Önemli noktalara toplu bakalım:

  • Node Exporter’ı her zaman ayrı bir sistem kullanıcısıyla çalıştırın
  • 9100 portunu sadece Prometheus sunucunuza açın, internete asla
  • Textfile collector ile özel metriklerinizi sisteme entegre edin
  • Production ortamında TLS ve basic auth kullanmayı ihmal etmeyin
  • --collector.systemd ve --collector.processes collector’larını etkinleştirin, çok değerli veriler sağlarlar
  • Çok sayıda sunucunuz varsa kurulumu Ansible veya benzeri bir araçla otomatize edin

Bir sonraki yazıda Grafana’da Node Exporter metriklerini kullanarak dashboard oluşturacak, CPU, bellek ve disk için alert kuralları yazacak ve bu bildirimler ile PagerDuty veya Slack entegrasyonu yapacağız. Node Exporter’ı kurduktan sonra veri akmaya başlayacak ve asıl eğlence grafiklerin şekillendiği o an başlayacak.

Benzer Konular

Bir yanıt yazın

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