PHP में Prometheus मेट्रिक्स: promphp/prometheus_client_php लाइब्रेरी की पूरी गाइड
Prometheus आधुनिक DevOps इंफ्रास्ट्रक्चर में मेट्रिक्स इकट्ठा करने का डी-फैक्टो स्टैंडर्ड है। अगर आपका बैकएंड एप्लिकेशन PHP में लिखा है, तो आपको एक ऐसे टूल की ज़रूरत है जो Prometheus सर्वर को समझ में आने वाले फॉर्मेट में मेट्रिक्स एक्सपोर्ट कर सके। promphp/prometheus_client_php लाइब्रेरी इस काम के लिए सबसे परिपक्व और मेंटेन किया जाने वाला समाधान है। इस आर्टिकल में हम सीखेंगे कि लाइब्रेरी कैसे इंस्टॉल करें, बेसिक मेट्रिक्स (काउंटर, हिस्टोग्राम, समरी) कैसे बनाएं और उन्हें /metrics एंडपॉइंट पर कैसे दिखाएं।
promphp/prometheus_client_php क्या है?
यह Prometheus के लिए ऑफिशियल PHP क्लाइंट है, जिसे promphp कम्युनिटी ने डेवलप किया है। यह लाइब्रेरी सपोर्ट करती है:
- चार मुख्य मेट्रिक प्रकार: Counter (काउंटर), Gauge (गेज), Histogram (हिस्टोग्राम), Summary (समरी)।
- स्टोरेज एडॉप्टर: मेमोरी (टेस्ट के लिए), Redis, APCu या फ़ाइल सिस्टम।
- Prometheus टेक्स्ट फॉर्मेट (text/plain) में आउटपुट फॉर्मेटिंग।
- मल्टी-डायमेंशनल डेटा के लिए लेबल (labels) का सपोर्ट।
इंस्टॉलेशन
इंस्टॉलेशन Composer के ज़रिए होता है। अपने प्रोजेक्ट की रूट डायरेक्टरी में टर्मिनल खोलें और यह कमांड चलाएं:
composer require promphp/prometheus_client_php
इंस्टॉल होने के बाद, अपने PHP स्क्रिप्ट में Composer का ऑटोलोडर शामिल करें:
require __DIR__ . '/vendor/autoload.php';
मेट्रिक रजिस्ट्री और स्टोरेज एडॉप्टर बनाना
पहला कदम है Registry (रजिस्ट्री) ऑब्जेक्ट बनाना, जिसमें सभी मेट्रिक्स स्टोर होंगी, और स्टोरेज एडॉप्टर चुनना। आसानी के लिए हम in-memory एडॉप्टर का उपयोग करेंगे (डेटा सिर्फ एक रिक्वेस्ट के दौरान रहता है)। प्रोडक्शन के लिए आमतौर पर Redis या APCu का उपयोग किया जाता है।
use Prometheus\CollectorRegistry;
use Prometheus\Storage\InMemory;
$registry = new CollectorRegistry(new InMemory());
उदाहरण 1: Counter — रिक्वेस्ट की संख्या गिनना
काउंटर (Counter) एक मोनोटोनिक रूप से बढ़ने वाला मान है। यह HTTP रिक्वेस्ट, एरर, डेटाबेस कॉल आदि गिनने के लिए एकदम सही है।
// काउंटर प्राप्त करें या बनाएं
$counter = $registry->getOrRegisterCounter(
'my_app', // namespace
'http_requests_total', // मेट्रिक का नाम
'Total number of HTTP requests', // help-विवरण
['method', 'endpoint'] // मेट्रिक लेबल
);
// विशिष्ट लेबल के साथ काउंटर बढ़ाएं
$counter->incBy(1, ['GET', '/api/users']);
/metrics आउटपुट में यह इस तरह दिखेगा:
# HELP my_app_http_requests_total Total number of HTTP requests
# TYPE my_app_http_requests_total counter
my_app_http_requests_total{method="GET",endpoint="/api/users"} 1
उदाहरण 2: Gauge — वर्तमान मान (मेमोरी, कनेक्शन)
Gauge बढ़ और घट सकता है। इसका उपयोग वर्तमान स्थिति को ट्रैक करने के लिए किया जाता है: एक्टिव कनेक्शन की संख्या, उपयोग की गई मेमोरी, टास्क क्यू आदि।
use Prometheus\Gauge;
$gauge = $registry->getOrRegisterGauge(
'my_app',
'memory_usage_bytes',
'Current memory usage in bytes',
['pool']
);
// मान सेट करें
$gauge->set(memory_get_usage(true), ['main']);
// या वर्तमान मान के सापेक्ष बदलें
$gauge->inc(1024, ['main']); // +1KB
$gauge->dec(512, ['main']); // -512B
उदाहरण 3: Histogram — मानों का वितरण (रिस्पॉन्स टाइम)
हिस्टोग्राम दिए गए बकेट (buckets) के अनुसार ऑब्जर्वेशन को ग्रुप करता है। यह रिक्वेस्ट के समय या रिस्पॉन्स साइज़ को मापने के लिए बहुत उपयोगी है।
use Prometheus\Histogram;
$histogram = $registry->getOrRegisterHistogram(
'my_app',
'http_request_duration_seconds',
'Duration of HTTP requests in seconds',
['method', 'endpoint'],
[0.1, 0.5, 1.0, 2.0, 5.0] // buckets
);
// ऑब्जर्वेशन: समय मापें
$start = microtime(true);
// ... आपका कोड ...
$duration = microtime(true) - $start;
$histogram->observe($duration, ['GET', '/api/users']);