শেষ ঘন্টা থেকে লগ অনুসন্ধান


0

আমি লগ শব্দের অনুসন্ধান করতে ব্যর্থ স্ক্রিপ্ট প্রয়োজন ব্যর্থ এবং ব্যর্থতা। কিন্তু শুধুমাত্র শেষ ঘন্টা থেকে

cut -c 5- /var/log/mail.log | awk '($0 >= from)' from="$(LC_TIME=C date +'%_d %H:%M:%S' -d -1hour)" |grep -i 'Failed:\|failure'

উদাহরণ লগ ফাইল

Nov  1 01:00:00 localhost pushmail[55555]: 666666666666: Failed 
Nov  2 15:00:00 localhost pushmail[55556]: 666666666666: Failed 
Nov  3 11:00:00 localhost pushmail[55557]: 666666666666: Failed 
Nov  3 12:00:00 localhost pushmail[55558]: 666666666666: Failed 
Nov  3 13:30:00 localhost pushmail[55559]: 666666666666: Failed 
Nov  3 13:40:00 localhost pushmail[55560]: 666666666666: Failed 
Nov  3 14:00:00 localhost pushmail[55561]: 666666666666: Failed 
Nov  3 15:00:00 localhost pushmail[55562]: 666666666666: Failed 
Nov 14 15:00:00 localhost pushmail[55563]: 666666666666: Failed 

আমি স্থানীয় মাস নাম মুছে ফেলার জন্য কাট ব্যবহার। কিন্তু যখন আমি দুই দিনের আগে লগ এন্ট্রি ফর্ম আছে আমি ফলাফল আছে।


আমি লিনাক্স মেইল ​​ব্যবহার করি না, তাই আমি মেইল ​​লগ ফাইলের ফর্ম্যাট জানি না। আপনি যদি মূল লগ বিন্যাসে দেখানোর জন্য আপনার প্রশ্ন সংশোধন করতে পারেন তবে কয়েকটি রেকর্ড এবং পূর্ববর্তী রেকর্ড অন্তর্ভুক্ত, উভয় বাদ দেওয়া এবং মিথ্যাভাবে অন্তর্ভুক্ত করা হয়েছে, তবে আমি সহায়তা করতে সক্ষম হব।
AFH

নমস্কার! AFH আমি কিছু Exaple লগ রেকর্ড যোগ করুন।
MiKo

এই কাজ করে আশা করি :) grep -E "$(date +"($(date +%H)|%H)":%M:%S --date='last hour').*(Failed|failure)" /var/log/mail.log
Paulo

উত্তর:


1

আমি সবচেয়ে নির্ভরযোগ্য সমাধান খুঁজে পেতে পারে:

while read -r rec
do   age=$(($(date +%s)-$(date -d "${rec:0:16}" +%s)))
     [ $age -ge 0 -a $age -le 3600 ] && \
     grep -Eiq 'failed|failure' <<< "$rec" && echo "$rec"
done </var/log/mail.log

এই ব্যবহার করে date 1970 এর দশকের শুরু থেকে লগ-ইন বার সেকেন্ডে রূপান্তরিত করতে এবং তারপরে বর্তমান সময়ের জন্য এটি সেকেন্ডের মানের সাথে তুলনা করে। এটি একটি নতুন বছরের প্রথম ঘন্টা ব্যতীত, মধ্যরাতের পরে ঘন্টা সহ সমস্ত ক্ষেত্রে কাজ করবে, কারণ date -d কোন নির্দিষ্ট করা হয় যখন বর্তমান বছর ডিফল্ট। আমি একটি নতুন বছরের ভোর এই স্ক্রিপ্ট চালানোর চেয়ে আপনি ভাল জিনিস আছে অনুমান।

নন-নেতিবাচক রেকর্ড বয়সটির চেক ভবিষ্যতের রেকর্ডগুলি বাতিল করে দেয়, যেমন আমি নভেম্বর 14 তারিখে যখন 3 য় নভেম্বরের পরীক্ষার সময় খুঁজে পাই। আমি একটি যোগ করে বিভিন্ন সময়ে কলিং simulated -d প্রথম পরামিতি date কল, উত্তর যা বর্তমান সময় রেফারেন্স পায়।


(উত্তর দিতে বিলম্বের জন্য দুঃখিত, কিন্তু এই বিকেলে যাওয়ার আগে আমি আপনার আপডেট পাইনি।)
AFH

0

সমস্যা হল যে "14">" 3" কারণ 1 & gt; ""। আপনি আপনার তারিখ নেতৃস্থানীয় শূন্য ব্যবহার করতে হবে। উদাহরণস্বরূপ, আপনি সমস্ত কমান্ড এক awk মধ্যে রাখতে পারেন:

awk '{ date = sprintf("%02d %s",$2,$3) }
     date>from && /Failed|failure/ { print }
' from="$(LC_TIME=C date +'%d %H:%M:%S' -d -1hour)"

আমি পরিবর্তন %_d থেকে %d তারিখ থেকে নেতৃস্থানীয় জিরো পেতে। অদ্ভুত মধ্যে sprintf ব্যবহারসমূহ %02d একটি নেতৃস্থানীয় শূন্য ক্ষেত্র 2, তারিখ রাখা।


0

awk '($ 0 & gt; = থেকে) =' $ (LC_ALL = C তারিখ + '% b% _d% H:% M:% S' -d -hour) "~ / mail.log | grep -i ' ব্যর্থ \ | ব্যর্থতায় '

নমস্কার! সাহায্যের জন্য সবাইকে ধন্যবাদ! আমার ক্ষেত্রে এই স্ক্রিপ্ট কাজ। যদি আপনি 1 ঘন্টা থেকে সময় পরিসীমা পরিবর্তন করতে চান তবে আপনি এই চেনজিং মান উদাহরণটি করতে পারেন -d -60minutes বা -d-2days

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.