مراقبة تطبيقات Rust: المكتبات والأدوات لتتبع الأداء

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مراقبة تطبيقات Rust: نظرة شاملة على المكتبات والأدوات



Rust هي لغة برمجة أنظمة تُستخدم بشكل متزايد لإنشاء خدمات ويب عالية التحميل، وبرامج خلفية للشبكات، ومكونات البنية التحتية. ومع ذلك، حتى أسرع كود يحتاج إلى مراقبة. في هذه المقالة، سنستعرض المكتبات الرئيسية لمراقبة تطبيقات Rust: tracing و metrics والتكامل مع OpenTelemetry. ستتعلم كيفية جمع السجلات والمقاييس والتتبعات لإبقاء تطبيقك تحت السيطرة.



1. لماذا نحتاج إلى المراقبة في Rust؟

بدون مراقبة، لن تعرف بوجود مشاكل حتى يبدأ المستخدمون في الشكوى. تطبيقات Rust عادةً ما تعمل في بيئة الإنتاج 24/7، لذلك من المهم تتبع:

  • استهلاك الذاكرة ووحدة المعالجة المركزية (CPU)؛
  • وقت الاستجابة للطلبات؛
  • عدد الأخطاء وحالات الذعر (panics)؛
  • حالة الاتصالات بقواعد البيانات وواجهات برمجة التطبيقات الخارجية (API).

الخبر السار: النظام البيئي لـ Rust يقدم حلولاً ناضجة لقابلية المراقبة (observability).



2. مكتبة tracing — التسجيل المنظم والتتبع

tracing هو إطار عمل لأدوات البرمجة في Rust. يسمح لك بإنشاء نطاقات (span) — وحدات عمل يمكن تداخلها مع بعضها البعض، وأحداث (event) — نقاط تحتوي على معلومات.



التثبيت

[dependencies]tracing = "0.1"tracing-subscriber = "0.3"


مثال: تتبع أساسي لطلب HTTP

use tracing::{info, span, Level};use tracing_subscriber;

fn handle_request(user_id: u64) { let span = span!(Level::INFO, "handle_request", user_id); let _guard = span.enter(); info!("بدأت معالجة الطلب"); // ... منطق المعالجة ... info!("اكتمل الطلب");}

fn main() { tracing_subscriber::fmt::init(); handle_request(42);}

سيحتوي الإخراج في وحدة التحكم على حقول منظمة يسهل تحليلها باستخدام grep أو إرسالها إلى Jaeger.



3. مكتبة metrics — جمع المقاييس الرقمية

metrics هي مكتبة خفيفة الوزن لجمع العدادات والرسوم البيانية البيانية وأجهزة القياس (gauges). إنها مثالية للمراقبة في الوقت الفعلي.



التثبيت

[dependencies]metrics = "0.22"metrics-exporter-prometheus = "0.14"


مثال: عداد الطلبات ورسم بياني للوقت

use metrics::{counter, histogram};use std::time::Instant;

fn process_request() { let start = Instant::now(); counter!("requests_total", 1); // ... محاكاة العمل ... std::thread::sleep(std::time::Duration::from_millis(50)); let duration = start.elapsed().as_secs_f64(); histogram!("request_duration_seconds", duration);}

لجعل المقاييس متاحة عبر HTTP (لـ Prometheus)، أضف المُصدر:

use metrics_exporter_prometheus::PrometheusBuilder;

fn setup_metrics() { let builder = PrometheusBuilder::new(); builder.install().expect("فشل تثبيت المُصدر"); // ستكون المقاييس متاحة على http://localhost:9000/metrics}


4. OpenTelemetry — معيار قابلية المراقبة العالمي

OpenTelemetry (OTel) هو إطار عمل محايد للبائعين لجمع التتبعات والمقاييس والسجلات. بالنسبة لـ Rust، هناك كريت opentelemetry مع دعم OTLP (بروتوكول OpenTelemetry).



التثبيت

[dependencies]opentelemetry = { version = "0.22", features = ["rt-tokio"] }opentelemetry-otlp = "0.15"tracing-opentelemetry = "0.23"


مثال: دمج tracing مع OpenTelemetry

use opentelemetry::global;use tracing_subscriber::layer::SubscriberExt;use tracing_subscriber::Registry;

fn init_otel() { let tracer = opentelemetry_otlp::new_pipeline() .install_simple()

توصيات