2010-10-25 8 views
5

हमने एक थर्ड पार्टी प्लेटफार्म (गीगास्पेस) का उपयोग करना शुरू कर दिया है जो हमें वितरित कंप्यूटिंग के साथ मदद करता है। अब हम जिन समस्याओं को हल करने की कोशिश कर रहे हैं उनमें से एक यह है कि इस वितरित वातावरण में हमारी लॉग फ़ाइलों को कैसे प्रबंधित किया जाए। वर्तमान में हमारे पास निम्नलिखित सेटअप है।कई मशीनों पर वितरित लॉग फ़ाइलों की एक बड़ी संख्या का प्रबंधन

हमारा प्लेटफार्म 8 मशीनों पर वितरित किया जाता है। प्रत्येक मशीन पर हमारे पास 12-15 प्रक्रियाएं होती हैं जो java.util.logging का उपयोग करके लॉग फ़ाइलों को अलग करने के लिए लॉग इन करती हैं। इस मंच के शीर्ष पर हमारे पास हमारे स्वयं के अनुप्रयोग हैं जो log4j का उपयोग करते हैं और फ़ाइलों को अलग करने के लिए लॉग इन करते हैं। हम थ्रेड डंप और इसी तरह के पकड़ने के लिए stdout को एक अलग फ़ाइल में रीडायरेक्ट भी करते हैं।

इसके परिणामस्वरूप 200 अलग-अलग लॉग फ़ाइलें होती हैं।

अभी तक हमारे पास इन फ़ाइलों को प्रबंधित करने में सहायता करने के लिए कोई टूलिंग नहीं है। निम्नलिखित मामलों में यह हमें गंभीर सिरदर्द का कारण बनता है।

  • समस्या निवारण जब हम पहले से नहीं जानते कि समस्या किस प्रक्रिया में हुई थी। इस मामले में हम वर्तमान में एसएसएच का उपयोग करके प्रत्येक मशीन में लॉग इन करते हैं और grep का उपयोग शुरू करते हैं।

  • सामान्य से कुछ भी के लिए नियमित रूप से लॉग की जांच करके सक्रिय होने की कोशिश कर रहा है। इस मामले में हम वर्तमान में सभी मशीनों में लॉग इन करते हैं और less और tail का उपयोग करके विभिन्न लॉग देख सकते हैं।

  • अलर्ट सेट अप करना। हम थ्रेसहोल्ड पर घटनाओं पर अलर्ट सेट अप करना चाहते हैं। यह जांचने के लिए 200 लॉग फाइलों के साथ दर्द होना चाहता है।

आज हम प्रति सेकंड केवल लगभग 5 लॉग ईवेंट को है, लेकिन जैसा कि हम नए मंच करने के लिए अधिक से अधिक कोड विस्थापित कि वृद्धि होगी।

मैं समुदाय से निम्नलिखित प्रश्न पूछना चाहता हूं।

  • आपने विभिन्न ढांचे के माध्यम से कई मशीनों पर वितरित कई लॉग फ़ाइलों के साथ समान मामलों को कैसे संभाला है?
  • आपने उस विशेष समाधान का चयन क्यों किया?
  • आपके समाधान कैसे काम करते हैं? आपको अच्छा क्या मिला और आपको बुरा क्या मिला?

बहुत धन्यवाद।

अद्यतन

हम Splunk का परीक्षण संस्करण का मूल्यांकन समाप्त हो गया। हम इस बात से बहुत खुश हैं कि यह कैसे काम करता है और इसे खरीदने का फैसला किया है। तकनीकी रूप से इच्छुक के लिए सेट अप, तेज़ खोज और सुविधाओं का एक टन आसान है। मैं इसे जांचने के लिए इसी तरह की परिस्थितियों में किसी को भी सिफारिश कर सकता हूं।

उत्तर

3

मैं आपके सभी जावा लॉगिंग को Simple Logging Facade for Java (SLF4J) पर पाइप करने की सलाह दूंगा और फिर SLF4J से LogBack पर सभी लॉग रीडायरेक्ट करूँगा। एसएलएफ 4 जे में सभी लोकप्रिय विरासत एपीआई (log4j, commons-logging, java.util.logging, आदि) को संभालने के लिए विशेष समर्थन है, here देखें।

