2012-05-31 18 views
5

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

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

  • Azure एसक्यूएल में जानकारी संग्रहीत करने के लिए एक कस्टम Appender साथ log4j का उपयोग करते हुए: यहाँ विकल्पों में से एक सूची है।
  • Azure टेबल्स स्टोरेज में जानकारी संग्रहीत करने के लिए कस्टम Appender के साथ log4j का उपयोग करना।
  • एक अतिरिक्त उपकरण लिखना जो स्थानीय हार्ड ड्राइव से डेटा को उपरोक्त लगातार स्टोरेज में स्थानांतरित करता है।

क्या कोई अन्य तरीका है या जावा के लिए इस समस्या के लिए कोई पूर्ण समाधान है? उपर्युक्त मानदंडों पर विचार करने वाले उपरोक्त में से कौन सा सबसे अच्छा होगा?

उत्तर

1

अंत में मैंने लॉग 4 जे Appender लिखने का निर्णय लिया। मुझे डायग्नोस्टिक्स जानकारी इकट्ठा करने की आवश्यकता नहीं थी, मेरा मुख्य लक्ष्य केवल लॉग फ़ाइलों को आसानी से बदलने योग्य तरीके से इकट्ठा करना था। मेरा पहला डर था कि यह एप्लिकेशन को धीमा कर देगा, लेकिन केवल स्मृति के लिए लिखकर और केवल समय-समय पर एज़ूर टेबल पर लॉग डेटा लिखकर यह बहुत सी एपीआई कॉल किए बिना पूरी तरह से काम करता है।

यहाँ मेरी कार्यान्वयन के लिए मुख्य चरण हैं:

सबसे पहले मैं Azure टेबल्स में संग्रहीत करने के लिए एक इकाई श्रेणी का निर्माण, LogEntity कि com.microsoft.windowsazure.services.table.client.TableServiceEntity फैली कहा जाता है।

अगला मैंने एपेंडर लिखा जो org.apache.log4j.AppenderSkeleton को java.util.List<LogEntity> रखता है।

ओवरराइड विधि से protected void append(LoggingEvent event) मैंने केवल इस संग्रह में जोड़ा और फिर एक थ्रेड बनाया जो समय-समय पर इस सूची को खाली करता है और डेटा को Azure तालिकाओं में लिखता है।

अंत में मैंने अपनी लॉग 4j कॉन्फ़िगरेशन फ़ाइल में नव निर्मित Appender जोड़ा।

2

अभी कोई आउट ऑफ़ द बॉक्स समाधान नहीं है, लेकिन ... तालिका संग्रहण के लिए एक कस्टम एपेंडर समझ में आता है, क्योंकि आप डायग्नोस्टिक्स (परफ काउंटर इत्यादि) के समान तरीके से अपने लॉग पूछ सकते हैं। ।

एकमात्र विचार यह है कि यदि आप भारी मात्रा में लॉग स्टेटमेंट लिख रहे हैं (जैसे प्रति सेकंड सैकड़ों बार)। उस दर पर, आप मासिक बिल पर दिखाए गए लेनदेन लागतों को नोटिस करना शुरू कर देंगे। प्रति 10,000 रुपये और 100 प्रति सेकंड पर, आप $ 250 प्रति उदाहरण देख रहे हैं। यदि आपके पास कई उदाहरण हैं, तो लागत वहां से बढ़ी है। एसक्यूएल एज़ूर के साथ, आपके पास कोई लेनदेन लागत नहीं होगी, लेकिन आपके पास अधिक संग्रहण लागत होगी।

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

जावा और डायग्नोस्टिक्स सेटअप के संबंध में, प्रकाशित सिस्टम से blog post है जो अभी प्रकाशित हुआ है। एक बार यह लाइव होने पर मैं इस उत्तर को एक लिंक के साथ अपडेट कर दूंगा। इसके अलावा, Cloud Ninja for Java पर एक नज़र डालें, जो आने वाले पोस्ट में वर्णित बाहरी .net exe का उपयोग करके टॉमकैट लॉगिंग (और संबंधित पार्सिंग) लागू करता है।

+0

