Uptime Kuma Nedir: Açık Kaynak Uptime İzleme Aracı
Sunucuların düzgün çalışıp çalışmadığını kontrol etmek için bir zamanlar elle yazılmış bash scriptleri, cron job’lar ve “acaba site açık mıdır” diye tarayıcıyı yenileme döngüleri vardı hayatımızda. Sonra Nagios, Zabbix, Prometheus gibi devler çıktı ama bunların kurulumu ve konfigürasyonu için bazen neredeyse bir tam iş günü harcamak gerekiyordu. Uptime Kuma tam bu noktada devreye giriyor: Basit, güzel arayüzlü, kendi sunucunuzda çalışan ve beş dakikada ayağa kaldırabileceğiniz bir uptime izleme aracı.
Uptime Kuma Nedir?
Uptime Kuma, Louis Lam tarafından geliştirilen ve aktif şekilde topluluk katkısıyla büyüyen açık kaynaklı bir servis izleme aracıdır. Node.js ve Vue.js ile yazılmıştır. Self-hosted çalışır, yani verileriniz sizin sunucunuzdadır. Herhangi bir üçüncü tarafa bağımlılığınız yoktur.
Temel olarak şunları yapabilirsiniz:
- HTTP/HTTPS endpointlerini izlemek
- TCP portlarını kontrol etmek
- Ping ile cihaz erişilebilirliğini ölçmek
- DNS kayıtlarını doğrulamak
- SSL sertifika süresini takip etmek
- Docker container durumlarını izlemek
- Database bağlantılarını kontrol etmek (MySQL, PostgreSQL, Redis, MongoDB)
- Heartbeat izleme ile cron job’larınızın düzenli çalışıp çalışmadığını görmek
Arayüzü gerçekten temiz. Statuspage oluşturabiliyorsunuz, bildirimler için onlarca entegrasyon var (Slack, Telegram, PagerDuty, webhook, e-posta ve daha fazlası). Üstelik tüm bunlar için bir kuruş ödeme yapmıyorsunuz.
Kurulum Yöntemleri
Docker ile Kurulum (Önerilen Yöntem)
Prodüksiyonda Docker olmadan Uptime Kuma kurmak biraz naif olur. Güncelleme kolaylığı, izolasyon ve taşınabilirlik açısından Docker her zaman birinci tercih.
docker run -d
--restart=always
-p 3001:3001
-v uptime-kuma:/app/data
--name uptime-kuma
louislam/uptime-kuma:1
Bu kadar. Gerçekten bu kadar. Tarayıcıdan http://sunucu-ip:3001 adresine girip admin hesabınızı oluşturabilirsiniz.
Docker Compose ile Kurulum
Uzun vadeli yönetim için Docker Compose tercih edin. Özellikle başka servislerle birlikte çalışıyorsanız bu yaklaşım çok daha kontrol edilebilir bir ortam sunar.
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./uptime-kuma-data:/app/data
environment:
- TZ=Europe/Istanbul
networks:
- monitoring
networks:
monitoring:
driver: bridge
docker compose up -d
docker compose logs -f uptime-kuma
TZ=Europe/Istanbul parametresini koymayı unutmayın. Loglar ve bildirimler üzerindeki zaman damgalarının Türkiye saatiyle eşleşmesi ciddi fark yaratır. Prodüksiyonda bir incident sırasında UTC ile TST arasında kafa karışıklığı yaşamak istemezsiniz.
Nginx Reverse Proxy ile SSL Sonlandırma
Port 3001’i doğrudan internete açmayın. Bir reverse proxy arkasına alın.
server {
listen 80;
server_name uptime.sirketiniz.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name uptime.sirketiniz.com;
ssl_certificate /etc/letsencrypt/live/uptime.sirketiniz.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/uptime.sirketiniz.com/privkey.pem;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
WebSocket header’larını (Upgrade ve Connection) eklemeyi es geçmeyin. Uptime Kuma gerçek zamanlı veri güncellemeleri için WebSocket kullanır. Bu header’lar olmadan arayüz donuk görünür, veriler sayfayı yenilemedikçe güncellenmez.
Monitor Türleri ve Gerçek Dünya Kullanımı
HTTP/HTTPS İzleme
En çok kullanılan monitor türü. Bir URL’e GET ya da HEAD isteği gönderir ve dönen HTTP durum kodunu kontrol eder. Ama asıl güç, keyword kontrolünde saklı.
Diyelim ki bir e-ticaret sitesini yönetiyorsunuz. Site 200 dönüyor ama ödeme sayfası bozuk. Standart HTTP monitörü bunu yakalamaz. Keyword monitörü ile /checkout sayfasında “Ödeme Yap” butonunun HTML içinde var olup olmadığını kontrol edebilirsiniz. Bu, “site açık” ile “site gerçekten çalışıyor” arasındaki farkı kapatır.
TCP Port İzleme
Veritabanı portlarını, SMTP sunucularını, özel uygulama portlarını izlemek için kullanılır.
# Uptime Kuma ile izlemek istediğiniz servisleri manuel test etmek isterseniz
nc -zv 10.0.1.50 5432 # PostgreSQL
nc -zv 10.0.1.50 6379 # Redis
nc -zv 10.0.1.50 27017 # MongoDB
Bu portlar Uptime Kuma arayüzünde TCP türü monitor olarak eklendiğinde, her kontrol intervalinde bağlantı denemesi yapılır.
Heartbeat Monitörleri
Bu özellik pek çok kişinin gözden kaçırdığı ama gerçekten değerli bir şey. Senaryo şu: Bir cron job var, her gece veritabanı yedeği alıyor. Cron çalışmayı bıraktığında nasıl haberdar olacaksınız? Cron’un kendisini izlemek karmaşıklaşır. Heartbeat monitörü ile iş tersine çevrilir; cron job, Uptime Kuma’ya “ben buradayım” diye sinyal gönderir. Belirlenen sürede sinyal gelmezse alarm tetiklenir.
# Cron job'ın sonuna eklenecek satır
# Push URL'yi Uptime Kuma'dan "Push" tipinde monitor oluştururken alırsınız
curl -fsS --retry 3 "https://uptime.sirketiniz.com/api/push/AbCdEfGhIj?status=up&msg=OK&ping="
# Bir yedekleme scriptinin sonuna entegre örnek
#!/bin/bash
PUSH_URL="https://uptime.sirketiniz.com/api/push/AbCdEfGhIj"
# Yedekleme işlemi
pg_dump -U postgres mydb > /backup/mydb_$(date +%Y%m%d).sql
if [ $? -eq 0 ]; then
curl -fsS "${PUSH_URL}?status=up&msg=Yedekleme+basarili&ping="
else
curl -fsS "${PUSH_URL}?status=down&msg=Yedekleme+basarisiz&ping="
fi
Docker Container İzleme
Uptime Kuma’yı Docker socket’e erişimli çalıştırırsanız, aynı host üzerindeki container’ların durumunu izleyebilirsiniz.
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: always
ports:
- "3001:3001"
volumes:
- ./uptime-kuma-data:/app/data
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- TZ=Europe/Istanbul
:ro ile Docker socket’i read-only bağlamak güvenlik açısından iyi bir pratik. Container isimlerini Uptime Kuma’da Docker Container türü monitor olarak eklediğinizde, container’ın çalışıp çalışmadığını görebilirsiniz.
Bildirim Entegrasyonları
Telegram Bildirimleri
Telegram, Türkiye’deki ekiplerin tercih ettiği kanalların başında geliyor. Kurulumu da oldukça basit.
- BotFather ile yeni bir bot oluşturun, token alın
- Bota bir mesaj gönderin, sonra
https://api.telegram.org/bot/getUpdatesadresinden chat ID’nizi bulun - Uptime Kuma’da Settings > Notifications > Telegram bölümüne token ve chat ID’yi girin
Grup kanallarına bildirim göndermek de mümkün. Birden fazla kişinin takip etmesi gereken kritik altyapı için bir Telegram grubu oluşturun ve bot’u o gruba ekleyin. Tüm ekip anlık haberdar olur.
Webhook ile Özel Entegrasyon
Uptime Kuma’nın webhook desteği, kendi iç sistemlerinize veya Mattermost gibi self-hosted chat araçlarına entegrasyon için güçlü bir seçenek.
# Webhook'un gönderdiği payload örneği - test etmek için
curl -X POST https://your-webhook-endpoint.com/alert
-H "Content-Type: application/json"
-d '{
"heartbeat": {
"status": 0,
"time": "2024-01-15 14:30:00",
"msg": "Connection refused"
},
"monitor": {
"name": "Production API",
"url": "https://api.sirketiniz.com/health"
}
}'
Status Page Oluşturmak
Uptime Kuma’nın en sevdiğim özelliklerinden biri status page. Tek tıkla, müşterilerinize veya iç ekibinize gösterebileceğiniz temiz bir durum sayfası oluşturabilirsiniz.
Status page oluşturmak için:
- Sol menüden “Status Page” seçin
- “New Status Page” butonuna tıklayın
- Sayfa adı ve slug belirleyin (örneğin
status.sirketiniz.com) - İzlemek istediğiniz monitor’ları ekleyin
- Logo, renk ve açıklama özelleştirmesi yapın
Status page için custom domain kullanmak istiyorsanız, nginx konfigürasyonuna yeni bir server block ekleyip proxy_pass’ı http://localhost:3001/status/slug-adiniz olarak ayarlamanız yeterli.
Müşterilerinizden önce siz haberdar olmak istiyorsunuz elbette, ama bir şey patladığında müşterilerin “site mi çöktü yoksa internet bağlantım mı bozuk” sorusunu status page ile yanıtlamış olursunuz. Destek ekiplerinize gelen gereksiz çağrı sayısı ciddi oranda düşer.
Güvenlik ve Erişim Kontrolü
Temel Güvenlik Önlemleri
Uptime Kuma kurulu sunucunuzun dışarıya sadece 80 ve 443 portları açık olmalı. 3001 portunu doğrudan internete açmayın.
# UFW ile port kısıtlaması
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw deny 3001/tcp
ufw enable
ufw status verbose
Uptime Kuma kendi içinde kullanıcı adı/şifre yönetimi sunuyor ama 2FA (Two-Factor Authentication) desteği de var. Özellikle Uptime Kuma arayüzü internete açıksa 2FA’yı aktif edin.
Güvenilir IP Listesi ile Kısıtlama
Eğer Uptime Kuma’ya sadece belirli IP adreslerinden erişilmesini istiyorsanız, nginx level’ında bunu kısıtlayabilirsiniz:
server {
listen 443 ssl http2;
server_name uptime.sirketiniz.com;
# Sadece ofis IP ve VPN IP'ye izin ver
allow 203.0.113.50;
allow 10.8.0.0/24;
deny all;
location / {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
Yedekleme ve Güncelleme Stratejisi
Veri Yedekleme
Tüm Uptime Kuma verisi SQLite database’inde tutulur, /app/data dizininde. Volume mount ettiğiniz için bu dizin host’unuzda bulunuyor.
#!/bin/bash
# uptime-kuma-backup.sh
BACKUP_DIR="/opt/backups/uptime-kuma"
DATA_DIR="/opt/uptime-kuma-data"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# Container'ı kısa süreliğine durdur, tutarlı yedek al
docker stop uptime-kuma
cp -r "$DATA_DIR" "$BACKUP_DIR/uptime-kuma-data-$DATE"
tar -czf "$BACKUP_DIR/uptime-kuma-$DATE.tar.gz" -C "$BACKUP_DIR" "uptime-kuma-data-$DATE"
rm -rf "$BACKUP_DIR/uptime-kuma-data-$DATE"
docker start uptime-kuma
# 30 günden eski yedekleri sil
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete
echo "Yedekleme tamamlandi: uptime-kuma-$DATE.tar.gz"
Güncelleme Prosedürü
# Mevcut container'ı durdur ve sil
docker stop uptime-kuma
docker rm uptime-kuma
# Son image'ı çek
docker pull louislam/uptime-kuma:1
# Container'ı yeniden başlat (veri volume'u korunur)
docker run -d
--restart=always
-p 3001:3001
-v uptime-kuma:/app/data
--name uptime-kuma
louislam/uptime-kuma:1
# Logları kontrol et
docker logs -f uptime-kuma
Docker Compose kullanıyorsanız daha da basit:
docker compose pull
docker compose up -d
docker compose logs -f uptime-kuma
Gerçek Dünya Senaryosu: Küçük Ölçekli SaaS Altyapısı
Bir senaryoyu somutlaştıralım. On farklı müşteriye SaaS çözümü sunan, Türkiye merkezli küçük bir yazılım şirketi düşünün. Altyapıda şunlar var:
- 3 uygulama sunucusu
- 2 veritabanı sunucusu (master/slave)
- 1 Redis cache sunucusu
- 1 Elasticsearch node’u
- 10 müşteri için ayrı subdomain’ler
- Gece çalışan 5 kritik cron job
Bu altyapı için Uptime Kuma’da şunları tanımlayabilirsiniz:
HTTP Monitörleri:
- Her müşteri subdomain’i için health check endpoint’i (10 adet)
- API gateway health endpoint’i
- Admin paneli erişilebilirliği
TCP Monitörleri:
- Master PostgreSQL port 5432
- Slave PostgreSQL port 5432
- Redis port 6379
- Elasticsearch port 9200
Ping Monitörleri:
- Tüm sunucular için ICMP ping (temel erişilebilirlik)
Heartbeat Monitörleri:
- Gece yedekleme cron job’u
- Fatura oluşturma cron job’u
- E-posta kuyruğu işleme job’u
- Veri senkronizasyon job’u
- Log temizleme job’u
Docker Container Monitörleri:
- Uygulama container’larının durumu
Toplam 25 ile 30 arası monitor oluyor. Uptime Kuma bu kadar monitor’ü rahatlıkla kaldırır, performans sorunu yaşamazsınız. Her müşteri için ayrı bir status page oluşturabilir, müşterilere kendi subdomain’leri üzerinden sunum yapabilirsiniz.
Sık Karşılaşılan Sorunlar
Monitor’ler yanlış DOWN bildirimi gönderiyor: Timeout süresini artırın. Bazı endpointler yavaş yanıt verebilir. Default 30 saniye genellikle yeterli ama yavaş başlayan Java uygulamaları için bu değeri 60 saniyeye çıkarmak gerekebilir.
SSL sertifika uyarıları çok erken geliyor: Uptime Kuma default olarak sertifikanın bitmesine 14 gün kala uyarı verir. Bu değeri monitor ayarlarından değiştirebilirsiniz. Let’s Encrypt kullananlar için 7 gün yeterli ama kurumsal sertifika kullananlar için 30 gün önceden uyarı almak mantıklı.
Docker socket izinleri: Uptime Kuma container’ının Docker socket’e erişimi yoksa “permission denied” hatası alırsınız. Container’ı docker grubuna üye bir kullanıcıyla çalıştırın ya da --group-add parametresini kullanın.
Çok fazla bildirim geliyor (notification spam): Resend interval ve retry count ayarlarını düzenleyin. Bir servis down olduğunda her 30 saniyede tekrar bildirim geliyorsa bu alarm yorgunluğuna yol açar. DOWN bildirimi bir kez gelsin yeterli, UP bildirimi de bir kez. Resend interval’i 0 yaparak tekrar bildirimlerini kapatabilirsiniz.
Sonuç
Uptime Kuma, “bütçem kısıtlı ama profesyonel izleme istiyorum” diyenlerin aracı. Datadog veya New Relic’in aylık faturasına ödeme yapamayan ya da yapmak istemeyenlere gerçek bir alternatif sunuyor. Beş dakikada kurulumu, temiz arayüzü, güçlü bildirim sistemi ve aktif geliştirme süreci ile kendini kanıtlamış bir araç.
Elbette sınırlılıkları var. Metrik toplama yapmıyor, log analizi yok, uygulama performansı için APM özellikleri beklemeyin. Bunlar için Prometheus ve Grafana ikilisi ya da başka özel araçlar gerekir. Ama “servislerim ayakta mı, SSL’im ne zaman sona eriyor, cron job’larım düzenli çalışıyor mu” sorularının yanıtı için Uptime Kuma fazlasıyla yeterli.
Self-hosted izleme altyapısı kurmak isteyenler için önerim şu sırayla gitmek: Önce Uptime Kuma ile başlayın, stabilitesi ve değeri kanıtlanmış bir araç. Sonra ihtiyaçlar büyüdükçe Grafana ve Prometheus ekleyin. En son APM ve log yönetimini kapsama dahil edin. Büyük bir altyapıyı hemen tek seferde izlemeye çalışmak yerine katmanlı bir yaklaşım hem öğrenme eğrisini yönetilebilir tutar hem de her aracın değerini daha net görmenizi sağlar.