एक बार जब आप LogBack में अपने लॉग है आप उपयोग कर सकते हैं इसके बारे में एक कई मशीनों से अधिक कुल लॉग के लिए कई appenders, जानकारी के लिए है, को देखने के मैनुअल section about appenders। सॉकेट, जेएमएस और एसएमटीपी सबसे स्पष्ट उम्मीदवार प्रतीत होते हैं।

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

अंत में, समस्या निवारण कम करने के लिए, जानकारी के लिए, किसी प्रकार का के अपने सभी आने वाली "अनुरोध" के लिए requestID जोड़ने मेरा उत्तर देखने के लिए this question कर लें।

संपादित: आप भी appender अपनी खुद की कस्टम LogBack को लागू करने और Scribe करने के लिए सभी लॉग अनुप्रेषित सकता है।

+0

यह इंगित करने योग्य है कि स्क्रिप्ट के लिए सब कुछ पुनर्निर्देशित करना अनिवार्य रूप से एक बना देगा प्रणाली में विफलता का एक बिंदु, उदाहरण के लिए जब स्क्रिप्ट डिमन नीचे है। –

+0

ठीक है, अंतिम समाधान का गलती सहनशीलता पहलू आम तौर पर बहुत ही तैनाती-विशिष्ट है और इस तरह, अंतिम समाधान के लिए जिम्मेदार वास्तुकार के लिए एक अभ्यास के रूप में छोड़ दिया गया है। फिर भी, यह ध्यान में रखना कुछ है। –

+1

मैं यह जोड़ना चाहता हूं कि यह वास्तव में एक वास्तविक "विफलता का एक बिंदु" नहीं है, यदि सिंक केंद्रीय नोड नीचे है, तो संपूर्ण समाधान अप्रभावित है - व्यक्तिगत स्क्रिप्ट नोड्स स्थानीय नोड वापस होने तक स्थानीय रूप से लॉग रिकॉर्ड कतारबद्ध करते हैं फिर से ऊपर। स्क्रिप्ट डाउनटाइम केवल लॉगिंग सबसिस्टम उपलब्धता को प्रभावित करता है। –

1

मैं Splunk या Scribe जैसे लॉग एग्रीगेशन टूल को देखने का सुझाव दूंगा।

(साथ ही, मुझे लगता है कि यह सर्वरफॉल्ट प्रश्न का अधिक है, क्योंकि इसे आपके ऐप के प्रशासन और उसके डेटा के साथ करना है, ऐप बनाने के बारे में इतना कुछ नहीं।)

+0

आपके सुझावों के लिए धन्यवाद। उन उपकरणों के साथ आपके अनुभव क्या हैं? सर्वरफॉल्ट पर वास्तव में बेहतर हो सकता है, सहमत हो गया। –

+1

मैंने लगभग 40 सर्वरों से लॉग देखने के लिए splunk का उपयोग किया है। वास्तव में अच्छा काम किया। केवल नकारात्मक पक्ष सामने वाला अंत था (जावास्क्रिप्ट जादू उबंटू पर फायरफॉक्स दुर्घटनाग्रस्त हो गया था), लेकिन तब से यह तब तक सुधार हुआ है। – bwawok

+0

व्यक्तिगत रूप से मैंने स्प्लंक को स्वचालित रूप से लॉग डेटा लेने के साथ निपटाया नहीं है, लेकिन केवल मैन्युअल रूप से डेटा आयात करें - लेकिन यह फ्रंटेंड और विश्लेषण टूल शानदार दिखते हैं –

0

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

2

उन नोड्स पर Hadoop Cluster चलाने के लिए एक दिलचस्प विकल्प होगा और अपने अनुप्रयोगों के लिए विशिष्ट परिणामों को खोज और एकत्रित करने के लिए एक कस्टम Map Reduce नौकरी लिखना होगा।

0

मैं इस पर एक विश्लेषक तंत्र चलाने के लिए फ़ाइल को एक केंद्रीकृत मशीन में स्थानांतरित कर दूंगा। हो सकता है कि आप ऐसा करने के लिए एक हडोप क्लस्टर का उपयोग कर सकें और विश्लेषण करने के लिए मानचित्र चलाएं/नौकरियों को कम कर सकें ... इसे हैडॉप क्लस्टर आदि में बहुत 5 मिनट कॉपी करें। मुझे यकीन नहीं है कि यह आपकी आवश्यकताओं के अनुरूप है या नहीं। उस संबंध में पहले से उल्लेखित स्क्रिप्ट को देखना एक अच्छा विचार हो सकता है।

संबंधित मुद्दे