Rust में Prometheus मेट्रिक्स: prometheus और metrics लाइब्रेरी

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

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

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

Rust में Prometheus मेट्रिक्स: प्रदर्शन और विश्वसनीयता की निगरानी

आधुनिक Rust बैकएंड डेवलपमेंट में, मॉनिटरिंग प्रोडक्शन इंफ्रास्ट्रक्चर का एक अनिवार्य हिस्सा बन गया है। Prometheus मेट्रिक्स को इकट्ठा करने और स्टोर करने का डी-फैक्टो मानक है, और Rust के साथ इसका एकीकरण आपको प्रदर्शन, CPU लोड, अनुरोधों की संख्या, त्रुटियों और बहुत कुछ ट्रैक करने की अनुमति देता है। इस लेख में, हम दो मुख्य लाइब्रेरी देखेंगे: prometheus (आधिकारिक क्लाइंट) और metrics + metrics-exporter-prometheus (अधिक एब्सट्रैक्ट दृष्टिकोण)।

Rust में मेट्रिक्स की आवश्यकता क्यों?

मेट्रिक्स आपको यह करने में सक्षम बनाते हैं:

  • रीयल-टाइम में सेवा की स्थिति को ट्रैक करना
  • बाधाओं का पता लगाना (लेटेंसी, त्रुटियाँ)
  • Grafana में डैशबोर्ड बनाना
  • अलर्ट सेट करना (जैसे, QPS गिरने या त्रुटियाँ बढ़ने पर)

prometheus लाइब्रेरी की स्थापना और सेटअप

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

[dependencies]
prometheus = { version = "0.13", features = ["process"] }
actix-web = "4"  # वेब सर्वर उदाहरण के लिए
tokio = { version = "1", features = ["full"] }

prometheus लाइब्रेरी तीन मुख्य प्रकार के मेट्रिक्स प्रदान करती है: Counter, Gauge, Histogram।

उदाहरण: मेट्रिक्स बनाना और रजिस्टर करना

use prometheus::{Counter, Gauge, Histogram, HistogramOpts, Opts, Registry};

fn main() {
    // मेट्रिक्स रजिस्ट्री बनाएँ
    let registry = Registry::new();

    // Counter — अनुरोधों की गणना
    let request_counter = Counter::with_opts(
        Opts::new("http_requests_total", "कुल HTTP अनुरोध")
            .const_label("service", "my_app")
    ).unwrap();
    registry.register(Box::new(request_counter.clone())).unwrap();

    // Gauge — वर्तमान सक्रिय कनेक्शनों की संख्या
    let active_connections = Gauge::with_opts(
        Opts::new("active_connections", "सक्रिय कनेक्शनों की संख्या")
    ).unwrap();
    registry.register(Box::new(active_connections.clone())).unwrap();

    // Histogram — प्रतिक्रिया समय का वितरण
    let request_duration = Histogram::with_opts(
        HistogramOpts::new("http_request_duration_seconds", "सेकंड में अनुरोध अवधि")
            .buckets(vec![0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1.0, 2.5, 5.0, 10.0])
    ).unwrap();
    registry.register(Box::new(request_duration.clone())).unwrap();

    // उपयोग का अनुकरण
    request_counter.inc();
    active_connections.set(42.0);
    request_duration.observe(0.123);
}

HTTP के माध्यम से मेट्रिक्स निर्यात (actix-web)

Prometheus को मेट्रिक्स इकट्ठा करने के लिए, उन्हें /metrics प्रारूप में प्रस्तुत करना होगा:

use actix_web::{web, App, HttpServer, HttpResponse, Responder};
use prometheus::{Encoder, TextEncoder, Registry};
use std::sync::Arc;

async fn metrics_handler(registry: web::Data<Arc<Registry>>) -> impl Responder {
    let encoder = TextEncoder::new();
    let mut buffer = Vec::new();
    encoder.encode(®istry.gather(), &mut buffer).unwrap();
    HttpResponse::Ok()
        .content_type("text/plain; charset=utf-8")
        .body(buffer)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    let registry = Arc::new(Registry::new());
    // ... ऊपर की तरह मेट्रिक्स रजिस्टर करें ...

    HttpServer::new(move || {
        App::new()
            .app_data(web::Data::new(registry.clone()))
            .route("/metrics", web::get().to(metrics_handler))
    })
    .bind("127.0.0.1:9090")?
    .run()
    .await
}

metrics लाइब्रेरी — उच्च-स्तरीय दृष्टिकोण

विकल्प metrics क्रेट है जिसमें metrics-exporter-prometheus एक्सपोर्टर है। यह तेजी से मेट्रिक्स बनाने के लिए मैक्रोज़ प्रदान करता है:

[dependencies]
metrics = "0.21"
metrics-exporter-prometheus = "0.12"
use metrics::{counter, gauge, histogram};
use metrics_exporter                    

अनुशंसाएँ