Rust अनुप्रयोगों की निगरानी: प्रमुख उपकरणों और पुस्तकालयों का अवलोकन
Rust एक सिस्टम प्रोग्रामिंग भाषा है, जिसका उपयोग उच्च-लोड और महत्वपूर्ण सेवाओं के निर्माण के लिए तेजी से किया जा रहा है। हालांकि, सबसे विश्वसनीय कोड भी production-वातावरण में विफल हो सकता है। प्रभावी निगरानी समय पर समस्याओं का पता लगाने, उनके कारण को समझने और एप्लिकेशन के स्थिर संचालन को सुनिश्चित करने में मदद करती है। इस लेख में, हम Rust अनुप्रयोगों की निगरानी के लिए मुख्य पुस्तकालयों और उपकरणों पर चर्चा करेंगे: मीट्रिक्स संग्रह से लेकर वितरित ट्रेसिंग तक।
1. मीट्रिक्स का संग्रह और निर्यात
मीट्रिक्स एप्लिकेशन की स्थिति के संख्यात्मक संकेतक हैं (अनुरोधों की संख्या, प्रतिक्रिया समय, मेमोरी उपयोग आदि)। Rust में इन्हें एकत्र करने के लिए दो मुख्य पुस्तकालयों का उपयोग किया जाता है।
1.1. metrics और metrics-exporter-prometheus
metrics इकोसिस्टम मीट्रिक्स को पंजीकृत करने का एक हल्का और लचीला तरीका प्रदान करता है। यह काउंटर, हिस्टोग्राम, गेज और अन्य प्रकारों का समर्थन करता है। Prometheus में निर्यात के लिए metrics-exporter-prometheus क्रेट का उपयोग किया जाता है।
use metrics::{counter, histogram};use metrics_exporter_prometheus::PrometheusBuilder;use std::net::SocketAddr;
#[tokio::main]async fn main() -> Result<(), Box<dyn std::error::Error>> { // Prometheus के लिए HTTP एंडपॉइंट सेटअप let addr: SocketAddr = "0.0.0.0:9000".parse()?; let builder = PrometheusBuilder::new().with_http_listener(addr); builder.install()?;
// मीट्रिक्स पंजीकरण counter!("http_requests_total", 1); histogram!("request_duration_seconds", 0.045);
// पृष्ठभूमि में मीट्रिक्स रिकॉर्ड करना loop { counter!("http_requests_total", 1); histogram!("request_duration_seconds", 0.023); tokio::time::sleep(tokio::time::Duration::from_secs(5)).await; }}लाभ: उच्च प्रदर्शन, न्यूनतम मेमोरी खपत, कस्टम एक्सपोर्टर्स का समर्थन।
1.2. opentelemetry (मीट्रिक्स)
OpenTelemetry टेलीमेट्री संग्रह के लिए एक सार्वभौमिक मानक है। opentelemetry क्रेट मीट्रिक्स, ट्रेस और लॉग का समर्थन करता है। Prometheus में निर्यात के लिए opentelemetry-prometheus का उपयोग किया जाता है।
use opentelemetry::{global, KeyValue};use opentelemetry::metrics::MeterProvider;use opentelemetry_prometheus::PrometheusExporter;
fn init_meter() { let exporter = PrometheusExporter::default(); let provider = opentelemetry::sdk::metrics::MeterProvider::builder() .with_reader(exporter) .build(); global::set_meter_provider(provider);}
fn main() { init_meter(); let meter = global::meter("my_app"); let counter = meter.u64_counter("requests").init();
counter.add(1, &[KeyValue::new("method", "GET")]);}लाभ: मानकीकरण, बैकएंड (Prometheus, Datadog, InfluxDB) के बीच स्विच करने की क्षमता।
2. वितरित ट्रेसिंग
ट्रेसिंग कई माइक्रोसर्विसेज के माध्यम से अनुरोध के पथ को ट्रैक करने में मदद करती है। Rust के लिए सबसे अच्छा विकल्प tracing है।
2.1. क्रेट tracing और tracing-opentelemetry
tracing लाइब्रेरी संरचित लॉगिंग और ट्रेसिंग प्रदान करती है। यह tracing-opentelemetry के माध्यम से OpenTelemetry के साथ एकीकृत होती है।
use tracing::{info, span, Level};use tracing_subscriber::fmt;use opentelemetry::global;use opentelemetry_otlp::WithExportConfig;
fn init_tracer() { let tracer = opentelemetry_otlp::new_pipeline() .tracing() .with_exporter(opentelemetry_otlp::new_exporter().tonic().with_endpoint("http://localhost:4317")) .install_simple() .expect("OTLP ट्रेसर स्थापित करने में विफल"); let telemetry = tracing_opentelemetry::layer().with_tracer(tracer); let subscriber = fmt::Subscriber::