prom-client लाइब्रेरी: Prometheus के साथ Node.js एप्लिकेशन की मॉनिटरिंग
आधुनिक वेब डेवलपमेंट में, एप्लिकेशन के प्रदर्शन और स्थिति की मॉनिटरिंग एक आवश्यकता बन गई है। मेट्रिक्स को इकट्ठा करने और विश्लेषण करने के लिए सबसे लोकप्रिय समाधानों में से एक Prometheus है - एक ओपन-सोर्स सिस्टम जो टाइम सीरीज़ के रूप में डेटा एकत्र करता है। Node.js के साथ एकीकरण के लिए, आधिकारिक लाइब्रेरी prom-client मौजूद है, जो Prometheus द्वारा समझे जाने वाले प्रारूप में मेट्रिक्स को आसानी से एक्सपोर्ट करने की अनुमति देती है।
इस लेख में, हम विस्तार से जानेंगे कि prom-client को कैसे इंस्टॉल और उपयोग करें, कौन से प्रकार के मेट्रिक्स उपलब्ध हैं, और उन्हें वेब फ्रेमवर्क Express के साथ कैसे एकीकृत करें।
इंस्टॉलेशन और कनेक्शन
शुरू करने के लिए, npm के माध्यम से लाइब्रेरी इंस्टॉल करें:
npm install prom-clientइंस्टॉलेशन के बाद, इसे अपने एप्लिकेशन में इम्पोर्ट करें:
const prometheus = require('prom-client');const express = require('express');const app = express();मेट्रिक्स के मुख्य प्रकार
prom-client लाइब्रेरी Prometheus के चार मुख्य प्रकार के मेट्रिक्स को सपोर्ट करती है:
- Counter — एक काउंटर जो केवल बढ़ता है (उदाहरण: अनुरोधों की संख्या)।
- Gauge — एक मान जो बढ़ और घट सकता है (उदाहरण: सक्रिय कनेक्शनों की संख्या)।
- Histogram — एक हिस्टोग्राम जो मानों के वितरण को मापता है (उदाहरण: प्रतिक्रिया समय)।
- Summary — एक सारांश सांख्यिकी, Histogram के समान, लेकिन अधिक सटीक क्वांटाइल्स के साथ।
उदाहरण: Counter (अनुरोध काउंटर)
HTTP अनुरोधों की कुल संख्या को ट्रैक करने के लिए एक काउंटर बनाएं:
const httpRequestsTotal = new prometheus.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status']});
// अनुरोधों की गणना के लिए Middlewareapp.use((req, res, next) => { res.on('finish', () => { httpRequestsTotal.inc({ method: req.method, route: req.path, status: res.statusCode }); }); next();});उदाहरण: Gauge (सक्रिय कनेक्शन)
Gauge वर्तमान स्थिति को ट्रैक करने के लिए उपयोगी है, जैसे सक्रिय उपयोगकर्ताओं की संख्या:
const activeUsers = new prometheus.Gauge({ name: 'active_users', help: 'Number of active users'});
app.get('/login', (req, res) => { activeUsers.inc(); // लॉगिन करने पर बढ़ाएं res.send('Logged in');});
app.get('/logout', (req, res) => { activeUsers.dec(); // लॉगआउट करने पर घटाएं res.send('Logged out');});उदाहरण: Histogram (प्रतिक्रिया समय)
Histogram यह मापने की अनुमति देता है कि अनुरोधों को प्रोसेस करने में कितना समय लगता है:
const httpRequestDuration = new prometheus.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route'], buckets: [0.1, 0.5, 1, 2, 5] // सेकंड में बकेट सीमाएं});
app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.path }); }); next();});Prometheus के लिए मेट्रिक्स एक्सपोर्ट करना
Prometheus को डेटा एकत्र करने में सक्षम बनाने के लिए, एक endpoint (आमतौर पर /metrics) बनाएं जो सभी पंजीकृत मेट्रिक्स लौटाता है:
app.get('/metrics', async (req, res) => { res.set('Content-Type', prometheus.register.contentType); res.end(await prometheus.register.metrics());});
app.listen(3000, () => { console.log('Server running on port 3000');});लेबल के साथ कस्टम मेट्रिक्स
अधिक विस्तृत फ़िल्टरिंग के लिए आप लेबल जोड़ सकते हैं। उदाहरण के लिए, मेट्रिक्स को API संस्करणों के अनुसार विभाजित करें:
const apiCalls = new prometheus.Counte