Gönderi

Uptime Kuma ile Web Sitesi İzleme - Self-Hosted Monitoring Deneyimlerim

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?

Comparison Table Visual

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

Architecture Diagram

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:

ÖzellikUptime KumaUptime RobotPingdomStatusCake
MaliyetÜcretsiz 🟢FreemiumÜcretli 🔴Freemium
Self-hosted
Açık Kaynak
Check Interval20 saniye 🟢5 dakika1 dakika1 dakika
Data PrivacyTam 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?

Installation Process Diagram

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:

  1. Admin kullanıcı adı ve şifre belirliyorsunuz
  2. Temel ayarları yapıyorsunuz
  3. İ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:

Notification Services Grid

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.

Status Page Example

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

Monitoring Types Illustration

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

  1. Tamamen Ücretsiz: Sadece hosting maliyeti var
  2. Kolay Kurulum: Docker ile 5 dakikada kuruyorsunuz
  3. Zengin Bildirim Desteği: 90+ servis entegrasyonu
  4. Modern Arayüz: Gerçekten güzel ve kullanışlı
  5. 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

  1. Docker Compose kullanın - Yönetimi çok daha kolay
  2. 2FA’yı aktif edin - Güvenlik için şart
  3. Backup almayı unutmayın - SQLite database’i her gece yedekleyin
  4. Reverse proxy kullanın - SSL ve domain için
  5. 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:

Bu gönderi CC BY 4.0 lisansı altındadır.