संपादित की आवश्यकता होगी, स्पष्ट करने के लिए करने के लिए नहीं कर रहा हूँ अलग ।नेट ऐप केवल ग्रहण परियोजनाओं से ऐप्स बनाने के दौरान, जिसमें .NET मचान कोड नहीं है (प्रति @ अवकाश के वर्कररोल.cs के संदर्भ)। –

+0

मैं अभी भी ब्लॉग पोस्ट पढ़ने की उम्मीद कर रहा हूं! – hpityu

+0

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

1

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

अध्याय 6: बिलाव समाधान निदान

  • त्रुटि लॉगिंग
  • लॉग फ़ाइलें

http://blogs.msdn.com/b/avkashchauhan/archive/2010/10/29/windows-azure-tomcat-solution-accelerator-full-solution-document.aspx

देखने किसी भी परिदृश्य जहां कस्टम अनुप्रयोग यानी java.exe, php में। exe, python आदि, मैं सीधे "स्थानीय संग्रहण" फ़ोल्डर पर लॉग फ़ाइल बनाने का सुझाव देता हूं और फिर कार्यकर्ता भूमिका में एज़ूर डायग्नोस्टिक्स प्रारंभ करता हूं (डब्ल्यू orkerRole.cs) Azure VM से सीधे अपने Azure Blob संग्रहण में इन कस्टम लॉग फ़ाइलों को निर्यात करने के लिए।

कस्टम लॉग बनाने के लिए कैसे पर स्थानीय संग्रहण वर्णन किया गया है here.

Azure ब्लॉब को Azure निदान का उपयोग करके और भेजने लॉग होगा सबसे सस्ता और मजबूत तो किसी भी अन्य विधि यू का वर्णन किया है।

+0

ऐसे मामलों में जहां ग्रहण परियोजनाओं से तैनाती है, वहां कोई वर्कररोल.cs नहीं है। बस स्टार्टअप स्क्रिप्ट। –

+1

आप क्या कर सकते हैं डायग्नोस्टिक्स.डैडसीएफजी बनाते हैं और टाइमर और डायग सेटिंग कॉन्फ़िगर करते हैं और अपनी रोल रूट फ़ोल्डर में ड्रॉप करते हैं। जब Azure भूमिका शुरू होगी, यह रूट फ़ोल्डर में diagnostics.wadcfg की तलाश करेगा, यह कॉन्फ़िगरेशन लोड करेगा और डायग्नोस्टिक्स शुरू करेगा। – AvkashChauhan

+1

"विंडोज़ एज़ूर डायग्नोस्टिक कॉन्फ़िगरेशन फ़ाइल" का उपयोग करने के तरीके पर लिंक यहां दिया गया है -> http://msdn.microsoft.com/en-us/library/gg604918.aspx – AvkashChauhan

0

एक और विकल्प;

क्या हम लॉग 4j मानक तरीके (जैसे DailyRollingFileAppender) का उपयोग जारी नहीं रख सकते हैं केवल फ़ाइल को एक वीएम (आईएएएस) पर यूएनसी पथ पर बनाया जाना चाहिए। यह वीएम, केवल डिस्क स्थान की थोड़ी सी आवश्यकता होगी, लेकिन किसी भी महान प्रसंस्करण शक्ति की आवश्यकता नहीं है। तो कोई एक उपलब्ध वीएम साझा कर सकता है, या सबसे कम विन्यास के साथ एक वीएम बना सकता है, अधिमानतः उसी क्षेत्र और क्लाउड सेवा में।

संचित लॉग फाइल के माध्यम से पहुँचा जा सकता है आरडीपी/FTP आदि

इस तरह एक लेन-देन लागत और एक विशेष log4j appender ... विकसित करने की लागत यह एक सस्ता विकल्प के रूप में बाहर बदल सकती है नहीं देना होगा।

धन्यवाद जीवन

पुनश्च: मैं, लोगों को आवेदन प्रवेश की दिशा में अधिक चर्चा करते हुए और ऐप्स-सर्वर लॉग (Catalina/प्रबंधक लॉग या .out फ़ाइलों Weblogic का)