Ana içeriğe geç

Monitoring ve Bakım

Cron Görevleri

SıklıkScriptAçıklama
Her 5dkhealth-check.shRAM, swap, disk, API yanıt süresi
Her 15dkcontainer-monitor.shContainer sağlık, TimescaleDB job'ları, Redis bellek
Günlük 00:00cleanup-docker.shDangling image, build cache, volume temizliği
Günlük 00:05pg-slow-query-snapshot.shPostgreSQL yavaş sorgu raporu
Günlük 06:00Log rotation10MB üstü log dosyalarını kırp

Yardımcı Script'ler

ScriptAçıklama
setup-ssl.shLet's Encrypt SSL kurulumu (certbot + cron)
generate-emqx-certs.shSelf-signed sertifika (development)
generate_firmware_signing_key.pyECDSA P-256 firmware imzalama anahtarı
quick-backend-deploy.shRebuild olmadan hızlı backend deploy
init_minio.pyMinIO bucket init (zeus-firmwares, versioning, 90 gün lifecycle)
cleanup-docker.shDocker disk temizliği

Telegram Alert

.env dosyasına TELEGRAM_BOT_TOKEN ve TELEGRAM_CHAT_ID ekleyerek alert'leri otomatik alabilirsiniz.


Host-level İzleme Script'leri (Issue #261)

scripts/monitoring/checks/ altında, host seviyesinde derinlemesine kaynak ve veritabanı izleme yapan 4 yardımcı script bulunur. Bu script'ler Linux PSI, OOM event'leri, PostgreSQL temp file kullanımı ve TimescaleDB hypertable chunk büyümesini takip eder. Her biri tek başına cron ile periyodik olarak çalıştırılabilir; çıktısı log dosyasına yazılır ve eşik aşıldığında Telegram alert tetiklenir.

ScriptAmaçKaynakÖnerilen Cron
temp-files-check.shPostgreSQL temp file kullanımıpg_stat_database (temp_files, temp_bytes)Her 30 dk
chunk-count-snapshot.shTimescaleDB hypertable chunk sayımıtimescaledb_information.chunksGünlük 02:00
host-psi-monitor.shLinux memory pressure (PSI)/proc/pressure/memoryHer 5 dk
oom-killer-monitor.shOOM killer event sayımıdmesg | grep -i oomHer 15 dk

Script Davranışları

  • temp-files-check.shdevice_measurements, daily_energy_summaries gibi büyük tablolarda spill-to-disk olup olmadığını izler. Ardışık iki snapshot arasındaki delta'yı raporlar. Yüksek temp file artışı work_mem ayarının yetersiz olduğuna işaret eder.
  • chunk-count-snapshot.sh — Kritik hypertable'ların chunk sayısını günlük olarak kaydeder: ocpp_meter_samples, device_measurements, daily_energy_summaries. Beklenmedik chunk patlamasında compression veya retention policy gözden geçirilir.
  • host-psi-monitor.shsome avg10 ve full avg10 değerlerini okur. some > 10% veya full > 5% durumunda warning, full > 15% durumunda critical alert gönderir. Container OOM kill öncesi erken uyarı sağlar.
  • oom-killer-monitor.sh — Son 15 dakika içinde Out of memory: Killed process event'lerini sayar. >0 her durumda critical alert.

Cron Örneği

*/5  * * * * /opt/zeus/scripts/monitoring/checks/host-psi-monitor.sh
*/15 * * * * /opt/zeus/scripts/monitoring/checks/oom-killer-monitor.sh
*/30 * * * * /opt/zeus/scripts/monitoring/checks/temp-files-check.sh
0 2 * * * /opt/zeus/scripts/monitoring/checks/chunk-count-snapshot.sh

