Bir süredir DevOps mühendisliğimin yanısıra SRE olarak da production ortamlarında çalışırken fark ettiğim bir şey vardı: piyasadaki uptime izleme araçlarının büyük çoğunluğu ya çok pahalı, ya harici bir veritabanına bağımlı, ya da kurulumu gereğinden fazla karmaşık. Bu boşluğu kapatmak için self-hosted uptime monitoring yani Observer Lite‘ı geliştirdim.

Observer Lite, tek bir Docker image’ından çalışan, SQLite destekli, tamamen self-hosted bir uptime monitörüdür. E-posta ve Telegram bildirimleri, gerçek zamanlı dashboard, SSL sertifika takibi, API yönetimi ve çok kullanıcılı rol sistemiyle üretime hazır bir araç olarak tasarlandı.
Henüz gerçek ortamlarda test edilmeye başlandığından beklenmedik buglar görülmesi muhtemeldir. Ayrıca şu anki sürüm 0.2.0 yani olgunlaşmamış bir sürümdür. Özellikle stabilite sağlandığı görüldüğünde güvenlik güncellemelerine ağırlık verilecektir.
Ne İzleyebilirsin?
| Monitör Tipi | Kullanım Alanı |
|---|---|
| HTTP GET / POST / HEAD | Web siteleri, API’ler, webhook’lar |
| Ping (ICMP) | Sunucular, iç ağ bileşenleri |
| SSL Sertifikası | Sertifika geçerliliği ve son kullanım tarihi |
| Heartbeat (push-based) | Cron job’lar, worker’lar, batch işlemler |
Öne Çıkan Özellikler
Status Code DSL — Esnek durum kodu ifadeleri: 2xx, !5xx, 200|301, 2xx|!503 gibi desenlerle her senaryoya uygun kural yazabilirsin.
Gerçek Zamanlı Dashboard — WebSocket değil, Server-Sent Events (SSE) kullanan hafif bir dashboard. Ekstra karmaşıklık yok.
Incident State Machine — Ayarladığın retry sayısına ulaşıldığında olay açılır, recovery’de otomatik kapanır; hem down hem de recovery bildirimi gönderir.
Maintenance Windows — Planlı bakım sürelerinde alarmları bastır. Cron tekrarı desteği de var.
Güvenlik — bcrypt parola hash’leme, 15 dakikalık JWT access token + 30 günlük refresh token, SHA-256 ile saklanan API key’ler, SMTP/Telegram şifrelerini AES-128-CBC (Fernet) ile şifreleme, login rate limiting.
Tek Image, Sıfır Bağımlılık — Tüm backend, frontend build’i, scheduler ve migration’lar tek bir Docker image içinde. Dışarıdan herhangi bir veritabanı sunucusu gerekmez.
Teknik Altyapı
Backend: Python 3.12 + FastAPI + SQLAlchemy 2.0 (async) + APScheduler + aiosmtplib
Frontend: Vue 3 + Vite + Tailwind CSS + Pinia + uPlot (40 KB hafif chart kütüphanesi)
Veritabanı: SQLite (WAL modu, foreign key enforcement)
CI/CD: GitHub Actions → GHCR (lint → test → build → publish)
5 Dakikada Çalıştır
bash
docker run -d \
--name observer-lite \
--restart unless-stopped \
-p 3000:3000 \
-v observer_data:/data \
-e SECRET_KEY="$(openssl rand -hex 32)" \
-e DATABASE_PATH="/data/observer.db" \
-e DATABASE_URL="sqlite+aiosqlite:////data/observer.db" \
ghcr.io/cagatayuresin/observer-lite:latestCode language: Bash (bash)
http://localhost:3000 adresini aç, admin / admin ile giriş yap, şifreni değiştir — hepsi bu.
Öğrendiklerim
Bu projeyi geliştirirken en zorlu kısım, APScheduler ve SSE broadcaster’ın process-local singleton yapısı nedeniyle tek worker zorunluluğunu doğru yönetmekti. Horizontal scaling’in önündeki bu kısıt, SQLite’ın single-file doğasıyla birleşince sistem tasarımında bazı trade-off’ları kabul etmek gerekti — ancak self-hosted, hafif kullanım için bu tamamen mantıklı bir seçim.
Test coverage’ı %80’in üzerinde tutmak, pytest-asyncio ile async test yapısını doğru kurmak ve mock’larla APScheduler’ı prod’dan izole etmek de ciddi bir öğrenme süreciydi.
Bağlantılar
- 🔗 GitHub: github.com/cagatayuresin/observer-lite
- 🐳 Docker Image:
ghcr.io/cagatayuresin/observer-lite:latest - 📖 Dokümantasyon: cagatayuresin.github.io/observer-lite
Observer Lite, MIT lisansıyla yayınlanmıştır. Katkı, yıldız ve geri bildirim her zaman memnuniyetle karşılanır.