logbrew-flask 0.1.6 atau yang lebih baru. Paket ini merekam span
permintaan dan exception yang tidak ditangani. Handler logging opsional
menghubungkan log Python dengan trace permintaan. Metrik durasi permintaan
juga opsional.
Paket ini membutuhkan Python 3.10 atau yang lebih baru dan Flask 3.1 atau yang
lebih baru.
Di aplikasi, gunakan kunci ingest server khusus proyek. Jangan gunakan
kredensial akun yang mengotorisasi CLI.
<project_id>, <trace_id>, dan <issue_id> dengan ID dari LogBrew.
Gunakan proyek pengembangan untuk permintaan uji. Contoh shell memakai Bash.
Kirim permintaan pertama
1
Buat atau pilih kunci proyek
Masuk dengan CLI. Lalu gunakan proyek baru atau proyek
yang sudah ada. Jangan jalankan kedua contoh. Untuk proyek baru, simpan
kunci ingest-nya di file baru yang hanya bisa diakses pemiliknya:Untuk proyek yang sudah ada, ambil ID-nya dari CLI menyimpan kunci ingest dengan izin khusus pemilik. CLI tidak
menampilkan kunci itu atau path file-nya. Di produksi, gunakan secret
manager dari platform deployment Anda, bukan file lokal ini.Jika hasil permintaan pembuatan tidak pasti, jalankan lagi perintah yang
sama persis.
logbrew projects --json.
Lalu buat kunci server terpisah:2
Instal integrasi yang sudah dirilis
Buat atau aktifkan virtual environment aplikasi, lalu instal paket
framework. Paket ini menginstal dependensi SDK inti yang kompatibel.
3
Konfigurasikan identitas deployment
Muat kunci proyek secara lokal tanpa menampilkannya. Tetapkan layanan,
lingkungan, dan rilis yang stabil agar setiap sinyal punya konteks
deployment yang berguna.
init_logbrew() memeriksa argumen eksplisit terlebih dahulu, lalu
konfigurasi aplikasi Flask, lalu variabel lingkungan ini. Jika nama
layanan tidak dikonfigurasi, fungsi ini memakai nama impor Flask.4
Inisialisasi Flask sekali
Untuk aplikasi baru, simpan contoh ini sebagai Panggilan
app.py. Tambahkan
initializer setelah Anda membuat aplikasi Flask. Handler logging bersifat
opsional. Handler ini membuat log aplikasi berbagi trace dan span
permintaan yang aktif.init_logbrew(app) yang berulang mengembalikan ekstensi Flask
yang sama. Panggilan itu tidak memasang hook permintaan atau exception
ganda. Initializer tidak menambahkan handler logging. Tambahkan handler ke
logger milik aplikasi satu kali.5
Jalankan satu permintaan
Jalankan aplikasi dan panggil rutenya dari terminal lain. Ganti Pengiriman berjalan di worker latar belakang dan tidak menahan respons.
app di
perintah jika aplikasi Anda memakai nama modul lain.6
Verifikasi bukti di LogBrew
Baca lingkup proyek dan deployment yang tepat. Cari trace dari permintaan
health dan log yang berkorelasi dari handler logging di contoh.Salin ID trace dari hasil itu ke perintah investigasi terbatas ini:Pembacaan yang cocok mengonfirmasi bahwa LogBrew menyimpan sinyal itu.
Respons
200 lokal hanya membuktikan bahwa Flask menangani permintaan.Pilih sinyal yang Anda butuhkan
Initializer langsung mengaktifkan trace permintaan dan exception yang tidak ditangani. Metrik permintaan dan penerusan log Python adalah pilihan terpisah.
Mulai dengan default. Tambahkan metrik permintaan jika Anda butuh tampilan
latensi. Tambahkan handler logging hanya ke logger yang membantu investigasi.
Secara default, initializer memiliki transport HTTP sendiri. Initializer
memasukkan setiap peristiwa ke antrean, dan worker latar belakang mulai
mengirim begitu ada satu peristiwa di antrean. Pengiriman tidak menahan
respons. Kegagalan transport tidak merusak respons Flask.
flush_on_response=True mengirim peristiwa yang mengantre di jalur respons
sebagai gantinya.
Dengan opsi itu, raise_flush_errors=True memunculkan error pengiriman.
Gunakan keduanya hanya untuk diagnostik terkontrol.
Kendalikan isi log
Tambahkan satuLogBrewLoggingHandler ke logger yang memiliki pesan yang Anda
butuhkan. Handler ini tidak menggantikan handler konsol atau file milik
aplikasi. Handler ini tidak mem-patch Flask atau modul logging Python.
Menambahkan handler yang sama dua kali menggandakan log. Jika aplikasi juga
memakai root logger, periksa propagasi sebelum Anda memasang handler kedua.
Log di dalam permintaan mewarisi trace dan span yang aktif. Log di luar
permintaan tidak punya trace permintaan.
Handler mengirim pesan yang sudah diformat, nama logger, dan level LogBrew.
Handler juga mengirim nama file sumber, modul, fungsi, baris, thread, dan nama
proses, tetapi tidak mengirim path sumber lengkap. Nilai primitif dari
extra={...} menjadi metadata. Tinjau nilai itu sebelum Anda mencatat log
dari permintaan yang berasal dari pengguna.
Record Python DEBUG menjadi info di LogBrew. WARNING menjadi warning,
dan CRITICAL menjadi critical. Nama dan angka level Python asli tetap ada
di metadata. Untuk mengirim lebih sedikit record, beri handler level-nya
sendiri, seperti
LogBrewLoggingHandler(logbrew.client, level=logging.WARNING).
Konsol dan LogBrew dapat menerima record yang sama. Misalnya, konfigurasikan
konsol sebelum Anda membuat aplikasi Flask:
exc_info menyertakan tipe dan pesan exception. Teks
exception lengkap hanya dikirim jika handler punya
include_exception_text=True. Ini terpisah dari perekaman exception otomatis,
yang tidak pernah mengirim pesan exception. Jangan masukkan kredensial, data
pribadi, atau body permintaan ke pesan log atau exception.
Yang direkam integrasi
Nama span memakai metode HTTP dan template rute yang cocok. Misalnya,
/orders/100 dan /orders/200 sama-sama memakai GET /orders/<int:order_id>.
Permintaan yang tidak cocok dengan rute mana pun memakai label tetap
<unmatched>. traceparent yang tidak ada atau tidak valid memulai trace
baru.
Metadata span berisi metode, template rute, endpoint, kode status, dan durasi.
Metadata itu tidak berisi path konkret atau string kueri.
Di versi 0.1.6 dan yang lebih baru, span permintaan mencakup seluruh dispatch
Flask. Hook before-request, handler error, dan teardown berbagi trace
permintaan. Respons yang di-stream mengakhiri span-nya saat body selesai atau
ditutup.
Uji perekaman exception
Status4xx atau 5xx muncul di span permintaan. Status itu saja tidak
membuktikan bahwa exception terjadi. Baca trace dan masalah sebelum Anda
mendiagnosis kegagalan. LogBrew tidak menggantikan handler error Flask dan
tidak mengubah status respons.
Di proyek pengembangan, tambahkan rute sementara. Panggil sekali. Hapus rute
itu sebelum Anda men-deploy:
500. Temukan masalah baru dan metrik
permintaannya:
local capture check.
Hubungkan pekerjaan keluar dengan permintaan
SDK Python punya helper milik aplikasi untukrequests, urllib, httpx,
aiohttp, database, cache, dan antrean. Setiap helper membuat child span dari
trace permintaan yang aktif. SDK tidak mem-patch library ini secara global.
Paket logbrew-flask berisi
contohnya.
Beri setiap helper nama operasi yang stabil dan template rute atau statement.
Jangan masukkan ID record, nilai pelanggan, nilai bind SQL, atau payload pesan
ke nama itu. Tambahkan child span hanya jika dependensi itu penting bagi
permintaan. Span untuk setiap panggilan kecil membuat trace lebih sulit
dibaca. Helper HTTP keluar menambahkan satu header W3C traceparent. Helper
itu tidak merekam URL lengkap, string kueri, body, cookie, atau header
sembarang. Helper database, cache, dan antrean tidak merekam nilai bind,
hasil, nilai cache, atau payload antrean.
Privasi dan siklus hidup proses
Perekaman Flask otomatis tidak menyertakan path permintaan konkret, string kueri, body permintaan dan respons, cookie, header sembarang, nilaitraceparent mentah, baggage, dan tracestate.
Perekaman exception otomatis tidak pernah membaca atau mengirim str(error).
Perekaman ini memakai ringkasan tetap Unhandled exception dan menandai
setiap pesan dalam rantai exception sebagai disamarkan. Frame berisi basename
file dan identitas kode yang dibatasi. Frame tidak berisi teks traceback
mentah, kode sumber, variabel lokal, atau path absolut.
Buat aplikasi dan klien LogBrew di dalam setiap proses worker. Pemuatan
aplikasi per worker yang menjadi default Gunicorn berfungsi. Jangan gunakan
Gunicorn --preload dengan klien yang dibuat di proses induk. Untuk uWSGI,
gunakan pemuatan aplikasi per worker seperti --lazy-apps. Klien Python
menolak dipakai ulang setelah proses di-fork.
Panggil logbrew.client.shutdown() dari hook shutdown per worker milik
pengelola proses. Fungsi ini mengirim sisa peristiwa di antrean dan menutup
klien. Jangan memanggilnya setelah setiap permintaan. Setelah shutdown, klien
menolak peristiwa baru dari worker itu.
Respons bisa selesai sebelum worker mengirim peristiwa terakhir di antrean.
Saat deploy atau scale-down, graceful shutdown memberi peristiwa itu satu
kesempatan pengiriman terakhir.
Pulihkan dari kendala penyiapan
Untuk error akses akun, kunci, dan pembacaan ulang, lihat
Mengatasi kendala. Untuk runtime lain, lihat
Integrasi SDK.
