Mami AI, production ortamında sorunları hızlı bir şekilde debug edebilmek, performans darboğazlarını tespit edebilmek ve sistem sağlığını izleyebilmek için kapsamlı bir logging ve monitoring sistemi sunar.
Logging & Monitoring sistemi aşağıdaki bileşenlerden oluşur:
- JSON Formatter: Yapılandırılmış log mesajları
- Request ID Tracking: Correlation ID ile request takibi
- Structured Logging: Tutarlı log formatı
- Sentry Integration: Otomatik hata takibi
- Error Context: Hata detayları ve browser bilgisi
- Real-time Reporting: Hataların anında raporlanması
- Prometheus: Metrik toplama ve depolama
- API Metrics: Response time, request count, error rate
- System Metrics: CPU, memory, disk kullanımı
- Elasticsearch: Log depolama ve arama
- Log Aggregation: Tüm logların merkezi yerde toplanması
- Full-text Search: Log'ları arama ve filtreleme
- Email Alerts: Kritik sorunlar için e-posta bildirimleri
- Slack Integration: Slack kanallarına alert gönderme
- Alert Escalation: Cevap yoksa alert'leri escalate etme
- Grafana: Real-time dashboard'lar
- Custom Dashboards: Özel metrik görselleştirmesi
- Alert Management: Alert'leri yönetme ve konfigüre etme
- Event Tracking: Kullanıcı davranışı takibi
- Batch Processing: Event'leri batch halinde işleme
- PII Anonymization: Kullanıcı privacy'sini koruma
- Docker ve Docker Compose
- Python 3.9+
- Node.js 16+
- PostgreSQL (veya mevcut veritabanı)
.env.example dosyasını .env olarak kopyalayın ve gerekli değerleri doldurun:
cp .env.example .envAşağıdaki değişkenleri düzenleyin:
# Elasticsearch
ELASTICSEARCH_URL=http://localhost:9200
ELASTICSEARCH_USERNAME=elastic
ELASTICSEARCH_PASSWORD=changeme
# Prometheus
PROMETHEUS_URL=http://localhost:9090
# Grafana
GRAFANA_URL=http://localhost:3000
GRAFANA_ADMIN_USER=admin
GRAFANA_ADMIN_PASSWORD=admin
# Sentry
VITE_SENTRY_DSN=https://your-sentry-dsn@sentry.io/project-id
# Slack
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URL
# Email
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
ALERT_EMAIL_TO=admin@example.comcd docker
docker-compose up -dBu komut aşağıdaki hizmetleri başlatacaktır:
- Elasticsearch (port 9200)
- Prometheus (port 9090)
- Grafana (port 3000)
# Python bağımlılıklarını yükleyin
pip install -r requirements.txt
# Veritabanı migrasyonlarını çalıştırın
alembic upgrade head
# Backend'i başlatın
python -m uvicorn app.main:app --reloadcd ui-new
# Node bağımlılıklarını yükleyin
npm install
# Frontend'i başlatın
npm run devElasticsearch, tüm log'ları merkezi bir yerde depolar. Günlük index'ler oluşturulur ve 90 gün saklanır.
Index Adlandırması: logs-mami-ai-YYYY.MM.DD
Retention Policy: 90 gün (opsiyonel olarak değiştirilebilir)
# Elasticsearch'e bağlanın
curl -X GET "localhost:9200/_cat/indices?v"
# Log'ları arayın
curl -X GET "localhost:9200/logs-mami-ai-*/_search?q=error"Prometheus, API ve sistem metriklerini toplar. Konfigürasyon dosyası docker/prometheus.yml konumundadır.
Scrape Interval: 15 saniye
Retention: 30 gün
Alert Rules: docker/alert_rules.yml dosyasında tanımlanır
# Prometheus'a erişin
http://localhost:9090
# Metrikleri sorgulayın
http://localhost:9090/api/v1/query?query=http_requests_totalGrafana, Prometheus ve Elasticsearch'ten veri alarak dashboard'lar oluşturur.
Varsayılan Giriş: admin / admin
Data Sources:
- Prometheus: http://localhost:9090
- Elasticsearch: http://localhost:9200
Dashboards:
- API Performance
- Error Rate
- System Metrics
- Top Errors
# Grafana'ya erişin
http://localhost:3000Sentry, frontend'de oluşan hataları otomatik olarak takip eder.
- https://sentry.io/ adresine gidin
- Yeni bir proje oluşturun
- DSN'yi kopyalayın
.envdosyasındaVITE_SENTRY_DSNdeğişkenini güncelleyin
VITE_SENTRY_DSN=https://your-key@sentry.io/your-project-idSlack, kritik alert'leri belirtilen kanala gönderir.
- https://api.slack.com/messaging/webhooks adresine gidin
- Yeni bir Incoming Webhook oluşturun
- Webhook URL'sini kopyalayın
.envdosyasındaSLACK_WEBHOOK_URLdeğişkenini güncelleyin
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK/URLEmail, alert'leri belirtilen adrese gönderir.
Gmail Kullanıyorsanız:
- https://myaccount.google.com/apppasswords adresine gidin
- Uygulama şifresi oluşturun
.envdosyasında aşağıdaki değişkenleri güncelleyin:
SMTP_SERVER=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
ALERT_EMAIL_TO=admin@example.comYapılandırılmış JSON log'ları oluşturur ve Elasticsearch'e gönderir.
Özellikler:
- JSON formatter
- Request ID tracking
- Structured logging helpers
- Multiple log levels (DEBUG, INFO, WARNING, ERROR, CRITICAL)
Kullanım:
from app.core.logger import get_logger
logger = get_logger(__name__)
# Basit log
logger.info("İşlem başladı")
# Structured log
logger.info("API isteği alındı", extra={
"request_id": "123",
"method": "GET",
"path": "/api/chat"
})
# Error log
logger.error("Hata oluştu", exc_info=True)Her API isteğini ve yanıtını log'a yazar.
Özellikler:
- Request ID oluşturma
- Request/response logging
- Error logging
- Performance timing
API ve sistem metriklerini toplar.
Metrikleri:
http_requests_total: Toplam API isteği sayısıhttp_request_duration_seconds: API isteği süresihttp_requests_errors_total: Toplam hata sayısısystem_cpu_usage_percent: CPU kullanımısystem_memory_usage_percent: Memory kullanımısystem_disk_usage_percent: Disk kullanımı
Sistem sağlığını izler ve alert'ler gönderir.
Kontroller:
- Database bağlantısı
- Cache (Redis) bağlantısı
- External services
- Disk alanı
- Memory kullanımı
Frontend'de oluşan hataları Sentry'ye gönderir.
Özellikler:
- Global error handler
- Unhandled promise rejection handler
- API error interceptor
- Network error handler
Kullanım:
import { initializeErrorTracking } from '@/lib/errorTracking';
// Uygulamayı başlatırken
initializeErrorTracking();
// Hata yakalama
try {
// kod
} catch (error) {
captureException(error);
}Kullanıcı davranışını takip eder.
Event'ler:
login: Kullanıcı giriş yaptıchat_start: Sohbet başladımessage_sent: Mesaj gönderildiimage_generated: Resim oluşturuldu
Kullanım:
from app.core.analytics import track_event
track_event(
user_id="user123",
event_type="message_sent",
metadata={"chat_id": "chat123"}
)import { trackEvent } from '@/lib/analytics';
trackEvent('message_sent', {
chat_id: 'chat123',
message_length: 100
});Kritik sorunlar için alert'ler gönderir.
Alert Kuralları:
- Error rate %5'i aşarsa
- Response time 5 saniyeyi aşarsa
- Disk alanı %80'i aşarsa
- Memory kullanımı %90'ı aşarsa
- API endpoint'i 5 dakika down olursa
Eski log'ları otomatik olarak siler.
Özellikler:
- Günde bir kere çalışır (gece saatlerinde)
- 90 günden eski log'ları siler
- Silme işleminden önce backup'lar
- Silme işlemini log'a yazar
# Tüm log'ları listele
curl -X GET "localhost:9200/logs-mami-ai-*/_search?size=100"
# Error log'larını ara
curl -X GET "localhost:9200/logs-mami-ai-*/_search?q=level:ERROR"
# Belirli bir request ID'ye göre ara
curl -X GET "localhost:9200/logs-mami-ai-*/_search?q=request_id:123"- Grafana'ya gidin: http://localhost:3000
- "Explore" sekmesine tıklayın
- Data source olarak Elasticsearch'i seçin
- Log'ları filtreleyip arayın
- Prometheus'a gidin: http://localhost:9090
- "Graph" sekmesine tıklayın
- Metrik adını yazın (örn:
http_requests_total) - "Execute" butonuna tıklayın
- Grafana'ya gidin: http://localhost:3000
- Önceden oluşturulmuş dashboard'lardan birini seçin
- Real-time metrik'leri görüntüleyin
docker/alert_rules.yml dosyasında alert kuralları tanımlanır:
groups:
- name: mami_alerts
rules:
- alert: HighErrorRate
expr: rate(http_requests_errors_total[5m]) > 0.05
for: 5m
annotations:
summary: "Yüksek error rate"- Grafana'ya gidin
- "Alerting" sekmesine tıklayın
- Yeni alert kuralı oluşturun
- Notification channel'ı seçin (Email, Slack, vb.)
from app.core.analytics import track_event
# Event'i takip et
track_event(
user_id="user123",
event_type="chat_start",
metadata={"model": "gpt-4"}
)import { trackEvent } from '@/lib/analytics';
// Event'i takip et
trackEvent('image_generated', {
model: 'flux',
size: '1024x1024'
});# Elasticsearch'in çalışıp çalışmadığını kontrol edin
curl -X GET "localhost:9200/"
# Docker container'ını kontrol edin
docker ps | grep elasticsearch
# Log'ları görüntüleyin
docker logs <container_id># Prometheus'a erişin
http://localhost:9090/targets
# Scrape status'unu kontrol edin
# Eğer "DOWN" ise, backend'in çalışıp çalışmadığını kontrol edin# Data source'ları kontrol edin
# Grafana > Configuration > Data Sources
# Prometheus ve Elasticsearch'in erişilebilir olduğundan emin olun# DSN'nin doğru olduğundan emin olun
# .env dosyasında VITE_SENTRY_DSN değişkenini kontrol edin
# Frontend console'unda hata olup olmadığını kontrol edin
# Browser developer tools > Console# Webhook URL'sinin doğru olduğundan emin olun
# .env dosyasında SLACK_WEBHOOK_URL değişkenini kontrol edin
# Backend log'larında hata olup olmadığını kontrol edin# SMTP konfigürasyonunu kontrol edin
# .env dosyasında SMTP_* değişkenlerini kontrol edin
# Gmail kullanıyorsanız, uygulama şifresi oluşturduğundan emin olun
# https://myaccount.google.com/apppasswords
# Backend log'larında hata olup olmadığını kontrol edin- Gereksiz context bilgilerini log'lamayın
- Sensitive data'yı mask'leyin
- Log level'ını production'da INFO veya WARNING olarak ayarlayın
- Scrape interval'ını artırın (varsayılan: 15 saniye)
- Gereksiz metrik'leri devre dışı bırakın
- Retention süresi'ni azaltın (varsayılan: 30 gün)
- Index'leri optimize edin
- Eski index'leri silin
- Shard sayısını ayarlayın
Log'larda sensitive data'yı mask'lemek için:
from app.core.logger import mask_sensitive_data
# Otomatik masking
logger.info("API key: " + mask_sensitive_data("sk_live_123456"))- Elasticsearch'e erişimi kısıtlayın (firewall, VPN)
- Prometheus'a erişimi kısıtlayın
- Grafana'da kullanıcı rolleri tanımlayın
- Sentry'de team'ler ve permission'ları ayarlayın
- PII data'yı anonymize edin
- GDPR uyumluluğunu sağlayın
- Log retention policy'sini belirleyin
- Backup'ları şifreleyin
- Elasticsearch Documentation
- Prometheus Documentation
- Grafana Documentation
- Sentry Documentation
- Slack API Documentation
Sorunlar veya sorularınız varsa, lütfen GitHub issues'ı kullanın veya ekiple iletişime geçin.
Son Güncelleme: Ocak 2026 Versiyon: 1.0