logbrew-flask 0.1.6 veya daha yeni bir sürüm kullanın. Paket istek
span’lerini ve ele alınmamış istisnaları yakalar. İsteğe bağlı loglama
handler’ı Python loglarını istek izine bağlar. İstek süresi metrikleri de
isteğe bağlıdır.
Paket Python 3.10 veya üstünü ve Flask 3.1 veya üstünü gerektirir.
Uygulamada proje kapsamlı bir sunucu alım anahtarı (ingest key) kullanın.
CLI’a yetki veren hesap kimlik bilgisini kullanmayın.
<project_id>, <trace_id> ve <issue_id> yerine LogBrew’deki kimlikleri
yazın. Test istekleri için bir geliştirme projesi kullanın. Kabuk örnekleri
Bash kullanır.
İlk isteği gönderin
1
Bir proje anahtarı oluşturun veya seçin
CLI ile giriş yapın. Ardından yeni bir proje veya mevcut
bir proje kullanın. İki örneği birden çalıştırmayın. Yeni bir proje için
alım anahtarını yalnızca sahibinin okuyabildiği yeni bir dosyada
saklayın:Mevcut bir proje için kimliğini CLI alım anahtarını yalnızca sahibinin erişebildiği izinlerle saklar.
Anahtarı veya dosya yolunu yazdırmaz. Production’da bu yerel dosya
yerine dağıtım platformunuzun gizli anahtar yöneticisini kullanın.Bir oluşturma isteğinin sonucu belirsizse aynı komutu yeniden
çalıştırın.
logbrew projects --json çıktısından
alın. Ardından ayrı bir sunucu anahtarı oluşturun:2
Yayınlanmış entegrasyonu kurun
Uygulamanın sanal ortamını oluşturun veya etkinleştirin, ardından
framework paketini kurun. Paket uyumlu çekirdek SDK bağımlılığını da
kurar.
3
Dağıtım kimliğini yapılandırın
Proje anahtarını yazdırmadan yerelde yükleyin. Her sinyalin yararlı
dağıtım bağlamı taşıması için kararlı bir hizmet, ortam ve sürüm
ayarlayın.
init_logbrew() önce açık argümanlara, sonra Flask uygulama
yapılandırmasına, sonra bu ortam değişkenlerine bakar. Hizmet adı
yapılandırılmamışsa Flask import adını kullanır.4
Flask'ı bir kez başlatın
Yeni bir uygulama için örneği Tekrarlanan
app.py olarak kaydedin. Başlatıcıyı
Flask uygulamasını oluşturduktan sonra ekleyin. Loglama handler’ı
isteğe bağlıdır. Uygulama loglarının etkin istek izini ve span’ini
paylaşmasını sağlar.init_logbrew(app) çağrıları aynı Flask eklentisini
döndürür. Yinelenen istek veya istisna hook’ları kurmaz. Başlatıcı
loglama handler’ı eklemez. Handler’ı uygulamanın kendi logger’ına bir
kez ekleyin.5
Bir istek çalıştırın
Uygulamayı başlatın ve rotayı başka bir terminalden çağırın.
Uygulamanız farklı bir modül adı kullanıyorsa komuttaki Gönderim bir arka plan çalışanında yürür ve yanıtı açık tutmaz.
app değerini
değiştirin.6
LogBrew'e ulaşan kanıtı doğrulayın
Tam proje ve dağıtım kapsamını okuyun. Sağlık isteğinin izini ve
örnekteki loglama handler’ından gelen ilişkili logu arayın.Dönen iz kimliğini sınırlı inceleme komutuna kopyalayın:Eşleşen bir okuma, LogBrew’ün sinyali sakladığını doğrular. Yereldeki
200 yanıtı yalnızca Flask’ın isteği işlediğini kanıtlar.İhtiyacınız olan sinyalleri seçin
Başlatıcı, istek izleri ve ele alınmamış istisnalar açık olarak başlar. İstek metrikleri ve Python log iletimi ayrı seçimlerdir.
Varsayılanlarla başlayın. Gecikme görünümüne ihtiyacınız olduğunda istek
metriklerini ekleyin. Loglama handler’ını yalnızca bir incelemeye yardım eden
logger’lara ekleyin.
Varsayılan olarak başlatıcı kendi HTTP taşıma katmanını yönetir. Her olayı
kuyruğa alır ve kuyrukta bir olay olur olmaz bir arka plan çalışanı gönderimi
başlatır. Gönderim yanıtı açık tutmaz. Taşıma hataları Flask yanıtını
bozmaz.
flush_on_response=True, kuyruktaki olayları bunun yerine yanıt yolunda
gönderir. Bu seçenekle birlikte raise_flush_errors=True gönderim hatalarını
yükseltir. İkisini de yalnızca kontrollü bir tanılama için kullanın.
Log içeriğini kontrol edin
İhtiyacınız olan mesajların sahibi olan logger’a tek birLogBrewLoggingHandler ekleyin. Handler, uygulamanın konsol veya dosya
handler’larının yerini almaz. Flask’ı veya Python loglama modülünü yamalamaz.
Aynı handler’ı iki kez eklemek logları çoğaltır. Uygulama kök logger’ı da
kullanıyorsa ikinci bir handler eklemeden önce yayılımı kontrol edin.
İstek içindeki bir log etkin izi ve span’i devralır. İstek dışındaki bir
logun istek izi yoktur.
Handler; biçimlendirilmiş mesajı, logger adını ve LogBrew düzeyini gönderir.
Ayrıca kaynak dosya adını, modülü, fonksiyonu, satırı, iş parçacığı ve süreç
adlarını gönderir, ancak tam kaynak yolunu göndermez. extra={...} içindeki
basit değerler meta veriye dönüşür. Kullanıcıya açık bir istekten log yazmadan
önce bu değerleri gözden geçirin.
Python DEBUG kayıtları LogBrew’de info olur. WARNING, warning;
CRITICAL, critical olur. Özgün Python düzey adı ve numarası meta veride
kalır. Daha az kayıt göndermek için handler’a kendi düzeyini verin, örneğin
LogBrewLoggingHandler(logbrew.client, level=logging.WARNING).
Konsol ve LogBrew aynı kaydı alabilir. Örneğin konsolu Flask uygulamasını
oluşturmadan önce yapılandırın:
exc_info içeren bir log kaydı istisna türünü ve mesajını içerir. İstisna
metninin tamamı yalnızca handler’da include_exception_text=True olduğunda
gönderilir. Bu, istisna mesajını hiçbir zaman göndermeyen otomatik istisna
yakalamadan ayrıdır. Log veya istisna mesajlarına kimlik bilgisi, kişisel
veri veya istek gövdesi koymayın.
Entegrasyonun yakaladıkları
Span adları HTTP yöntemini ve eşleşen rota şablonunu kullanır. Örneğin
/orders/100 ve /orders/200 aynı GET /orders/<int:order_id> adını
paylaşır. Eşleşmeyen bir istek sabit <unmatched> etiketini kullanır.
traceparent eksik veya geçersizse yeni bir iz başlar.
Span meta verisi yöntemi, rota şablonunu, endpoint’i, durum kodunu ve süreyi
içerir. Somut yolu veya sorgu dizesini içermez.
0.1.6 ve sonraki sürümlerde istek span’i, Flask’ın isteği işleme sürecinin
tamamını kapsar. İstek öncesi hook’lar, hata handler’ları ve teardown aynı istek izini
paylaşır. Akış hâlinde gönderilen bir yanıt, gövde bittiğinde veya
kapandığında span’ini sonlandırır.
İstisna yakalamayı test edin
4xx veya 5xx durum kodu istek span’inde görünür. Durum kodu tek başına
bir istisna oluştuğunu kanıtlamaz. Bir hatayı teşhis etmeden önce hem izleri
hem sorunları okuyun. LogBrew, Flask hata handler’larının yerini almaz ve
yanıt durum kodunu değiştirmez.
Bir geliştirme projesinde geçici bir rota ekleyin. Rotayı bir kez çağırın.
Dağıtmadan önce kaldırın:
500 durum kodu döndürür. Yeni sorunu ve istek metriğini bulun:
local capture check metnini içermemelidir.
Giden işleri isteğe bağlayın
Python SDK’sırequests, urllib, httpx, aiohttp, veritabanı, önbellek
ve kuyruk işleri için uygulamanın kendisinin çağırdığı yardımcılar sunar. Her
yardımcı, etkin istek izinin altında bir alt span oluşturur. SDK bu
kütüphaneleri genel olarak yamalamaz.
logbrew-flask paketi örnekleri
gösterir.
Her yardımcıya kararlı bir işlem adı ve bir rota veya ifade şablonu verin. Bu
adlara kayıt kimliklerini, müşteri değerlerini, SQL bağlama değerlerini veya
mesaj yüklerini koymayın. Alt span’leri yalnızca bağımlılığın istek için
önemli olduğu yerlere ekleyin. Her küçük çağrı için bir span, izi okumayı
zorlaştırır. Giden HTTP yardımcıları tek bir W3C traceparent başlığı ekler.
Tam URL’leri, sorgu dizelerini, gövdeleri, çerezleri veya rastgele başlıkları
yakalamaz. Veritabanı, önbellek ve kuyruk yardımcıları bağlama değerlerini,
sonuçları, önbellek değerlerini veya kuyruk yüklerini yakalamaz.
Gizlilik ve süreç yaşam döngüsü
Otomatik Flask yakalama; somut istek yollarını, sorgu dizelerini, istek ve yanıt gövdelerini, çerezleri, rastgele başlıkları, hamtraceparent
değerlerini, baggage ve tracestate değerlerini dışarıda bırakır.
Otomatik istisna yakalama str(error) değerini hiçbir zaman okumaz veya
göndermez. Sabit Unhandled exception özetini kullanır ve istisna
zincirindeki her mesajı gizlenmiş olarak işaretler. Çerçeveler bir dosya
temel adı ve sınırlı bir kod kimliği içerir. Ham traceback metni, kaynak kod,
yerel değişkenler veya mutlak yollar içermez.
Uygulamayı ve LogBrew istemcisini her çalışan sürecin içinde oluşturun.
Gunicorn’un varsayılan çalışan başına uygulama yükleme davranışı çalışır.
Üst süreçte oluşturulmuş bir istemciyle Gunicorn --preload kullanmayın.
uWSGI için --lazy-apps gibi çalışan başına uygulama yüklemeyi kullanın.
Python istemcisi, süreç fork edildikten sonra yeniden kullanılmayı reddeder.
logbrew.client.shutdown() fonksiyonunu süreç yöneticisinin çalışan başına
kapanma hook’undan çağırın. Kuyrukta kalan olayları gönderir ve istemciyi
kapatır. Her istekten sonra çağırmayın. Kapanmadan sonra istemci o
çalışandan gelen yeni olayları reddeder.
Bir yanıt, çalışan son kuyruk olaylarını göndermeden önce bitebilir. Bir
dağıtım veya ölçek küçültme sırasında düzgün bir kapanış bu olaylara son bir
gönderim şansı verir.
Kurulum sorunlarını giderin
Hesap erişimi, anahtar ve geri okuma hataları için
Sorun giderme sayfasına bakın. Diğer çalışma
ortamları için SDK entegrasyonu sayfasına
bakın.
