OpenVPN का टेक्स्ट लॉग एक तारीख़, एक समय और एक us= मान एक ही लाइन में लिखता है, और तीनों में से आख़िरी वह हिस्सा है जिसे पाठक ग़लत समझते हैं। यह उस टाइमस्टैम्प का माइक्रोसेकंड घटक है, जो शून्य से भरे बिना छापा जाता है। यह सेशन पहचानकर्ता, उपयोगकर्ता नाम या काउंटर नहीं है, और इसे वैसा मानने पर सेकंड का एक अंश आत्मविश्वास भरा ग़लत निष्कर्ष बन जाता है। इसे दिखाए गए सेकंड के अंश के रूप में बदलें और बाक़ी लाइन पढ़ने योग्य बनी रहती है।

लाइन के तीन हिस्सों का क्या अर्थ है

तारीख़ और पूरा सेकंड पहले आते हैं, और us= एक सेकंड से नीचे का बाक़ी हिस्सा रखता है। 12345 का मान बारह हज़ार तीन सौ पैंतालीस माइक्रोसेकंड है, यानी 0.012345 सेकंड, इसलिए छपा हुआ समय 09:15:30 होने पर लाइन 09:15:30.012345 बताती है। काउंटर हर नए सेकंड के साथ फिर शुरू होता है, इसलिए बाद की लाइन किसी घड़ी के पीछे चले बिना छोटा अंश छाप सकती है। केवल पूरा टाइमस्टैम्प घटनाओं को क्रम में रखता है।

2026-11-02 08:41:07 us=4820

इकाई सेकंड का दस लाखवाँ हिस्सा है, और us= के छह अंक 0.000000 से 0.999999 तक पूरी श्रेणी को कवर करते हैं। पाँच अंक दहाई मिलीसेकंड बताते हैं, जबकि छह अंक लगभग पूरे सेकंड तक सैकड़ों मिलीसेकंड बताते हैं। अगर रूपांतरण एक से बड़ा अंश देता है, तो दशमलव बिंदु खिसक गया है और गणना ग़लत है। हाथ से करने का अर्थ है छपे पूर्णांक को दस लाख से भाग देना और पूरे सेकंड में जोड़ना।

शून्य से भरना ही जाल है। us=42 बयालीस माइक्रोसेकंड है, जिसे .000042 के रूप में लिखा जाता है, .42 नहीं। बदलने से पहले पूर्णांक को बाईं ओर छह स्थानों तक भरें, और मान आपके देखे अंकों का दशमलव अंश जैसा दिखना बंद कर देता है।

कैलकुलेटर के बिना लाइन बदलना

छपे हुए सेकंड को आधार मानें और us= को अंश मानें। 09:15:30 और us=12345 के लिए दशमलव रूप 09:15:30.012345 है; us=900000 के लिए यह 09:15:30.900000 है। दशमलव बिंदु के बाद के अंक भरे हुए पूर्णांक हैं, कभी भी हज़ार से विभाजित पूर्णांक नहीं। पहले छह अंकों वाला रूप लिखना ज़्यादातर ग़लतियों को रोकता है।

अगर आप लॉग को टाइमस्टैम्प में पार्स करते हैं, तो तारीख़, पूरा सेकंड और अंश साथ में पार्स करें। जो पार्सर मिलीसेकंड मानता है वह घटनाओं को हज़ार गुना ग़लत क्रम में रखेगा, और आउटपुट फिर भी विश्वसनीय दिखता है।

जब लॉग में फ़ील्ड मौजूद न हो

माइक्रोसेकंड वाला हिस्सा टेक्स्ट लॉग प्रारूप का है और केवल तभी दिखता है जब विस्तृत टाइमस्टैम्प सक्षम हों। OpenVPN 2.6 के टाइमस्टैम्प फ़ॉर्मेटर में यह तब जोड़ा जाता है जब वह आउटपुट चालू हो और संग्रहीत मान शून्य न हो। इसलिए us= के बिना लॉग घड़ी या बिल्ड के बारे में कुछ नहीं कहता; आम तौर पर इसका अर्थ है कि कॉन्फ़िगर किया गया विस्तार बहुत कम है। समय सिंक्रोनाइज़ेशन को दोष देने से पहले कॉन्फ़िगरेशन जाँचें।

सर्वर कॉन्फ़िगरेशन से सेटिंग की पुष्टि आसानी से की जा सकती है। नीचे दिया गया कमांड चलाएँ और वह संख्या पढ़ें जो वह लौटाता है। विस्तृत टाइमस्टैम्प आउटपुट विस्तार स्तर 4 पर दिखता है, इसलिए कम मान बिना किसी अन्य ख़राबी के ग़ायब फ़ील्ड की व्याख्या करता है। वही कॉन्फ़िगरेशन --verb 4 के साथ चलाने पर डेमन उस स्तर के साथ फिर शुरू होने पर फ़ील्ड दिखाता है।

grep -nE '^[[:space:]]*verb[[:space:]]+[0-9]' /etc/openvpn/server.conf

विस्तार बढ़ाने से लॉग में विवरण जुड़ता है; यह घड़ी को बेहतर नहीं बनाता। पुनः आरंभ के बाद एक नई लाइन की पुरानी से तुलना करके पुष्टि करें कि प्रारूप बदला है, और प्रश्न का उत्तर मिलने पर स्तर फिर से घटा दें।

छह अंक क्या साबित नहीं करते

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

संग्राहक प्रत्येक लाइन पर आने पर मुहर लगा सकता है, जो एक दूसरा टाइमस्टैम्प जोड़ता है जो संग्राहक का है, OpenVPN का नहीं। तुलना से पहले पहचानें कि आप कौन सा पढ़ रहे हैं, और कच्ची लाइन रखें ताकि तुलना फिर की जा सके।

एक नया us= मान यह साबित नहीं करता कि नया क्लाइंट लॉग इन हुआ, और बार-बार आया मान दोहरी घटना साबित नहीं करता। पीयर और कनेक्शन फ़ील्ड इन सवालों का जवाब देते हैं।

संबंधित लेख