Rust अनुप्रयोगों की निगरानी: tracing लाइब्रेरी और मीट्रिक्स

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Rust अनुप्रयोगों की निगरानी: tracing लाइब्रेरी और मीट्रिक्स संग्रह

\n\n

निगरानी production-सिस्टम का एक महत्वपूर्ण तत्व है। अपने प्रदर्शन और विश्वसनीयता के लिए जाने जाने वाले Rust अनुप्रयोगों के लिए, टेलीमेट्री एकत्र करने के लिए एक हल्का और कुशल उपकरण होना महत्वपूर्ण है। tracing लाइब्रेरी Rust पारिस्थितिकी तंत्र में अवलोकनीयता के लिए डी-फैक्टो मानक बन गई है। यह संरचित लॉगिंग, अनुरोध ट्रेसिंग के लिए स्पैन और मीट्रिक्स संग्रह प्रणालियों के साथ एकीकरण प्रदान करती है।

\n\n

tracing क्या है?

\n\n

tracing Rust प्रोग्रामों के इंस्ट्रुमेंटेशन के लिए एक फ्रेमवर्क है। पारंपरिक लॉगिंग के विपरीत, यह इवेंट और स्पैन के आधार पर काम करता है। स्पैन कोड निष्पादन के अस्थायी खंडों का प्रतिनिधित्व करते हैं (जैसे, HTTP अनुरोध प्रसंस्करण), जबकि इवेंट स्पैन के अंदर बिंदु होते हैं (जैसे, "डेटाबेस ने 10 ms में उत्तर दिया")।

\n\n

मुख्य क्षमताएँ:

\n
    \n
  • संरचित लॉगिंग — प्रत्येक इवेंट में केवल एक स्ट्रिंग के बजाय फ़ील्ड (कुंजी-मान) होते हैं।
  • \n
  • स्पैन का पदानुक्रम — स्पैन को एक दूसरे के अंदर नेस्ट किया जा सकता है, जिससे निष्पादन का पूरा पथ ट्रैक किया जा सकता है।
  • \n
  • अतुल्यकालिक समर्थन — tokio और async/await के साथ बढ़िया काम करता है।
  • \n
  • Subscriber (सब्सक्राइबर) — विभिन्न बैकएंड जोड़े जा सकते हैं: stdout, OpenTelemetry, Prometheus, फ़ाइलें।
  • \n
\n\n

स्थापना और बुनियादी उपयोग

\n\n

Cargo.toml में जोड़ें:

\n
[dependencies]\ntracing = "0.1"\ntracing-subscriber = "0.3"
\n\n

संरचित लॉगिंग का एक सरल उदाहरण:

\n
use tracing::{info, warn, error};\nuse tracing_subscriber;\n\nfn main() {\n    // stdout पर आउटपुट के लिए subscriber आरंभ करें\n    tracing_subscriber::fmt::init();\n\n    let user_id = 42;\n    let request_duration_ms = 150;\n\n    info!(user_id, duration = request_duration_ms, "अनुरोध संसाधित");\n\n    // warn स्तर के साथ लॉगिंग\n    warn!(user_id, "प्रतिक्रिया समय सीमा से अधिक");\n\n    // त्रुटि के साथ लॉगिंग\n    error!("DB से कनेक्ट नहीं हो सका");\n}
\n\n

आउटपुट में JSON-जैसी स्ट्रिंग प्रारूप में फ़ील्ड होंगे, जो निगरानी प्रणालियों में पार्सिंग को सरल बनाता है।

\n\n

स्पैन और ट्रेसिंग

\n\n

स्पैन संचालन के निष्पादन समय को मापने और इवेंट को एक श्रृंखला में जोड़ने की अनुमति देते हैं:

\n
use tracing::{span, info, Level};\nuse tracing_subscriber;\n\nfn process_request(user_id: u32) {\n    // संदर्भ के साथ एक span बनाएँ\n    let span = span!(Level::INFO, "process_request", user_id);\n    let _guard = span.enter(); // span को सक्रिय करें\n\n    info!("प्रसंस्करण शुरू");\n    std::thread::sleep(std::time::Duration::from_millis(50));\n    info!("प्रसंस्करण पूर्ण");\n}\n\nfn main() {\n    tracing_subscriber::fmt::init();\n    process_request(100);\n}
\n\n

आउटपुट में एक नेस्टेड संदर्भ दिखाई देगा, जो दर्शाता है कि इवेंट process_request span से संबंधित हैं।

\n\n

tracing और Prometheus के साथ मीट्रिक्स संग्रह

\n\n

production-निगरानी के लिए अक्सर Prometheus में मीट्रिक्स निर्यात करने की आवश्यकता होती है। फ़ाइल में लिखने के लिए क्रेट tracing-appender या OpenTelemetry के साथ एकीकरण के लिए tracing-opentelemetry का उपयोग करें। हालाँकि, सबसे सीधा तरीका tracing के साथ metrics लाइब्रेरी का उपयोग करना है।

\n\n

metrics-exporter-prometheus के साथ एकीकरण का उदाहरण:

\n
[dependencies]\nmetrics = "0.21"\nmetrics-exporter-prometheus = "0.12"\ntracing = "0.1"\ntokio = { version = "1", features = ["full"] }
\n\n

मीट्रिक्स संग्रह के लिए कोड:

\n
use metrics::{counter, gauge, histogram};\nuse metrics_exporter_prometheus::PrometheusBuilder;\nuse std::net::SocketAddr;\n\n#[tokio::main]\nasync fn main() {\n    // Prometheus के लिए HTTP सर्वर प्रारंभ करें\n    let addr: SocketAddr = "0.0.0.0:9090".parse().unwrap();\n    let builder = PrometheusBuilder::new();\n    builder\n        .wit                    

अनुशंसाएँ