ما هو tracing؟
tracing هو إطار عمل قوي للتسجيل المنظم (structured logging)، والتنميط (profiling)، ومراقبة تطبيقات Rust. على عكس أدوات التسجيل البسيطة (مثل log)، يتيح لك tracing إنشاء نطاقات (spans) هرمية وأحداث (events) مع سياق، مما يجعله مثالياً لتتبع الطلبات والمعاملات والعمليات غير المتزامنة.
لماذا نحتاج المراقبة في Rust؟
تُستخدم تطبيقات Rust غالباً في الأنظمة عالية التحميل حيث تكون الأداء والاستقرار أمرين بالغي الأهمية. بدون مراقبة، لن تتمكن من:
- تتبع الطلبات البطيئة
- العثور على تسربات الذاكرة أو حالات الذعر (panic)
- فهم سبب تعطل خدمة مصغرة (microservice)
يحل tracing هذه المشكلة من خلال توفير أدوات لجمع المقاييس (metrics)، والتتبع (tracing)، والتسجيل (logging) في واجهة برمجة تطبيقات (API) موحدة.
التثبيت
أضف إلى Cargo.toml:
[dependencies]tracing = "0.1"tracing-subscriber = "0.3"tracing-appender = "0.2"للمراقبة المتقدمة (OpenTelemetry)، استخدم tracing-opentelemetry.
الوظائف الأساسية
- النطاقات (spans) — فترات زمنية مع سياق (مثل معالجة طلب HTTP).
- الأحداث (events) — نقاط زمنية (مثل خطأ أو تحذير).
- الحقول المنظمة — تمرير البيانات بتنسيق key=value.
- الدعم غير المتزامن — العمل بشكل صحيح مع
tokio/async-std. - التصدير إلى OpenTelemetry — التكامل مع Jaeger, Prometheus, Grafana.
مثال على كود Rust
use tracing::{info, error, span, Level};use tracing_subscriber;
fn main() { // تهيئة المسجل (logger) tracing_subscriber::fmt() .with_env_filter("my_app=info") .init();
// إنشاء نطاق (على سبيل المثال، لطلب HTTP) let root = span!(Level::INFO, "request", method = "GET", path = "/api/users"); let _guard = root.enter();
// تسجيل مع سياق info!(user_id = 42, "معالجة الطلب"); // خطأ مع حقول error!( error_code = 500, message = "خطأ داخلي في الخادم", "حدث خطأ أثناء جلب البيانات" );
// الخروج التلقائي من النطاق عند إسقاط _guard}متى تستخدم؟
- الخدمات المصغرة في Rust — تتبع الطلبات بين الخدمات.
- واجهات برمجة التطبيقات عالية التحميل — البحث عن الاختناقات.
- التطبيقات غير المتزامنة — التسجيل الصحيح في
tokio. - أنظمة الوقت الفعلي — مراقبة زمن الاستجابة.
tracing هو المعيار الفعلي للمراقبة في نظام Rust البيئي. يُستخدم في مشاريع مثل Tokio، Actix-web و Warp.