Evdeki sunucuda koşan DNS servisi sessizce çöktüğünde ve mobil uygulamamın backend’i saatlerce dış dünyaya kapalı kaldığında, monitoring işini sadece “ara sıra tarayıcıdan bakma” seviyesinde bırakamayacağımı anladım. Homelab izleme (monitoring) altyapısı, sistemlerinizin sağlığını anlık olarak gözlemlemek ve olası kesintileri büyümeden yakalamak için Uptime Kuma + Grafana ikilisini bir araya getirerek kurulur. Uptime Kuma, servislerin ayakta olup olmadığını (liveness) kontrol eden hafif ve kullanıcı dostu bir araçken, Grafana bu verileri geçmişe dönük trend analizleri, sistem kaynak tüketimleri ve gelişmiş panellerle birleştirerek tam bir gözlemlenebilirlik (observability) sağlar. Bu rehberde, homelab ortamınızdaki tüm servisleri tek bir merkezden nasıl izleyeceğinizi, verileri nasıl anlamlı panellere dönüştüreceğinizi ve sinsi sistem hatalarını nasıl yakalayacağınızı adım adım anlatıyorum.
Bir sunucunun ayakta olması, üzerindeki servislerin doğru çalıştığı anlamına gelmez. Ping isteklerine yanıt veren bir makine, arkadaki veritabanı bağlantısı koptuğu için kullanıcılara 500 hatası döndürüyor olabilir. İşte bu yüzden sadece “sunucu açık mı” sorusunu değil, “servislerim gerçekten işlevini yerine getiriyor mu” sorusunu sormamız gerekiyor. Uptime Kuma ve Grafana entegrasyonu, bu iki sorunun da cevabını tek bir ekranda birleştirerek homelab veya küçük ölçekli üretim altyapınızda tam hakimiyet kurmanızı sağlar.
Uptime Kuma + Grafana Neden En İyi İkilidir?
Uptime Kuma + Grafana kombinasyonu, hafiflik ile derinlemesine analizi birleştiren en dengeli izleme çözümüdür. Sadece Grafana ve Prometheus kullanmaya kalktığınızda, basit bir HTTP durum kontrolü (uptime check) için Blackbox Exporter yapılandırmak, karmaşık YAML dosyalarıyla uğraşmak ve her yeni servis için Prometheus’u yeniden yüklemek gerekir. Uptime Kuma ise web arayüzü üzerinden saniyeler içinde yeni bir HTTP, TCP, DNS veya gRPC kontrolü eklemenize izin verir. Ancak Kuma’nın zayıf kaldığı nokta, verileri uzun vadeli saklama, korelasyon ve gelişmiş görselleştirmedir.
Grafana’yı bu denkleme dahil ettiğimizde, Uptime Kuma’nın pratikliğini Grafana’nın sınırsız görselleştirme ve metrik birleştirme gücüyle taçlandırmış oluruz. Uptime Kuma, topladığı tüm durum verilerini Prometheus formatında dışa aktarabilir (export). Bu sayede homelab sunucunuzun CPU, RAM ve disk sıcaklığı gibi donanım metriklerini topladığınız Grafana paneline, servislerinizin anlık erişilebilirlik durumlarını da ekleyebilirsiniz. Tek bir ekranda hem donanımın yükünü hem de yazılımın yanıt süresini görmek, bir performans darboğazı yaşandığında sorunun kaynağını (root cause) bulmayı ciddi oranda kolaylaştırır.
graph TD; A["Servisler (HTTP/TCP/DNS)"] --> B["Uptime Kuma (Durum Kontrolü)"] B -->|Prometheus Metrics Endpoint| C["Prometheus (Metrik Toplayıcı)"] D["Sistem Metrikleri (Node Exporter)"] --> C C --> E["Grafana Dashboard"] B -->|Anlık Bildirim| F["Telegram / Discord / Pushover"]
Docker Compose ile Uptime Kuma + Grafana Altyapısı Nasıl Kurulur?
Sistemleri yönetirken her servisi tek tek bare-metal kurmak yerine, Docker Compose kullanarak izole ve taşınabilir bir stack oluşturmayı tercih ediyorum. Bu yaklaşım, yarın bir gün homelab sunucusunu taşımak istediğimde veya tüm izleme altyapısını sıfırlamam gerektiğinde bana inanılmaz bir esneklik sağlıyor. Kurulumuzda Uptime Kuma, Prometheus (metrikleri toplamak için) ve Grafana servislerini tek bir docker-compose.yml dosyasında birleştireceğiz.
Aşağıdaki yapılandırma, servislerin birbirleriyle güvenli bir şekilde konuşabilmesi için izole bir Docker ağı (bridge network) kullanır ve verilerin kalıcı olması için volume tanımlarını içerir:
version: '3.8'
networks:
monitoring:
driver: bridge
volumes:
uptime-kuma-data:
prometheus-data:
grafana-data:
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
volume:
- uptime-kuma-data:/app/data
ports:
- "3001:3001"
networks:
- monitoring
restart: always
prometheus:
image: prom/prometheus:latest
container_name: prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus-data:/prometheus
ports:
- "9090:9090"
networks:
- monitoring
restart: always
grafana:
image: grafana/grafana:latest
container_name: grafana
volumes:
- grafana-data:/var/lib/grafana
ports:
- "3000:3000"
networks:
- monitoring
restart: always
Bu dosyayı sunucunuzda /opt/monitoring gibi bir dizine kaydettikten sonra, Prometheus’un Uptime Kuma’dan verileri çekebilmesi için bir yapılandırma dosyası oluşturmamız gerekiyor. Docker Compose dosyasının yanına prometheus.yml adında bir dosya açın ve aşağıdaki temel ayarları ekleyin.
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'uptime-kuma'
metrics_path: '/metrics'
static_configs:
- targets: ['uptime-kuma:3001']
Uptime Kuma Metrikleri Prometheus Formatında Grafana’ya Nasıl Aktarılır?
Altyapıyı ayağa kaldırdıktan sonra, Uptime Kuma’nın ürettiği durum verilerini Prometheus üzerinden Grafana’ya aktarma aşamasına geçebiliriz. Uptime Kuma varsayılan olarak /metrics endpoint’ini aktif sunar, ancak güvenlik nedeniyle veya yapılandırma gereği bunu kontrol etmek isteyebilirsiniz. Tarayıcınızdan http://<sunucu-ip>:3001 adresine giderek ilk kurulum adımlarını tamamlayın.
Uptime Kuma arayüzüne girdikten sonra sağ üstteki profil resminize tıklayıp Settings > API & Keys (veya kurulu sürüme göre doğrudan ayarlar menüsündeki arama kısmından “Prometheus”) bölümüne gidin. Burada Prometheus entegrasyonunun aktif olduğunu ve herhangi bir kimlik doğrulama (auth) gerektirip gerektirmediğini doğrulayın. Eğer her şey yolundaysa, http://<sunucu-ip>:3001/metrics adresine tarayıcıdan gittiğinizde aşağıdaki gibi Prometheus formatında metrik satırları görmelisiniz:
# HELP monitor_status Monitor Status (1 = UP, 0 = DOWN, 2 = PENDING)
# TYPE monitor_status gauge
monitor_status{id="1",name="Home-DNS",type="dns",url="192.168.1.1"} 1
# HELP monitor_response_time Monitor Response Time (ms)
# TYPE monitor_response_time gauge
monitor_response_time{id="1",name="Home-DNS",type="dns",url="192.168.1.1"} 12
Şimdi bu verileri Prometheus’a çekmek için terminalden docker compose up -d komutunu çalıştırarak tüm stack’i başlatın. Prometheus arayüzüne (http://<sunucu-ip>:9090) giderek Status > Targets menüsünü kontrol edin. Eğer uptime-kuma hedefinin yanında yeşil renkli UP durumunu görüyorsanız, metrik toplama işlemi başarıyla başlamış demektir. Grafana tarafında ise tek yapmamız gereken, veri kaynağı (Data Source) olarak Prometheus’u eklemek ve http://prometheus:9090 adresini göstermektir.
Grafana Üzerinde Dashboard Tasarımı Nasıl Yapılır?
Veriler Prometheus’a akmaya başladıktan sonra, Grafana üzerinde anlamlı ve tek bakışta sistemin durumunu özetleyen bir dashboard tasarlayabiliriz. Grafana arayüzüne (http://<sunucu-ip>:3000) varsayılan admin/admin bilgileriyle giriş yapın ve şifrenizi güncelleyin. Sol menüden Connections > Data Sources yolunu izleyerek “Add data source” butonuna tıklayın ve Prometheus’u seçin. URL alanına http://prometheus:9090 yazıp en alttaki “Save & test” butonuna basarak bağlantıyı doğrulayın.
Sıfırdan bir panel tasarlamak yerine, Uptime Kuma için topluluk tarafından hazırlanmış hazır şablonları kullanabilirsiniz. Grafana Dashboard kütüphanesinde yer alan 14191 veya 15234 ID’li hazır paneller bu iş için biçilmiş kaftandır. Yeni bir dashboard oluşturmak için sağ üstteki + ikonuna tıklayıp Import seçeneğini seçin, ID alanına bu numaralardan birini yazıp yükleyin.
Eğer kendi özel panelinizi tasarlamak isterseniz, kullanabileceğiniz en kritik PromQL (Prometheus Query Language) sorguları şunlardır:
1. Servislerin Anlık Durumu (Stat Paneli)
Sistemdeki servislerin kaçının ayakta, kaçının ayakta olmadığını gösteren bir özet panel için şu sorguyu kullanabilirsiniz:
monitor_status == 1
Bu sorgunun sonucunu Grafana’da “Stat” görselleştirmesiyle eşleştirip, değer 1 ise yeşil (UP), 0 ise kırmızı (DOWN) olacak şekilde renk eşikleri (thresholds) tanımlayabilirsiniz.
2. Ortalama Yanıt Süreleri (Graph Paneli)
Servislerin ağ gecikmelerini veya yanıt sürelerindeki dalgalanmaları izlemek için “Time Series” panelinde şu sorguyu koşturun:
monitor_response_time
Bu grafik sayesinde, örneğin her gün akşam saatlerinde yerel ağınızdaki gateway cihazının yanıt süresinin neden arttığını, internet servis sağlayıcınızın (ISP) peering sorunlarını veya sunucu üzerindeki disk yoğunluğunu analiz edebilirsiniz.
Kesinti Anında Bildirim Altyapısı Nasıl Kurgulanır?
Monitoring sistemlerinin en büyük hatası, bir sorun olduğunda bunu sadece ekranda göstermesidir; çünkü hiç kimse 24 saat boyunca bir dashboard ekranına bakmaz. Uptime Kuma bu konuda inanılmaz esnek bir bildirim (notification) motoruna sahiptir. Telegram, Discord, Pushover, Slack, Webhook ve hatta yerel SMS gateway entegrasyonları kutudan çıktığı gibi desteklenir.
Benim homelab ortamında en çok tercih ettiğim yöntem, Telegram Bot API üzerinden anlık bildirimler almak. Bunu kurmak için şu adımları izliyorum:
- Telegram’da
@BotFatherile konuşarak yeni bir bot oluşturun ve size verdiği API Token’ı kopyalayın. - Botun size mesaj atabilmesi için kendi chat ID’nizi öğrenin (bunun için
@userinfobotkullanabilirsiniz). - Uptime Kuma arayüzünde Settings > Notification bölümüne gidip “Setup Notification” butonuna tıklayın.
- Notification Type olarak Telegram seçin, Bot Token ve Chat ID alanlarını doldurun.
- “Test” butonuna basarak telefonunuza test mesajının geldiğini doğrulayın.
[Home-DNS] [🔴 Down]
Connection timeout.
Time: 2026-07-05 14:32:10 UTC
Uptime Kuma üzerinden bildirim kurmanın en büyük avantajı, Grafana’nın karmaşık alarm kurallarıyla (alerting rules) uğraşmadan, doğrudan servis bazlı hassas ayarlar yapabilmenizdir. Örneğin, geçici ağ dalgalanmalarında boş yere alarm almamak için “Retries” (Yeniden Deneme) değerini 2 veya 3 yapabilirsiniz. Böylece servis sadece ardışık 3 kontrolde de başarısız olursa telefonunuza bildirim düşer.
Homelab İzlerken Hangi Sinsi Tuzaklara Dikkat Edilmelidir?
Sistemleri izlemeye başladığınızda, yanlış yapılandırmalar nedeniyle sistemin kendisini çökertebilecek veya sizi yanlış yönlendirebilecek bazı sinsi tuzaklar vardır. 20 yıllık saha deneyimimde, monitoring sisteminin kendisinin bir problem kaynağı haline geldiği pek çok senaryo gördüm. Homelab ortamınızı tasarlarken şu üç tuzağa karşı uyanık olmalısınız:
1. DNS Negative Caching Belası
Uptime Kuma bir servisi izlerken alan adını (FQDN) çözer. Eğer yerel DNS sunucunuz (örneğin Pi-hole veya AdGuard Home) geçici olarak çökerse, Uptime Kuma bu alan adını çözemez ve servisi “Down” olarak işaretler. DNS sunucusu ayağa kalksa bile, sistemdeki DNS resolver’lar olumsuz yanıtı önbelleğe aldığı için (negative caching) servisleriniz aslında çalışıyor olmasına rağmen uzun süre “Down” görünmeye devam edebilir.
Çözüm: Uptime Kuma üzerinde kritik servisleri izlerken, alan adı yerine doğrudan statik IP adresleri üzerinden TCP port kontrolü yapmayı tercih edin veya Uptime Kuma container’ının DNS sunucusu olarak doğrudan güvenilir bir dış DNS (örneğin 1.1.1.1) kullanmasını sağlayın.
2. Disk Alanı Yangınları (Docker Log Bloat)
Prometheus varsayılan ayarlarıyla bırakıldığında, topladığı metrikleri diskte sonsuza kadar saklamaya çalışabilir. Homelab sunucularında genellikle sınırlı kapasiteye sahip SSD’ler kullanılır. Eğer Prometheus’un veri saklama politikasını (retention) sınırlamazsanız, birkaç ay içinde disk dolacak ve tüm Docker container’larınız No space left on device hatasıyla çökecektir.
Çözüm: Prometheus’un disk kullanımını kontrol altında tutmak için Docker Compose dosyasındaki prometheus servisine şu komut parametrelerini (args) ekleyin:
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--storage.tsdb.retention.time=15d' # Verileri sadece 15 gün sakla
- '--storage.tsdb.retention.size=5GB' # Disk kullanımı 5 GB'ı geçmesin
3. İzleme Sisteminin Kendisini İzleyememek (Who Watches the Watchmen?)
Tüm servislerinizi homelab sunucunuzun içindeki Uptime Kuma ile izliyorsanız, sunucunun elektriği kesildiğinde veya internet bağlantınız tamamen koptuğunda ne olur? Cevap basit: Hiçbir şey olmaz. Telefonunuza hiçbir bildirim gelmez, çünkü bildirimi gönderecek olan sistemin kendisi de elektriksiz kalmıştır. Bu duruma sistem mimarisinde “tek hata noktası” (Single Point of Failure - SPOF) denir.
Çözüm: Gerçek anlamda dış dünya erişilebilirliğini ölçmek ve homelabınızın tamamen internet bağlantısının koptuğunu anlamak için, çok ucuz veya ücretsiz katmandaki harici bir VPS (Virtual Private Server) üzerinde çalışan ikincil bir Uptime Kuma kurun. Bu dış sunucu, evdeki modemin dış IP adresini veya dinamik DNS (DDNS) adresinizi izlesin. Evde internet koptuğu anda, dışarıdaki sunucu bunu fark edip size Telegram üzerinden “Ev İnterneti Çöktü” bildirimi gönderecektir.
Sonuç
Uptime Kuma ve Grafana entegrasyonu, homelab dünyasında “çalışıyor sanıyordum” yanılgısını ortadan kaldıran en pratik yatırımlardan biridir. Bu kurulum sayesinde sadece servislerin anlık durumunu görmekle kalmaz, aynı zamanda geçmişe dönük performans analizleri yaparak donanım limitlerinizi de keşfedersiniz.
Bir sonraki adım olarak, homelab sunucunuza Node Exporter kurarak CPU sıcaklığı, fan hızları ve disk sağlık durumlarını (smartctl) Prometheus’a aktarabilir ve hazırladığınız bu Grafana paneline entegre edebilirsiniz. Unutmayın, izlenmeyen sistem yönetilmiyor demektir.