लॉग पार्सर और रिडैक्टर

एक प्रोडक्शन लॉग फ़ाइल डालें और एक फ़िल्टर-योग्य तालिका पाएँ: Apache/Nginx, JSON Lines और syslog अपने आप पहचाने जाते हैं, संवेदनशील मान छिपाए जाते हैं, और साफ़ CSV, JSON या टेक्स्ट बाहर आता है। फ़ाइल कभी आपके ब्राउज़र को नहीं छोड़ती — पार्सिंग स्थानीय रूप से होती है, और यही इस पेज के अस्तित्व की पूरी वजह है।

यह पेज आपके लॉग के साथ क्या करता है

लॉग फ़ाइल तभी उपयोगी होती है जब वह तालिका बन जाए: एक कॉलम में समय, दूसरे में स्तर, और कच्चे टेक्स्ट को स्क्रॉल किए बिना पढ़ा जा सकने वाला संदेश। यह पेज हर लाइन को उन कॉलमों में पार्स करता है, स्तरों को गिनता है, और आपको उन पंक्तियों तक फ़िल्टर करने देता है जो मायने रखती हैं — सिर्फ़ त्रुटियाँ, या वह सब कुछ जिसमें एक होस्टनाम, एक पथ, एक उपयोगकर्ता का ज़िक्र हो। तालिका पहली 1,000 मेल खाती पंक्तियाँ दिखाती है; गिनती पढ़ी गई हर चीज़ को कवर करती है, इसलिए आप हमेशा जानते हैं कि फ़िल्टर ने नौ पंक्तियाँ छिपाईं या नौ हज़ार।

फ़ाइलें एक ही स्ट्रिंग के रूप में लोड होने के बजाय 1 MB के टुकड़ों में पढ़ी जाती हैं, ताकि कई-मेगाबाइट की प्रोडक्शन लॉग लोड होते समय टैब को फ़्रीज़ न करे। पार्स की गई पहली 20,000 पंक्तियाँ फ़िल्टरिंग और निर्यात के लिए रखी जाती हैं; उससे आगे भी पेज हर लाइन गिनता रहता है और कुल योग ईमानदारी से बताता है। अगर आपकी फ़ाइल इससे बड़ी है, तो निर्यात से पहले फ़िल्टर करें — या फ़ाइल को बाँटकर दो बार चलाएँ। इस पूरे प्रवाह में कुछ भी नेटवर्क को नहीं छूता: File API बाइट्स पढ़ती है, पार्सर पेज में चलता है, और निर्यात उन्हीं स्थानीय पंक्तियों से बनता है।

रिडैक्शन पैटर्न मिलान है, गारंटी नहीं

रिडैक्शन उन मानों को छिपाता है जो साझा किए गए लॉग में सबसे अक्सर लीक होते हैं: ईमेल पते, IP पते, Bearer टोकन, AWS एक्सेस कुंजी ID, और api_key, secret, password या token लेबल के बाद लिखे गए मान। यह डिफ़ॉल्ट रूप से चालू है और तालिका तथा हर निर्यात फ़ॉर्मैट पर लागू होता है। लेकिन यह पैटर्न मिलान है, और पैटर्न चीज़ें छोड़ देते हैं — असामान्य फ़ॉर्मैट का टोकन, लाइनों में बँटा हुआ सीक्रेट, किसी ग्राहक की पहचान करने वाला आंतरिक होस्टनाम। निर्यात को सुरक्षित नहीं, अधिक सुरक्षित मानें: इसे कहीं भी भेजने से पहले एक बार पढ़ लें, ख़ासकर अपने संगठन के बाहर। अगर अपने डीबग के लिए आपको कच्चे मान चाहिए, तो रिडैक्शन बंद कर दें — टॉगल तालिका के ठीक ऊपर है।

यही अंतर इस पेज के अस्तित्व की वजह है। प्रोडक्शन लॉग को चैट विंडो या ऑनलाइन व्यूअर में चिपकाना उसके अंदर की सामग्री को हमेशा के लिए किसी तीसरे पक्ष को सौंप देता है; उसे स्थानीय रूप से पार्स करना किसी को कुछ नहीं सौंपता। होस्ट किए गए व्यूअर की सुविधा लॉग की सामग्री के बदले कभी सार्थक नहीं होती, और एक ब्राउज़र टैब जो कभी कोई अनुरोध नहीं करता, यह सुनिश्चित करने का सबसे सरल तरीका है।

अक्सर पूछे जाने वाले प्रश्न

क्या मेरी लॉग फ़ाइल मेरे ब्राउज़र को छोड़ती है?

नहीं। फ़ाइल File API से पढ़ी जाती है और स्थानीय रूप से पार्स होती है; कुछ भी अपलोड नहीं होता, और कोई सर्वर कॉल बिल्कुल नहीं है। यही मुद्दा है: प्रोडक्शन लॉग में पते, टोकन और उपयोगकर्ता डेटा होता है जिसे चैट विंडो में चिपकाना या किसी भी व्यूअर पर अपलोड करना नहीं चाहिए।

कौन से लॉग फ़ॉर्मैट पहचाने जाते हैं?

Apache/Nginx combined एक्सेस लॉग, JSON Lines (प्रति लाइन एक JSON ऑब्जेक्ट), syslog लाइनें, और एक सामान्य फ़ॉलबैक जो किसी भी लाइन में स्तर कीवर्ड खोजता है। अपने-आप पहचान पहले combined, फिर JSON, फिर syslog, फिर सामान्य आज़माती है — या अगर अपने-आप पहचान ग़लत अंदाज़ा लगाए तो फ़ॉर्मैट स्पष्ट रूप से चुनें।

रिडैक्शन वास्तव में क्या छिपाता है?

ईमेल पते, IPv4 और IPv6 पते, Bearer टोकन, AWS एक्सेस कुंजी ID, और api_key/secret/password/token लेबल के बाद के मान। यह पैटर्न मिलान है, गारंटी नहीं: असामान्य फ़ॉर्मैट निकल जाते हैं, इसलिए निर्यात को कहीं भेजने से पहले उसकी समीक्षा कर लें। रिडैक्शन डिफ़ॉल्ट रूप से चालू है और तालिका तथा निर्यात दोनों पर लागू होता है।

मैं कितनी बड़ी फ़ाइल खोल सकता हूँ?

फ़ाइलें 1 MB के टुकड़ों में पढ़ी जाती हैं ताकि कई-मेगाबाइट की लॉग टैब को फ़्रीज़ न करे। सभी लाइनें गिनी जाती हैं, पार्स की गई पहली 20,000 पंक्तियाँ फ़िल्टरिंग और निर्यात के लिए रखी जाती हैं, और तालिका पहली 1,000 मेल खाती पंक्तियाँ दिखाती है। बड़े कामों के लिए, पहले फ़िल्टर करें, फिर निर्यात करें।

कुछ पंक्तियाँ त्रुटियों जैसी दिखती हैं, फिर उनका स्तर "info" क्यों है?

एक्सेस लॉग में कोई स्तर फ़ील्ड नहीं होता, इसलिए स्तर HTTP स्थिति से अनुमानित होता है: 5xx त्रुटि है, 4xx चेतावनी है, बाकी सब जानकारी है। JSON लाइनें मौजूद होने पर अपने ख़ुद के स्तर फ़ील्ड का उपयोग करती हैं। अगर कोई पंक्ति ग़लत वर्गीकृत लगे, तो उसके पास का स्थिति कोड या संदेश टेक्स्ट ही असली सत्य है।