SQLAlchemy Pool Prometheus Metrikleri (Issue #261)

backend/app/core/observability/db_pool_metrics.py modülü, asyncpg connection pool durumunu Prometheus'a periyodik olarak yansıtır. Connection exhaustion ve dead connection senaryolarını proaktif yakalamak için kritik metrik setidir.

MetrikTipAçıklama
zeus_db_pool_sizeGaugePool boyutu (yapılandırılmış kapasite)
zeus_db_pool_checked_outGaugeAktif kullanımdaki bağlantı sayısı
zeus_db_pool_overflowGaugePool kapasitesini aşan ek bağlantı sayısı
zeus_db_pool_utilizationGaugechecked_out / size (0.0–1.0 arası, hesaplanmış)

Önerilen Alarm Eşikleri

MetrikWarningCriticalAksiyon
zeus_db_pool_utilization> 0.8> 0.9Backend worker sayısı veya pool size yeniden değerlendirilmeli
zeus_db_pool_overflow> 0> 5max_overflow yetersiz, kalıcı yük artışı işareti
zeus_db_pool_checked_out (sabit)5 dk sabit15 dk sabitConnection leak şüphesi (commit/close eksik)

Bu metrikler Prometheus scrape config'inde backend job altında otomatik toplanır; ek scrape tanımı gerekmez.

Backend (FastAPI)

  • Endpoint: /metrics
  • Kütüphane: prometheus_client ASGI 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.

MetrikWarningCriticalAçıklama
RAM kullanımı>%80>%95Sistem bellek doluluk oranı
Disk kullanımı>%80>%95Kök ve veri bölümü disk doluluk oranı
API yanıt süresi (p95)>2s>10sBackend endpoint yanıt süresi
MQTT queue boyutu>1000 mesaj>5000 mesajEMQX broker mesaj kuyruğu
Celery queue bekleme>50 task>200 taskRedis'teki bekleyen Celery görevleri
TimescaleDB chunk boyutu>5GB>10GBTek bir hypertable chunk'ının disk boyutu
Container restart sayısı>2/saat>5/saatDocker container beklenmeyen yeniden başlatma
PostgreSQL bağlantı havuzu>%80 dolu>%95 doluasyncpg connection pool doluluk oranı
MQTT client disconnect oranı>%10/dk>%30/dkGateway 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

OCPP Charger Fleet Observability (Faz 7-B)

OCPP 1.6J / 2.0.1 entegrasyonu için ayrı bir Prometheus alert rules grubu ve Grafana dashboard'u hazırlanmıştır.

DosyaAçıklama
prometheus/rules/ocpp.yml5 alert kuralı (fleet drop, auth failure spike, command timeout, bootstrap slow, no active sessions). Backend metric kaynağı: backend/app/core/observability/ocpp_metrics.py.
grafana/dashboards/ocpp-fleet.json10 panel: bağlı charger, aktif session, charging profile success rate, heartbeat age p50/p95/p99, komut latency p95 (action breakdown), komut status rate, auth failures by reason, WS event push rate, top 10 slowest commands.
grafana/provisioning/dashboards/ocpp.ymlGrafana file-based provisioner config (folder: OCPP).

Detay tasarım dokümantasyonu: docs-site/docs/device-integrations/ocpp/faz7-production-deployment.md (Bölüm 4).

Not: Fleet offline ratio alarmı şu anda absolute connection drop tabanlıdır. Backend tarafında zeus_ocpp_chargers_total envanter metric'i eklendiğinde OcppFleetOfflineDrop kuralı oran tabanlı (active / total < 0.7) ifadeye güncellenmelidir.

Prometheus Scrape (OCPP)

OCPP metric'leri backend /metrics endpoint'inde yayınlanır — ayrı scrape job'a gerek yoktur, mevcut zeus-backend job'u tüm ocpp_* metric'lerini toplar.

Alert Doğrulama

# Lokal promtool ile syntax kontrol
docker run --rm \
-v $(pwd)/prometheus/rules:/rules \
prom/prometheus:latest \
promtool check rules /rules/ocpp.yml