Gesaan dan konteks
Pasukan menggunakan pustaka logging dan ejen yang berbeza, dengan tahap merangkumi TRACE dan DEBUG hingga CRITICAL. Terangkan cara memetakannya kepada SeverityNumber dan SeverityText OpenTelemetry, mengekalkan maklumat sumber, serta mengendalikan exception, pensampelan (sampling), kueri dan migrasi versi.
Perkara yang diuji oleh penemu duga
- Membezakan SeverityNumber yang dipiawaikan, SeverityText sumber dan badan log.
- Memahami bahawa julat numerik menyatakan tahap keterukan dan tahap bernama sama tidak semestinya mempunyai maksud yang serupa merentas sistem.
- Menggabungkan peristiwa exception, atribut sumber (resource attributes), korelasi surih/span (trace/span), dan transformasi pengumpul (collector).
- Mengambil kira tahap yang tidak diketahui, bias pensampelan, keserasian kueri, ambang amaran, dan pengesahan main semula (replay).
Soalan penjelasan untuk ditanya
- Apakah maksud tahap bagi setiap sumber, apakah julat numerik yang digunakannya, dan adakah ia mentakrifkan tahap tersuai?
- Adakah rentetan tahap asal, pustaka logging dan versi perlu dikekalkan? Medan manakah yang digunakan oleh kueri hiliran (downstream)?
- Adakah exception merupakan peristiwa berasingan atau teks badan biasa, dan patutkah ia dipautkan ke trace, span atau ID permintaan?
- Adakah pemetaan akan mengubah amaran, pensampelan, kos storan atau pematuhan pengekalan? Bagaimanakah log sejarah akan dimainkan semula?
Jawapan 30 saat
Saya akan membina kamus semantik untuk setiap sumber, kemudian memetakan maknanya kepada julat SeverityNumber OpenTelemetry sambil mengekalkan SeverityText asal dan metadata sumber. Exception menggunakan semantik exception standard dan korelasi trace/span; jejak tindanan (stack trace) tidak boleh disumbat ke dalam medan tahap. Pengumpul mengubah dan mengesahkan rekod, manakala tahap yang tidak diketahui mengikut laluan sandaran yang boleh diperhatikan. Sebelum pelancaran, saya akan memainkan semula sampel wakil dan kegagalan untuk menyemak ambang amaran, pensampelan, kueri dan kos berbanding mentakrifkan semula semua sejarah secara senyap.
Analisis mendalam langkah demi langkah
1. Takrifkan medan standard
OpenTelemetry Logs Data Model mengasingkan SeverityNumber dan SeverityText. Number menyokong perbandingan dalam model; Text mengekalkan nama asal atau nama paparan pengeluar. Badan, atribut, sumber dan cap masa membawa semantik lain. Jadual pemetaan harus merekodkan sumber, tahap asal, julat sasaran dan rasional berbanding menyembunyikan segala-galanya dalam kod penukaran.
2. Petakan sumber kepada julat semantik
WARN, ERROR, atau FATAL boleh mencetuskan tindakan operasi yang berbeza dalam rangka kerja yang berbeza. Petakan mengikut maksud kepada julat, kekalkan tahap yang tidak disahkan sebagai tidak ditentukan atau berkeyakinan rendah, dan letakkan nilai asal dalam SeverityText atau atribut terkawal. Jangan bandingkan nombor mentah merentas sistem sehingga dokumentasi dan sampel setiap sumber disahkan.
3. Kendalikan exception dan korelasi
Semantik exception OpenTelemetry mengesyorkan medan untuk jenis exception, mesej dan jejak tindanan, dengan keterukan dipilih mengikut sama ada exception tersebut menyebabkan kegagalan aplikasi. Log harus membawa trace ID, span ID, perkhidmatan dan versi triển khai (deployment version) supaya kueri boleh membezakan rekod daripada satu permintaan. Jejak tindanan ialah data diagnostik dan memerlukan kawalan data sensitif serta pengekalan yang sama seperti log lain.
4. Sahkan penyerapan, amaran dan migrasi
Lakukan pemetaan, pengesahan medan dan penukaran keserasian dalam Collector atau ejen pinggir, merekodkan nilai tidak sah dan sebab pengguguran. Main semula sampel sejarah dan kegagalan sintetik untuk mengesahkan ambang amaran, pensampelan, hasil kueri dan kos storan. Semasa peningkatan, simpan versi pemetaan dan medan sumber supaya pengguna boleh mentafsir sejarah mengikut versi dan bukannya mengubah maksud amaran secara senyap.
Jawapan model
Saya akan mencipta pemetaan semantik yang didokumentasikan untuk Java, Python, Nginx dan sumber lain, menyasarkan SeverityNumber OpenTelemetry sambil mengekalkan nama asal dalam SeverityText dan atribut terkawal. Nombor hanya dibandingkan dalam model yang sama; tahap yang tidak diketahui atau tersuai mengikut laluan berkeyakinan rendah dengan amaran. Exception menggunakan medan exception OpenTelemetry dan dipautkan ke trace/span serta versi perkhidmatan. Collector mengendalikan transformasi, pengesahan dan metrik. Sampel sejarah dan kegagalan dimainkan semula untuk menguji amaran, pensampelan, kueri dan kos. Versi pemetaan dan medan sumber kekal tersedia untuk kebolehkauditannya.
Kesilapan lazim
- Memetakan ERROR, WARN, atau FATAL setiap sumber secara satu-ke-satu tanpa menyemak semantik.
- Hanya menyimpan SeverityNumber dan menggugurkan tahap asal serta versi sumber.
- Meletakkan data exception dalam badan log dan menjadikan jejak tindanan sukar dikueri atau tidak selamat untuk dikekalkan.
- Meninggalkan korelasi trace/span dan kehilangan konteks peringkat permintaan.
- Menggugurkan pemetaan yang gagal secara senyap atau memaksanya menjadi INFO tanpa metrik atau amaran.
- Mengira semula amaran sejarah selepas perubahan pemetaan tanpa rekod versi atau main semula.
Soalan susulan dan respons
Apakah nombor yang patut digunakan untuk tahap yang tidak diketahui?
Kekalkan teks asal dan tandakannya sebagai tidak diketahui atau berkeyakinan rendah dan bukannya memaksa kepada ERROR. Jika susunan perniagaan diperlukan, takrifkan julat lalai yang didokumenkan, rekod versi pemetaan, pantau nisbah yang tidak diketahui, dan betulkan semantik sumber.
Bolehkah pensampelan mengubah taburan keterukan?
Ya. Utamakan rekod yang teruk dan peristiwa exception, rekod keputusan pensampelan dan penyebut input, serta bandingkan taburan sebelum dan selepas pensampelan. Kiraan yang disampel tidak boleh dibentangkan sebagai kadar ralat sebenar tanpa konteks tersebut.
Bagaimanakah anda mengekalkan keserasian kueri lama?
Kekalkan medan sumber dan alias lama dalam lapisan penukaran buat sementara waktu, dan dedahkan paparan atau fungsi kueri yang mempunyai versi. Semasa migrasi, lakukan dwi-tulis (dual-write) atau main semula amaran dan laporan sehingga perbezaan difahami, kemudian tamatkan medan lama.