Java में ऑब्ज़र्वेबिलिटी: प्रोफेशनल्स के लिए ट्रेसिंग, मेट्रिक्स, लॉग्स

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

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

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

Java में ऑब्ज़र्वेबिलिटी: "यह क्यों गिरा?" से "मुझे पता है एक मिनट में क्या होगा" तक

\n\n

कल्पना करें: आपका Java एप्लिकेशन प्रोडक्शन में चल रहा है। सब कुछ ठीक है। और फिर — बम! — उपयोगकर्ता शिकायत करते हैं कि पेज लोड होने में 10 सेकंड लग रहे हैं। आप सर्वर में जाते हैं, लॉग्स देखते हैं, ढेर सारे INFO और एक भी ERROR नहीं दिखता। क्या करें? कहाँ देखें?

\n\n

क्लासिकल मॉनिटरिंग में, आप जाँचते हैं: क्या सर्वर चालू है, कितनी मेमोरी उपयोग हो रही है, क्या प्रोसेस क्रैश हुआ है। लेकिन यह ऐसा है जैसे डैशबोर्ड पर बल्ब जल रहा है या नहीं — उपयोगी है, लेकिन पर्याप्त नहीं। ऑब्ज़र्वेबिलिटी (अवलोकनीयता) अगला स्तर है। यह सिस्टम के बाहरी आउटपुट डेटा: लॉग्स, मेट्रिक्स और ट्रेसेस के आधार पर उसकी आंतरिक स्थिति को समझने की क्षमता है।

\n\n

इस लेख में, मैं दिखाऊंगा कि वास्तविक उदाहरणों के साथ Java में ऑब्ज़र्वेबिलिटी कैसे लागू करें। हम OpenTelemetry, Micrometer, Spring Boot Actuator और क्लासिक SLF4J का उपयोग करेंगे। आप सीखेंगे कि लॉग्स, मेट्रिक्स और ट्रेसेस को एक एकीकृत तस्वीर में कैसे जोड़ा जाए, न कि केवल "सब कुछ एक साथ इकट्ठा करना"।

\n\n

ऑब्ज़र्वेबिलिटी क्या है और यह केवल "लॉग्स इकट्ठा करना" क्यों नहीं है?

\n\n

ऑब्ज़र्वेबिलिटी नियंत्रण सिद्धांत से आई है। एक सिस्टम अवलोकनीय है यदि उसके आउटपुट डेटा से आंतरिक स्थिति को पुनर्स्थापित किया जा सके। Java की दुनिया में, इसका अर्थ है तीन स्तंभ:

\n\n
    \n
  • लॉग्स — घटनाओं के संरचित रिकॉर्ड (क्या हुआ?);
  • \n
  • मेट्रिक्स — संख्यात्मक संकेतक (कितना? कितनी देर?);
  • \n
  • ट्रेसेस — कॉल की श्रृंखलाएँ (अनुरोध ने कौन सा रास्ता अपनाया?)।
  • \n
\n\n

ऑब्ज़र्वेबिलिटी के बिना, आप अंधे हैं। आप जानते हैं कि CPU 95% लोड है, लेकिन यह नहीं जानते कि कौन सा विशेष एंडपॉइंट इसे लोड कर रहा है। आप लॉग में एक त्रुटि देखते हैं, लेकिन यह नहीं समझते कि किस उपयोगकर्ता ने इसे ट्रिगर किया और कौन सी सेवाएँ शामिल थीं। Java में ऑब्ज़र्वेबिलिटी केवल "एक लाइब्रेरी इंस्टॉल करना" नहीं है, बल्कि एक विकास संस्कृति है।

\n\n

OpenTelemetry: ऑब्ज़र्वेबिलिटी के लिए एक सार्वभौमिक उपकरण

\n\n

पहले एक चिड़ियाघर था: ट्रेसिंग के लिए Zipkin, मेट्रिक्स के लिए Prometheus, लॉग्स के लिए ELK। प्रत्येक का अपना SDK था। OpenTelemetry (OTel) उन्हें एकीकृत करने आया। यह टेलीमेट्री संग्रह के लिए एक ओपन-सोर्स मानक है। यह Java को मूल रूप से सपोर्ट करता है और Spring Boot, Micronaut, Quarkus में आसानी से एम्बेड हो जाता है।

\n\n

यह कैसे काम करता है? आप अपने Java एप्लिकेशन में एक एजेंट या SDK जोड़ते हैं, और OTel स्वचालित रूप से HTTP अनुरोधों, डेटाबेस कॉल्स, मैसेज क्यू को इंटरसेप्ट करता है। आपको प्रत्येक टूल के लिए अलग से कोड लिखने की आवश्यकता नहीं है।

\n\n

उदाहरण: Spring Boot में OpenTelemetry सेटअप

\n\n

pom.xml में डिपेंडेंसी जोड़ें:

\n\n
<dependency>\n    <groupId>io.opentelemetry</groupId>\n    <artifactId>opentelemetry-api</artifactId>\n    <version>1.40.0</version>\n</dependency>\n<dependency>\n    <groupId>io.opentelemetry</groupId>\n    <artifactId>opentelemetry-sdk</artifactId>\n    <version>1.40.0</version>\n</dependency>\n<dependency>\n    <groupId>io.opentelemetry.instrumentation</groupId>\n    <artifactId>opentelemetry-spring-boot-starter</artifactId>\n    <version>2.6.0</version>\n</dependency>
\n\n

अब कॉन्फ़िगरेशन (application.yml) में एक्सपोर्टर निर्दिष्ट करें, उदाहरण के लिए, Jaeger या OTLP-कलेक्टर में:

\n\n
otel:\n  exporter:\n    otlp:\n      endpoint: http://localhost:4317\n  traces:\n    exporter: otlp\n  metrics:\n    exporter: otlp\n  logs:\n    exporter: otlp
\n\n

वोइला! अब आपके कंट्रोलर पर प्रत्येक HTTP अनुरोध स्वचालित रूप से एक ट्रेस बनाता है। आप देख सकते हैं कि प्रत्येक डेटाबेस कॉल, बाहरी API या थ्रेड में देरी में कितना समय लगा।

\n\n

Java में ट्रेसिंग: "बॉटलनेक" कैसे खोजें

\n\n

ट्रेसिंग शायद ऑब्ज़र्वेबिलिटी का सबसे शक्तिशाली हिस्सा है। जब आपका एप्लिकेशन दर्जनों माइक्रोसर्विसेज से बना होता है, तो ट्रेसेस यह समझने का एकमात्र तरीका है कि अनुरोध 2 सेकंड क्यों लेता है, जबकि प्रत्येक सर्व

ब्लॉग

पुस्तक अनुशंसाएँ