TypeScript में Prometheus मेट्रिक्स: व्यावहारिक गाइड
Prometheus एक शक्तिशाली ओपन-सोर्स मॉनिटरिंग और अलर्टिंग सिस्टम है। TypeScript एप्लिकेशन के साथ एकीकरण के लिए prom-client (Prometheus Client) लाइब्रेरी का उपयोग किया जाता है। यह मेट्रिक्स को Prometheus सर्वर द्वारा समझे जाने वाले प्रारूप में एकत्रित, एकत्रीकृत और निर्यात करने की अनुमति देता है। इस लेख में, हम TypeScript में Prometheus मेट्रिक्स के साथ काम करने के तरीके पर विस्तार से चर्चा करेंगे, जिसमें मेट्रिक प्रकार, कोड उदाहरण और सर्वोत्तम अभ्यास शामिल हैं।
इंस्टॉलेशन और सेटअप
आरंभ करने के लिए, npm के माध्यम से पैकेज इंस्टॉल करें:
npm install prom-clientTypeScript के लिए, टाइप्स भी इंस्टॉल करने होंगे:
npm install @types/prom-client --save-devइंस्टॉलेशन के बाद, क्लाइंट को इनिशियलाइज़ करने के लिए metrics.ts फ़ाइल बनाएँ:
import client from 'prom-client';
// डिफ़ॉल्ट मेट्रिक्स (GC, मेमोरी, CPU) का संग्रह सक्षम करेंconst collectDefaultMetrics = client.collectDefaultMetrics;collectDefaultMetrics({ timeout: 5000 });
// मेट्रिक्स को स्टोर करने के लिए एक रजिस्टर बनाएँconst register = client.register;
export { client, register };Prometheus मेट्रिक्स के मुख्य प्रकार
Prometheus चार मुख्य प्रकार के मेट्रिक्स का समर्थन करता है। आइए TypeScript में उदाहरणों के साथ प्रत्येक पर विचार करें।
1. Counter (काउंटर)
उन घटनाओं की गणना करने के लिए उपयोग किया जाता है जो केवल बढ़ती हैं (अनुरोध, त्रुटियाँ)।
import { Counter } from 'prom-client';
const httpRequestsTotal = new Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'path', 'status_code'],});
// अनुरोध पर काउंटर बढ़ाएँhttpRequestsTotal.inc({ method: 'GET', path: '/api', status_code: 200 });httpRequestsTotal.inc({ method: 'POST', path: '/users', status_code: 201 }, 2); // +22. Gauge (गेज)
बढ़ और घट सकता है। वर्तमान मानों (मेमोरी, कतार) के लिए उपयोग किया जाता है।
import { Gauge } from 'prom-client';
const memoryUsageGauge = new Gauge({ name: 'memory_usage_bytes', help: 'Current memory usage in bytes',});
// मान सेट करेंmemoryUsageGauge.set(process.memoryUsage().heapUsed);
// डेल्टा से बदलेंmemoryUsageGauge.inc(1024); // +1KBmemoryUsageGauge.dec(512); // -512B3. Histogram (हिस्टोग्राम)
मानों के वितरण को मापता है (उदाहरण के लिए, प्रतिक्रिया समय)।
import { Histogram } from 'prom-client';
const httpRequestDuration = new Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route'], buckets: [0.1, 0.3, 0.5, 1, 2, 5], // सेगमेंट की सीमाएँ});
// मान का अवलोकन करेंconst start = Date.now();// ... अनुरोध प्रसंस्करण ...httpRequestDuration.observe( { method: 'GET', route: '/api' }, (Date.now() - start) / 1000);4. Summary (सारांश)
हिस्टोग्राम के समान, लेकिन क्लाइंट साइड पर क्वांटाइल की गणना करता है।
import { Summary } from 'prom-client';
const responseTimeSummary = new Summary({ name: 'response_time_summary_seconds', help: 'Response time summary in seconds', percentiles: [0.5, 0.9, 0.99], // क्वांटाइल});
responseTimeSummary.observe(0.42);responseTimeSummary.observe(0.35);Prometheus के लिए मेट्रिक्स निर्यात करना
एक /metrics एंडपॉइंट बनाएँ जो टेक्स्ट प्रारूप में मेट्रिक्स प्रदान करेगा:
import express from 'express';import { register } from './metrics';
const app = express();
app.get('/metrics', async (req, res) => { try { res.set('Content-Type', register.contentType); res.end(await register.metrics()); } catch (err) { res.status(500).end(err); }});
app.listen(3000, () => console.log('Server running on port 3000'));अब GET-अनुरोध पर