Uptime Kuma ile Web Sitesi İzleme - Self-Hosted Monitoring Deneyimlerim
Merhabalar,
Son zamanlarda kendi projelerimin uptime’ını izlemek için bir sürü araç denedim. Uptime Robot, Pingdom gibi servisleri kullandım ama hep bir eksiklik hissettim. Sonra Uptime Kuma ile tanıştım ve gerçekten memnun kaldım. Bu yazımda sizlere neden Uptime Kuma’yı tercih ettiğimi, nasıl kurduğumu ve hangi projelerimde kullandığımı anlatacağım.
Uptime Kuma Nedir ve Neden Kullanıyorum?
Uptime Kuma, Louis Lam tarafından geliştirilen açık kaynak kodlu bir uptime monitoring aracı. Node.js ve Vue.js ile yazılmış ve kendi sunucunuza kurabiliyorsunuz. Ben yaklaşık 1 senedir kullanıyorum ve gerçekten memnunum.
🐻 Neden “Kuma”?
Aslında Kuma (クマ/熊), Japonca’da “ayı” demek. Küçük bir ayının web sitenizi koruyarak izlediğini düşünün, sevimli değil mi?
Neden Diğer Araçlar Yerine Uptime Kuma?
Açıkçası Uptime Robot’u kullanıyordum önceden. Güzel bir servis ama free plan’da 5 dakika interval var. Pingdom’u da denedim, o da ücretli. Uptime Kuma ile kendi sunucuma kuruyorum, verilerim bende kalıyor ve tamamen ücretsiz kullanabiliyorum.
En Sevdiğim Özellikleri
📊 Monitoring Türleri: HTTP/HTTPS, TCP port, ping, DNS, Docker container, hatta push monitoring bile var 🔔 Bildirimler: 90+ farklı servis desteği - Slack, Discord, Telegram, email vs.
🎨 Modern Arayüz: Dark/light mode, responsive tasarım 📈 Gerçek Zamanlı: WebSocket ile anlık güncellemeler 🆓 Tamamen Ücretsiz: Açık kaynak, kendi sunucunuzda çalıştırın
Uptime Kuma vs Diğer Araçlar - Karşılaştırmam
Ben şimdiye kadar birkaç monitoring aracı kullandım. Karşılaştırmamı paylaşayım:
Özellik | Uptime Kuma | Uptime Robot | Pingdom | StatusCake |
---|---|---|---|---|
Maliyet | Ücretsiz 🟢 | Freemium | Ücretli 🔴 | Freemium |
Self-hosted | ✅ | ❌ | ❌ | ❌ |
Açık Kaynak | ✅ | ❌ | ❌ | ❌ |
Check Interval | 20 saniye 🟢 | 5 dakika | 1 dakika | 1 dakika |
Data Privacy | Tam Kontrol 🟢 | Sınırlı | Sınırlı | Sınırlı |
Custom Branding | ✅ | Ücretli | Ücretli | Ücretli |
Neden Uptime Kuma’yı Tercih Ediyorum?
✅ Artıları:
- Verilerim kendi sunucumda kalıyor
- Sınırsız monitor ekleyebiliyorum
- Kaynak koda erişebiliyorum (özelleştirme için)
- Sadece hosting maliyeti var
- Tek komutla kurulum
⚠️ Dezavantajları:
- Kendi sunucunuzu yönetmeniz gerekiyor
- Biraz teknik bilgi gerekli (ama zor değil)
- Kendi uptime’ınızı sağlamalısınız
Kurulum - Ben Nasıl Yaptım?
Ben Digital Ocean’da 5 dolarlık bir droplet’a kurdum. Gayet yeterli geliyor şu ana kadar.
Docker ile Kurulum (En Kolay Yöntem)
Docker kullanmanızı şiddetle tavsiye ederim. Ben de öyle yaptım:
1
2
3
4
5
6
7
# Tek komutla çalışır hale getirme
docker run -d \
--restart=always \
-p 3001:3001 \
-v uptime-kuma:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:1
Docker Compose ile Kurulum (Benim Tercihim)
Ben production’da docker-compose kullanıyorum, daha kolay yönetim için:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# docker-compose.yml
version: '3.8'
services:
uptime-kuma:
image: louislam/uptime-kuma:1
container_name: uptime-kuma
restart: unless-stopped
ports:
- "3001:3001"
volumes:
- uptime-kuma:/app/data
environment:
- NODE_ENV=production
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001"]
interval: 30s
timeout: 10s
retries: 3
volumes:
uptime-kuma:
driver: local
1
2
3
4
5
# Çalıştırma
docker-compose up -d
# Log kontrol
docker-compose logs -f uptime-kuma
İlk Kurulum Ayarları
Kurulum bittikten sonra http://your-server:3001
adresine gidiyorsunuz. İlk giriş yaptığınızda:
- Admin kullanıcı adı ve şifre belirliyorsunuz
- Temel ayarları yapıyorsunuz
- İlk monitor’ünüzü ekliyorsunuz
Ben güvenlik için hemen 2FA’yı aktif ettim, tavsiye ederim.
İzleme Türleri - Hangi Projelerimde Kullanıyorum?
Uptime Kuma’da bir sürü monitoring türü var. Ben en çok bunları kullanıyorum:
1. Web Sitesi İzleme
Kişisel blogumu izlemek için:
1
2
3
4
5
6
7
8
9
10
// Basit web sitesi monitor ayarlarım
{
"name": "Blog Sitesi",
"type": "http",
"url": "https://muminkoykiran.github.io",
"interval": 60, // 1 dakika
"timeout": 10,
"expectedStatus": [200],
"keyword": "Blog" // Sayfada bu kelime var mı kontrol ediyor
}
2. API İzleme
Projelerimde kullandığım API’leri izliyorum:
1
2
3
4
5
6
7
8
9
10
11
12
13
// API health check örneği
{
"name": "Proje API",
"type": "http",
"url": "https://api.myproject.com/health",
"method": "GET",
"headers": {
"Authorization": "Bearer my-token"
},
"expectedStatus": [200],
"keyword": "healthy",
"interval": 120 // 2 dakika
}
3. Database İzleme
PostgreSQL veritabanımı port üzerinden kontrol ediyorum:
1
2
3
4
5
6
7
8
9
// Database bağlantı kontrolü
{
"name": "PostgreSQL DB",
"type": "port",
"hostname": "db.myproject.com",
"port": 5432,
"timeout": 10,
"interval": 300 // 5 dakika
}
4. Docker Container İzleme
Sunucumdaki containerları izliyorum:
1
2
3
4
5
6
7
{
"name": "Nginx Container",
"type": "docker",
"dockerContainer": "nginx",
"dockerHost": "unix:///var/run/docker.sock",
"interval": 120
}
5. Cron Job İzleme (Push Monitoring)
Bu özellik gerçekten harika! Backup scriptlerimin çalışıp çalışmadığını kontrol ediyorum:
1
2
3
4
5
6
7
8
9
10
11
# Backup script'imin sonuna ekledim
# 0 2 * * * /backup-script.sh && curl "https://uptime.mydomain.com/api/push/MY_TOKEN?status=up&msg=Backup%20OK"
# Monitor ayarı
{
"name": "Daily Backup",
"type": "push",
"pushToken": "unique-push-token",
"interval": 86400, // 24 saat
"timeout": 300
}
Bildirim Ayarları - Hangi Servisleri Kullanıyorum?
Bildirim sistemi gerçekten çok zengin. 90’dan fazla servis desteği var. Ben şu anlara kadar bunları denedim:
1. Slack Entegrasyonu
Ekip çalışmalarında Slack kullanıyoruz, oraya bildirim göndermek çok pratik:
1
2
3
4
5
6
7
8
9
// Slack webhook ayarlarım
{
"type": "slack",
"slackWebhookURL": "https://hooks.slack.com/services/YOUR/WEBHOOK/URL",
"slackChannel": "#alerts",
"slackUsername": "Uptime Kuma",
"sendUp": true,
"sendDown": true
}
2. Email Bildirimleri
Gmail SMTP kullanarak email bildirimleri alıyorum:
1
2
3
4
5
6
7
8
9
10
11
12
{
"type": "smtp",
"smtpHost": "smtp.gmail.com",
"smtpPort": 587,
"smtpSecure": true,
"smtpUsername": "[email protected]",
"smtpPassword": "app-specific-password", // Gmail'de app password oluşturmanız gerekiyor
"emailFrom": "[email protected]",
"emailTo": "[email protected]",
"sendUp": true,
"sendDown": true
}
3. Telegram Botu
Kişisel projelerim için Telegram bot kullanıyorum, çok hızlı:
1
2
3
4
5
6
7
{
"type": "telegram",
"telegramBotToken": "BOT_TOKEN", // @BotFather'dan alıyorsunuz
"telegramChatID": "CHAT_ID", // Chat ID'nizi öğrenmeniz gerekiyor
"sendUp": true,
"sendDown": true
}
4. Discord Webhook
Discord kullanıyorsanız çok kolay entegre olur:
1
2
3
4
5
6
7
8
{
"type": "discord",
"discordWebhookUrl": "WEBHOOK_URL",
"discordUsername": "Uptime Monitor",
"discordPrefixMessage": "@everyone", // Acil durumlar için herkesi etiketler
"sendUp": true,
"sendDown": true
}
5. Custom Webhook
Kendi sistemlerime entegre etmek için webhook kullanıyorum:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"type": "webhook",
"webhookURL": "https://my-api.com/webhook/uptime",
"webhookContentType": "application/json",
"webhookCustomBody": {
"service": "{monitor_name}",
"status": "{status}",
"message": "{msg}",
"timestamp": "{heartbeat_time}"
},
"webhookHeaders": {
"Authorization": "Bearer my-secret-token"
}
}
Status Page Oluşturma
Status page özelliği gerçekten güzel. Müşterilerinize servislerinizin durumunu gösterebiliyorsunuz.
Basit Status Page Kurulumu
Ben kendi projelerim için böyle bir sayfa oluşturdum:
1
2
3
4
5
6
# Status page ayarlarım
Title: "Servis Durumu"
Description: "Projelerimizin anlık durumu"
Theme: "auto" # Otomatik dark/light
ShowTags: true
ShowPoweredBy: false # Uptime Kuma logosunu gizle
Nginx ile Custom Domain
Status page’i kendi domain’ime bağladım. Nginx konfigürasyonu:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# /etc/nginx/sites-available/status.mydomain.com
server {
listen 80;
server_name status.mydomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name status.mydomain.com;
ssl_certificate /etc/letsencrypt/live/status.mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/status.mydomain.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;
}
}
Let’s Encrypt ile SSL sertifikası:
1
sudo certbot --nginx -d status.mydomain.com
Backup ve Güvenlik
Otomatik Backup Script’im
Ben her gece otomatik backup alıyorum. Basit bir script yazdım:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/bin/bash
# backup-uptime-kuma.sh
BACKUP_DIR="/backups/uptime-kuma"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Container'ı durdur
docker stop uptime-kuma
# Database'i yedekle
docker cp uptime-kuma:/app/data/kuma.db $BACKUP_DIR/kuma_${DATE}.db
# Container'ı başlat
docker start uptime-kuma
echo "Backup tamamlandı: kuma_${DATE}.db"
Crontab’a ekledim:
1
2
# Her gece saat 02:00'da backup al
0 2 * * * /scripts/backup-uptime-kuma.sh
Güvenlik Ayarları
Firewall kurallarım:
1
2
3
# Sadece yerel ağdan erişime izin ver
sudo ufw allow from 192.168.1.0/24 to any port 3001
sudo ufw deny 3001
2FA’yı mutlaka aktif edin! Settings > Security kısmından yapabiliyorsunuz.
Yaşadığım Sorunlar ve Çözümleri
Memory Problemi
Başlarda biraz memory problemi yaşamıştım. Çok fazla monitor eklemiştim ve container memory tüketiyordu. Docker compose’da limit koydum:
1
2
3
4
5
6
deploy:
resources:
limits:
memory: 512M
reservations:
memory: 256M
WebSocket Bağlantı Sorunu
Nginx arkasında çalıştırırken WebSocket bağlantıları kopuyordu. Şu ayarları ekleyince düzeldi:
1
2
3
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
False Positive Alarmlar
Başlarda çok fazla false positive alarm alıyordum. Timeout’ları biraz artırdım ve retry ayarları yaptım. Şimdi çok daha stabil.
API Kullanımı
REST API’si de var. Monitor eklemek/çıkarmak için kullanabiliyorsunuz:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Monitor listesini alma
curl -X GET "https://my-uptime.com/api/monitors" \
-H "Authorization: Bearer API_TOKEN"
# Yeni monitor ekleme
curl -X POST "https://my-uptime.com/api/monitors" \
-H "Authorization: Bearer API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Yeni Web Sitesi",
"type": "http",
"url": "https://example.com",
"interval": 60
}'
Push API’si de çok kullanışlı:
1
2
# Cron job'lardan status gönderme
curl "https://my-uptime.com/api/push/PUSH_TOKEN?status=up&msg=OK"
Performans Optimizasyonu
Monitor Interval’larını Akıllıca Ayarlama
Ben şöyle bir strateji izliyorum:
1
2
3
4
5
// Monitor türlerine göre interval'larım
Kritik servisler: 30 saniye // Ana web sitesi, API
Normal servisler: 60 saniye // Blog, static siteler
Database'ler: 120 saniye // PostgreSQL, Redis
Backup job'lar: 24 saat // Günlük backup kontrolleri
Database Optimizasyonu
SQLite kullanıyorum (default). Performans için şu ayarları yaptım:
1
2
3
4
-- SQLite optimizasyon
PRAGMA journal_mode = WAL;
PRAGMA synchronous = NORMAL;
PRAGMA cache_size = 10000;
Container Resource Limitleri
1
2
3
4
5
6
7
8
9
# docker-compose.yml
deploy:
resources:
limits:
cpus: '0.5'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
Gerçek Dünya Kullanım Örnekleri
Kişisel Projelerim İçin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Blogumu izliyorum
{
name: "Blog",
url: "https://muminkoykiran.github.io",
interval: 300, // 5 dakika
keyword: "Blog"
}
// Portfolio sitemin API'si
{
name: "Portfolio API",
url: "https://api.myportfolio.com/health",
interval: 120,
headers: {"Authorization": "Bearer token"}
}
Müşteri Projeleri İçin
E-ticaret sitesi monitörlügüm:
1
2
3
4
5
6
7
8
// Ana site
{name: "E-ticaret Ana Sayfa", url: "https://shop.com", interval: 60}
// Ödeme sistemi
{name: "Ödeme API", url: "https://shop.com/api/payment/health", interval: 30}
// Veritabanı
{name: "MySQL", type: "port", hostname: "db.shop.com", port: 3306, interval: 180}
Sonuç ve Tavsiyelerim
Uptime Kuma’yı 1 senedir kullanıyorum ve gerçekten memnunum. Özellikle self-hosted olması ve açık kaynak olması çok büyük avantaj.
✅ En Çok Sevdiğim Özellikler
- Tamamen Ücretsiz: Sadece hosting maliyeti var
- Kolay Kurulum: Docker ile 5 dakikada kuruyorsunuz
- Zengin Bildirim Desteği: 90+ servis entegrasyonu
- Modern Arayüz: Gerçekten güzel ve kullanışlı
- Veri Kontrolü: Verilerim bende kalıyor
🚀 Kimler Kullanmalı?
- Kendi projelerini izlemek isteyen geliştiriciler
- Privacy konusunda hassas olan kişiler/şirketler
- Sınırsız monitor sayısına ihtiyacı olanlar
- Özelleştirme yapmak isteyenler
- Maliyet konusunda hassas olan startup’lar
⚠️ Dikkat Edilmesi Gerekenler
- Kendi sunucunuzu yönetmeniz gerekiyor
- Backup stratejinizi oluşturmalısınız
- Temel Docker/Linux bilgisi gerekli
- Kendi monitoring sisteminin uptime’ını da düşünmelisiniz
Benim Tavsiyelerim
- Docker Compose kullanın - Yönetimi çok daha kolay
- 2FA’yı aktif edin - Güvenlik için şart
- Backup almayı unutmayın - SQLite database’i her gece yedekleyin
- Reverse proxy kullanın - SSL ve domain için
- Monitor interval’larını akıllıca ayarlayın - Gereksiz yere server’ı yormayin
Gelecek Planlarım
Ben şu anda tek server’da çalıştırıyorum ama yakında high availability setup yapmayı planlıyorum. Bir de Prometheus entegrasyonu ile Grafana dashboard’u oluşturmak istiyorum.
Eğer sizde web sitesi monitoring aracı arıyorsanız, Uptime Kuma’yı denemenizi kesinlikle tavsiye ederim. Özellikle kendi verilerinizin kontrolünde kalmasını istiyorsanız mükemmel bir çözüm.
Sorularınız olursa yorumlarda belirtebilirsiniz, elimden geldiğince cevaplamaya çalışırım!
Kaynaklar: