Rehberler Uzun Okuma Harakiri

uWSGI'nizi nasıl izlersiniz?

Loglama, metrikler ve harakiri koruması.

27 Şubat 2026 20 dk okuma
Paylaş
X in

Giriş

Üretim ortamında uWSGI süreçlerini izlemeden çalıştırmak, gece yarısı 504 hatalarına davetiyedir. Loglama sorun teşhisi, monitoring proaktif uyarı, harakiri ise sonsuz döngü ve yavaş isteklere karşı sigorta sağlar.

uWSGI yerleşik logrouter, çoklu logger, stats server ve harakiri mekanizmaları sunar; harici araca gerek kalmadan temel gözlemlenebilirlik sağlanır.

Bu yazıda log yapılandırması, metrik toplama, harakiri parametreleri ve Prometheus entegrasyonunu ele alıyoruz.

Loglama Yapılandırması

logto /var/log/uwsgi/app.log tüm logları tek dosyaya yazar. log-master = true master process loglarını da içerir. req-logger ve logger parametreleri farklı hedeflere yönlendirme sağlar.

log-4xx = true ve log-5xx = true hata yanıtlarını ayrıntılı loglar. log-x-forwarded-for = true gerçek istemci IP'sini X-Forwarded-For'dan okur.

[uwsgi]
logto = /var/log/uwsgi/myapp.log
log-master = true
log-4xx = true
log-5xx = true
log-x-forwarded-for = true
disable-logging = false

Logrouter ile Çoklu Hedef

logrouter regex ile log satırlarını farklı dosyalara yönlendirir. Kritik hatalar ayrı dosyada toplanabilir; logrotate ile yönetilir.

syslog entegrasyonu için log-syslog = true veya logger = syslog kullanılır. Merkezi log toplama (ELK, Loki) için idealdir.

  • logrotate ile günlük rotasyon
  • syslog ile merkezi toplama
  • JSON format için custom logger
  • log-reopen SIGUSR1 ile yeniden açma
[uwsgi]
logto = /var/log/uwsgi/app.log
log-route = ^\[ERROR\] /var/log/uwsgi/errors.log
log-route = ^\{address.*\} /var/log/uwsgi/access.log

Stats Server ve Metrikler

stats = /run/uwsgi/stats.sock JSON metrik sunar: worker sayısı, istek sayısı, bellek, ortalama yanıt süresi. uwsgi --connect-and-read /run/uwsgi/stats.sock ile okunur.

stats-http = true HTTP üzerinden /json ve /csv endpoint'leri açar; Prometheus uwsgi_exporter ile scrape edilir.

[uwsgi]
stats = /run/uwsgi/stats.sock
stats-http = true
stats-http-port = 9191
memory-report = true

Harakiri Mekanizması

harakiri = 30 worker'ı 30 saniyeden uzun süren istekte öldürür. harakiri-verbose = true log'a detay yazar. harakiri-no-ar = async mode'da farklı davranır.

Sonsuz döngü, yavaş veritabanı sorgusu veya deadlock durumunda harakiri tüm worker havuzunun tükenmesini önler. Değeri iş yükünüze göre ayarlayın; çok düşük normal istekleri keser.

[uwsgi]
harakiri = 60
harakiri-verbose = true
socket-timeout = 30
http-timeout = 60
harakiri değerini en uzun meşru istek sürenizin %20 üstüne ayarlayın; rapor export gibi işlemler için istisna route tanımlayın.

Alarm ve Uyarı Stratejileri

Worker sayısı sıfıra düşerse veya reload döngüsü başlarsa uyarı tetikleyin. stats JSON'dan avg_response_time eşik değeri aşarsa PagerDuty çağrısı yapılabilir.

Grafana dashboard'u uwsgi_exporter metrikleriyle oluşturun: uwsgi_workers, uwsgi_requests_total, uwsgi_response_time.

  1. Stats socket veya HTTP exporter kurun
  2. Worker ve bellek eşikleri tanımlayın
  3. Log hatalarını merkezi sisteme yönlendirin
  4. Harakiri loglarını düzenli inceleyin

Üretim Kontrol Listesi

logto ve logrotate yapılandırılmış mı? stats socket aktif mi? harakiri üretim değerinde mi? memory-report ile bellek izleniyor mu?

disable-write-exception = false bırakın; hata ayıklama için exception traceback logda görünmeli. Üretimde py-autoreload kapalı olmalıdır.

# logrotate /etc/logrotate.d/uwsgi
/var/log/uwsgi/*.log {
    daily
    rotate 14
    compress
    missingok
    postrotate
        kill -USR1 $(cat /run/uwsgi.pid)
    endscript
}

Sonuç

Loglama, monitoring ve harakiri üçlüsü uWSGI üretim istikrarının temelidir. Yerleşik stats server basit kurulumlar için yeterli; büyük ölçekte Prometheus + Grafana ekleyin.

Harakiri değerlerini düzenli gözden geçirin; uygulama evrimi ile en uzun istek süreleri değişir. Logları sadece diskte tutmayın; merkezi analiz için forward edin.