दिलचस्प पोस्ट
वर्तमान लोकेल समय में यूटीसी कन्वर्ट करें दो चयन कथन के परिणाम शामिल हों I क्यों "$ ()। तैयार (हैंडलर)" की सिफारिश नहीं की जाती है? स्प्रिंग बूट कॉन्फ़िगर करें और दो डेटा स्रोतों का उपयोग करें दो ग्राफ़ किनारे संरेखित करें (ggplot) एक रैजेक्स में क्या अक्षर को बचाना चाहिए? फ्लास्क पर आपको एक क्वेरी स्ट्रिंग कैसे मिलती है? jQuery: ऊंचाई () / चौड़ाई () और "प्रदर्शन: कोई नहीं" एक HTML पृष्ठ से एक छवि को खींचने से अक्षम करें एंड्रॉइड पर कला कवर ओरेकल "(+)" ऑपरेटर क्या एंड्रॉइड ऐप की स्थापना रद्द करना संभव है? एंड्रॉइड छवि दृश्य मैट्रिक्स पैमाने + अनुवाद MVC एचटीएमएल.पार्टीअल या एचटीएमएलएक्शन ब्राउज़र का आकार बदलना (उत्तरदायी) पर Google मानचित्र (V3) केंद्र

तिथि सीमा के आधार पर लॉग फ़ाइल प्रविष्टियां फ़िल्टर करें

मेरा सर्वर असाधारण रूप से उच्च CPU उपयोग कर रहा है, और मैं देख सकता हूं कि अपाचे बहुत अधिक मेमोरी का उपयोग कर रहा है। मुझे एक महसूस हो रहा है, मुझे एक आईपी द्वारा डॉस दिया जा रहा है – शायद आप उसे ढूंढने में मेरी मदद कर सकते हैं?

मैंने 10 सबसे अधिक "सक्रिय" आईपीएस प्राप्त करने के लिए निम्नलिखित पंक्ति का उपयोग किया है:

cat access.log | awk '{print $1}' |sort |uniq -c |sort -n |tail 

शीर्ष 5 आईपी में लगभग 200 बार सर्वर पर कई अनुरोध हैं, "औसत" उपयोगकर्ता के रूप में। हालांकि, मुझे पता नहीं है कि ये 5 बहुत ही अक्सर आगंतुक हैं, या वे सर्वर पर हमला कर रहे हैं

एक समय अंतराल के लिए उपरोक्त खोज को निर्दिष्ट करने के तरीके हैं, जैसे पिछले दो घंटे या 10-12 के बीच आज?

चीयर्स!

नवीनीकृत 23 अक्टूबर 2011 – मेरे लिए आवश्यक आदेश:

पिछले एक्स घंटे के अंदर प्रविष्टियां प्राप्त करें [यहां दो घंटे]

 awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print Date FS $4}' access.log 

पिछले एक्स घंटे के भीतर सबसे सक्रिय आईपी प्राप्त करें [यहां दो घंटे]

 awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date) print $1}' access.log | sort |uniq -c |sort -n | tail 

रिश्तेदार timespan के भीतर प्रविष्टियां प्राप्त करें

 awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print Date FS Date2 FS $4}' access.log 

निरपेक्ष timespan में प्रविष्टियां प्राप्त करें

 awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $0}' access.log 

पूर्ण समय के भीतर सबसे सक्रिय आईपीएस प्राप्त करें

 awk -vDate=`date -d '13:20' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'13:30' +[%d/%b/%Y:%H:%M:%S` ' { if ($4 > Date && $4 < Date2) print $1}' access.log | sort |uniq -c |sort -n | tail 

वेब के समाधान से एकत्रित समाधान "तिथि सीमा के आधार पर लॉग फ़ाइल प्रविष्टियां फ़िल्टर करें"

हां, ऐसा करने के कई तरीके हैं यहां बताया गया है कि मैं इस बारे में कैसे जाना होगा। शुरुआत के लिए, बिल्ली की आउटपुट को पाइप बनाने की कोई ज़रूरत नहीं है, बस लॉग फ़ाइल को awk साथ खोलें

 awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` '$4 > Date {print Date, $0}' access_log 

अपना लॉग मानते हुए मेरा दिनांक (फ़ील्ड 4 में संग्रहीत) की तुलना में मेरा (वे कॉन्फ़िगर करने योग्य) लगते हैं। और ब्रैकेट हो गया है। मैं जो ऊपर कर रहा हूं वह पिछले 2 घंटों में सब कुछ पा रहा है। Note the -d'now-2 hours' या सचमुच अब शून्य से दो घंटे अनुवादित है, मेरे लिए ऐसा कुछ दिखता है: [10/Oct/2011:08:55:23

तो मैं जो कर रहा हूं वह दो घंटे पहले स्वरूपित मूल्य संचित कर रहा है और फ़ील्ड चार के मुकाबले तुलना कर रहा है। सशर्त अभिव्यक्ति सीधे आगे होनी चाहिए। मैं तब दिनांक मुद्रित कर रहा हूं, इसके बाद आउटपुट फ़ील्ड सेपरेटर (इस मामले में या ओएस) यानी स्पेस के बाद $ 0 आप अपनी पिछली अभिव्यक्ति का उपयोग कर सकते हैं और सिर्फ $ 1 प्रिंट (आईपी पते)

 awk -vDate=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` '$4 > Date {print $1}' | sort |uniq -c |sort -n | tail 

