2010-10-28 16 views
8

समस्या निवारण, & फ़िल्टरिंग लॉग फ़ाइलों का विश्लेषण सबसे श्रमिक दैनिक नौकरियों में से एक है। मेरा मुद्दा एक लॉग फ़ाइल के माध्यम से खोज रहा है, जो आकार में 4 गीगा से अधिक हो सकता है। बस फाइल लोड करने में 15 मिनट तक लगते हैं। मैं 8 गीगा स्मृति के साथ एक काफी तेज़ प्रोसेसर चला रहा हूँ। फ़ाइल लोड होने के बाद, मुझे सचमुच केवल फ़ाइल के माध्यम से स्कैन करने के लिए grep और/या नियंत्रण + F की लक्जरी है। यह बदतर हो जाता है जब मैं एक गीग पर वजन वाले कई प्रणालियों से फ़ाइलों को देखने की कोशिश कर रहा हूं। समय-टिकटों के आधार पर फ़ाइलों को अलग करने की कोशिश की है ताकि उन्हें छोटा बनाया जा सके, लेकिन वास्तव में कोई खुशी नहीं।भारी लॉग फ़ाइलों को खोजना

क्या कोई उपकरण या यहां तक ​​कि एक प्रक्रिया है जिसे मैं समस्या निवारण कम समय लेने के लिए उपयोग कर सकता हूं (सामान्य "बस पहले बग ठीक करें" के अलावा)?

आपकी टिप्पणियों की सराहना की जाती है।

+2

यहां एक नज़र डालें http://www.baremetalsoft.com/index.php –

+0

आप किस प्लेटफ़ॉर्म पर चल रहे हैं? – BobbyShaftoe

+1

लॉग इतने बड़े क्यों हैं: क्या ऐसा इसलिए है क्योंकि वास्तव में बहुत सारे लेन-देन/घटनाएं हो रही हैं, या एक अनावश्यक स्तर को लॉग किया जा रहा है? क्या एप्लिकेशन को शब्दकोष को समायोजित करने के लिए कोई समर्थन है, और/या अलग-अलग घटकों से लॉग डेटा को अलग-अलग लॉग फ़ाइलों में निर्देशित करना है? –

उत्तर

9

आप इसे किसके साथ लोड कर रहे हैं? 4 गीगा एक काफी बड़ी फाइल है, लेकिन इसे स्मृति में लोड करने में उतना समय नहीं लगना चाहिए।

बड़ी फ़ाइलों के लिए, मैं सीधे grep का उपयोग करने की अनुशंसा करता हूं, और यदि grep आपके लिए यह नहीं कर रहा है, तो SED और AWK आपके मित्र हैं। यदि आप रीयलटाइम में ऐसा करना चाहते हैं, तो उन उपकरणों का उपयोग पाइप और tail -f के साथ संयोजन के बारे में जानें।

हाँ, मुझे पता है, एसईडी पहले बहुत डरावना है। यह भी हास्यास्पद शक्तिशाली है। यह जानें।

यदि आप खिड़कियों पर हैं, तो आप मेरी सहानुभूति रखते हैं। क्या मैं एक यूनिक्स खोल की सिफारिश कर सकता हूं?

यदि आप कमांड लाइन टूल्स से डरते हैं, तो पर्ल या पायथन सीखने पर विचार करें। वे इस तरह की बड़ी फाइलों में शोर से सिग्नल को सॉर्ट करने में काफी अच्छे हैं।

+1

मैं दूसरा वह करूंगा। कृपया एडब्ल्यूके और एसईडी सीखें। तो आप कुछ स्क्रिप्ट लिख सकते हैं और जीवन बहुत आसान होगा! :-) – zerodin

+0

क्षमा करें दोस्त! याद किया अपवोट यह तुम्हारे लिए है! – zerodin

1

बैरेटेल एक अच्छा उपकरण है। कोशिश करो। मैंने इसे 4 गीगा फाइलों के लिए उपयोग नहीं किया है, लेकिन मेरी लॉग फाइलें भी काफी बड़ी हैं और यह ठीक काम करती है। http://www.baremetalsoft.com/baretail/index.php

संपादित करें: मैंने नहीं देखा कि किसी ने पहले से ही बेयरटेल का सुझाव दिया है।

1

यदि आप उन चीजों की लाइनों को बाहर करना चाहते हैं जिन्हें आप देखना नहीं चाहते हैं, तो आप grep -v 'I dont wanna see this' > logWithExcludedLines.log कर सकते हैं। आप regex के साथ-साथ grep -vE 'asdf|fdsa' > logWithNoASDForFDSA.log

यह विधि अपाचे एक्सेस लॉग grep -v 'HTTP/1.1 200' > no200s.log (या ऐसा कुछ, सटीक स्ट्रिंग याद नहीं है) के साथ बहुत अच्छी तरह से काम करता है।

0

मैं वर्तमान में यूनिक्स कमांड लाइन उपकरण (च) ग्रेप का उपयोग कर, awk, कट, में शामिल होने आदि ऐसी बातें, जो cygwin या UnxUtils और इसके आगे के साथ खिड़कियां लिए भी उपलब्ध हैं, और यह भी के लिए कुछ Scala स्क्रिप्ट का उपयोग कर रहा हूँ चीजें जो अधिक जटिल हैं। आप कई फ़ाइलों में लॉगफाइल प्रविष्टियों को फैलाने वाली खोजों के लिए स्क्रिप्ट लिख सकते हैं। लेकिन मैं wondering if there is something better than that भी हूं - शायद importing them into a database (दोनों SO प्रश्न हैं)?

वैसे: अपने हार्डडिस्क को एक एसएसडी ड्राइव द्वारा प्रतिस्थापित किया गया है। ये रास्ता तेज हैं! साथ ही, यह डिस्क पर gzip-compressed लॉग को छोड़ने के लिए भुगतान करता है, क्योंकि जब उन्हें डिस्क खोजना बाधा है। आप के लिए, कहते हैं, लॉगफ़ाइल में एक नियमित अभिव्यक्ति खोज और प्रत्येक घटना के लिए संदर्भ से 100 लाइनों करना चाहते हैं, तो आप कर चाहते हैं:

zcat *.log.gz | grep -100 '{regexp}' > {outputfile} 

और अपने पसंदीदा textfile दर्शक में outputfile लोड।यदि आप निश्चित तारों की खोज कर रहे हैं, तो अतिरिक्त विकल्प -F के साथ fgrep (grep के समान) का उपयोग करें - यह बहुत तेज़ है।

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