Monitoring ve Bakım
Cron Görevleri
| Sıklık | Script | Açıklama |
|---|---|---|
| Her 5dk | health-check.sh | RAM, swap, disk, API yanıt süresi |
| Her 15dk | container-monitor.sh | Container sağlık, TimescaleDB job'ları, Redis bellek |
| Günlük 00:00 | cleanup-docker.sh | Dangling image, build cache, volume temizliği |
| Günlük 00:05 | pg-slow-query-snapshot.sh | PostgreSQL yavaş sorgu raporu |
| Günlük 06:00 | Log rotation | 10MB üstü log dosyalarını kırp |
Yardımcı Script'ler
| Script | Açıklama |
|---|---|
setup-ssl.sh | Let's Encrypt SSL kurulumu (certbot + cron) |
generate-emqx-certs.sh | Self-signed sertifika (development) |
generate_firmware_signing_key.py | ECDSA P-256 firmware imzalama anahtarı |
quick-backend-deploy.sh | Rebuild olmadan hızlı backend deploy |
init_minio.py | MinIO bucket init (zeus-firmwares, versioning, 90 gün lifecycle) |
cleanup-docker.sh | Docker disk temizliği |
Telegram Alert
.env dosyasına TELEGRAM_BOT_TOKEN ve TELEGRAM_CHAT_ID ekleyerek alert'leri otomatik alabilirsiniz.
Prometheus Metrikleri
Backend (FastAPI)
- Endpoint:
/metrics - Kütüphane:
prometheus_clientASGI app olarak mount edilmiştir - Toplanan metrikler:
- HTTP istek sayısı ve süresi — endpoint, method ve status code bazında
- Aktif bağlantı sayısı — eşzamanlı istek takibi
- Python GC istatistikleri — garbage collection döngü sayıları ve süreleri
- İşlem bilgileri — CPU kullanımı, bellek (RSS/VMS), açık dosya tanımlayıcı sayısı
Modbus Poller
- Endpoint:
http://localhost:8085/metrics - Port: 8085
- Toplanan metrikler:
- Polling döngü sayısı ve süresi — cihaz ve grup bazında
- Modbus hata sayısı — timeout, CRC hatası, slave hatası ayrımı
- MQTT publish sayısı ve süresi — başarılı/başarısız ayrımı
- Kuyruk doluluk oranı — TelemetryQueue backpressure izleme
Scrape Yapılandırması (Prometheus)
# prometheus.yml
scrape_configs:
- job_name: 'zeus-backend'
metrics_path: /metrics
static_configs:
- targets: ['backend:8000']
- job_name: 'zeus-modbus-poller'
metrics_path: /metrics
static_configs:
- targets: ['modbus-poller:8085']
Alert Eşik Değerleri Önerisi
Aşağıdaki tabloda altyapı ve uygulama metrikleri için önerilen warning ve critical eşik değerleri yer almaktadır. Bu değerler Telegram alert sistemi veya Prometheus Alertmanager ile entegre edilebilir.
| Metrik | Warning | Critical | Açıklama |
|---|---|---|---|
| RAM kullanımı | >%80 | >%95 | Sistem bellek doluluk oranı |
| Disk kullanımı | >%80 | >%95 | Kök ve veri bölümü disk doluluk oranı |
| API yanıt süresi (p95) | >2s | >10s | Backend endpoint yanıt süresi |
| MQTT queue boyutu | >1000 mesaj | >5000 mesaj | EMQX broker mesaj kuyruğu |
| Celery queue bekleme | >50 task | >200 task | Redis'teki bekleyen Celery görevleri |
| TimescaleDB chunk boyutu | >5GB | >10GB | Tek bir hypertable chunk'ının disk boyutu |
| Container restart sayısı | >2/saat | >5/saat | Docker container beklenmeyen yeniden başlatma |
| PostgreSQL bağlantı havuzu | >%80 dolu | >%95 dolu | asyncpg connection pool doluluk oranı |
| MQTT client disconnect oranı | >%10/dk | >%30/dk | Gateway bağlantı kopma oranı |
Alert Konfigürasyon Örneği
# health-check.sh içinde Telegram alert tetikleme
RAM_USAGE=$(free | awk '/Mem/ {printf "%.0f", $3/$2 * 100}')
if [ "$RAM_USAGE" -gt 95 ]; then
send_telegram "CRITICAL: RAM kullanımı %${RAM_USAGE}"
elif [ "$RAM_USAGE" -gt 80 ]; then
send_telegram "WARNING: RAM kullanımı %${RAM_USAGE}"
fi