यदि आप एक सीमा का उपयोग करना चाहते हैं, तो दो दिनांक चर निर्दिष्ट करें और उचित रूप से अपने अभिव्यक्ति का निर्माण करें

इसलिए यदि आप 2-4 घंटों के बीच कुछ ढूंढना चाहते थे तो आपकी अभिव्यक्ति कुछ इस तरह दिख सकती है

 awk -vDate=`date -d'now-4 hours' +[%d/%b/%Y:%H:%M:%S` -vDate2=`date -d'now-2 hours' +[%d/%b/%Y:%H:%M:%S` '$4 > Date && $4 < Date2 {print Date, Date2, $4} access_log' 

यहाँ एक सवाल है जो मैंने बाश की तारीखों के बारे में उत्तर दिया है, जो आपको सहायक लगता है। वर्तमान सप्ताह के सोमवार के लिए प्रिंट तिथि (बैश में)

चूंकि यह एक सामान्य पर्ल कार्य है

और क्योंकि यह लॉगफ़ाइल से पिछले 10 मिनट निकालने के समान नहीं है, जहां यह लॉगफ़ाइल के अंत तक कई गुना है

और क्योंकि मुझे इसकी आवश्यकता है, मैं (जल्दी) ने यह लिखा है:

 #!/usr/bin/perl -ws # This script parse logfiles for a specific period of time sub usage { printf "Usage: %s -s=<start time> [-e=<end time>] <logfile>\n"; die $_[0] if $_[0]; exit 0; } use Date::Parse; usage "No start time submited" unless $s; my $startim=str2time($s) or die; my $endtim=str2time($e) if $e; $endtim=time() unless $e; usage "Logfile not submited" unless $ARGV[0]; open my $in, "<" . $ARGV[0] or usage "Can't open '$ARGV[0]' for reading"; $_=<$in>; exit unless $_; # empty file # Determining regular expression, depending on log format my $logre=qr{^(\S{3}\s+\d{1,2}\s+(\d{2}:){2}\d+)}; $logre=qr{^[^\[]*\[(\d+/\S+/(\d+:){3}\d+\s\+\d+)\]} unless /$logre/; while (<$in>) { /$logre/ && do { my $ltim=str2time($1); print if $endtim >= $ltim && $ltim >= $startim; }; }; 

इसका उपयोग इस प्रकार किया जा सकता है:

 ./timelapsinlog.pl -s=09:18 -e=09:24 /path/to/logfile 

09h18 और 09h24 के बीच मुद्रण लॉग के लिए

 ./timelapsinlog.pl -s='2017/01/23 09:18:12' /path/to/logfile 

january 23th, 9h18'12" तक छपाई के लिए अब तक

पर्ल कोड को कम करने के लिए, मैंने कमांडलाइन से चर के ऑटो-असाइनमेंट को अनुमति देने के लिए स्विच का उपयोग किया है: -s=09:18 एक वैरिएबल $s को पॉप्युलेट करेगा जिसमें 09:18 होगा। बराबर चिह्न = और कोई रिक्त स्थान याद नहीं की देखभाल!

नोट: यह दो अलग-अलग लॉग मानक के लिए दो भिन्न प्रकार के regex हैं । यदि आपको अलग तिथि / समय प्रारूप पार्सिंग की आवश्यकता होती है, तो अपने खुद के रेगेक्स को पोस्ट करें या अपने लॉगफ़ाइल से स्वरूपित दिनांक का एक नमूना पोस्ट करें

 ^(\S{3}\s+\d{1,2}\s+(\d{2}:){2}\d+) # ^Jan 1 01:23:45 ^[^\[]*\[(\d+/\S+/(\d+:){3}\d+\s\+\d+)\] # ^... [01/Jan/2017:01:23:45 +0000] 

अगर किसी को awk: invalid -v option साथ मुठभेड़ है awk: invalid -v option , एक पूर्वनिर्धारित समय सीमा में सबसे सक्रिय आईपी प्राप्त करने के लिए यहां एक स्क्रिप्ट है:

 cat <FILE_NAME> | awk '$4 >= "[04/Jul/2017:07:00:00" && $4 < "[04/Jul/2017:08:00:00"' | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -20