एक चीज़ जो मैंने कभी किसी और को नहीं देखी, उन कारणों से, जिनकी मैं कल्पना नहीं कर सकता, अपाचे लॉग फ़ाइल प्रारूप को अधिक आसानी से पार्स करने योग्य संस्करण को उस जानकारी के साथ बदलना है जो वास्तव में आपके लिए मायने रखती है।
उदाहरण के लिए, हम कभी भी HTTP बेसिक नॉर्थ का उपयोग नहीं करते हैं, इसलिए हमें उन फ़ील्ड को लॉग इन करने की आवश्यकता नहीं है। मुझे इस बात में दिलचस्पी है कि प्रत्येक अनुरोध को कब तक पूरा करना है, इसलिए हम इसे जोड़ेंगे। एक परियोजना के लिए, हम यह भी जानना चाहते हैं कि (हमारे लोड बैलेंसर पर) यदि कोई सर्वर दूसरों की तुलना में धीमी गति से अनुरोध कर रहा है, तो हम उसका नाम लेते हैं जिस सर्वर पर हम वापस जा रहे हैं।
यहाँ एक सर्वर के अपाचे विन्यास का एक अंश दिया गया है:
# We don't want to log bots, they're our friends
BrowserMatch Pingdom.com robot
# Custom log format, for testing
#
# date proto ipaddr status time req referer user-agent
LogFormat "%{%F %T}t %p %a %>s %D %r %{Referer}i %{User-agent}i" standard
CustomLog /var/log/apache2/access.log standard env=!robot
जो आप वास्तव में नहीं बता सकते हैं वह यह है कि प्रत्येक क्षेत्र के बीच एक शाब्दिक टैब वर्ण (\ t) है। इसका मतलब यह है कि अगर मैं पायथन में कुछ विश्लेषण करना चाहता हूं, तो संभवत: गैर-200 स्थिति दिखाएगा, मैं यह कर सकता हूं:
for line in file("access.log"):
line = line.split("\t")
if line[3] != "200":
print line
या अगर मैं करना चाहता था 'कौन छवियों को गर्म कर रहा है?' यह होगा
if line[6] in ("","-") and "/images" in line[5]:
एक्सेस लॉग में IP काउंट के लिए, पिछला उदाहरण:
grep -o "[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}" logfile | sort -n | uniq -c | sort -n
कुछ इस तरह हो जाता है:
cut -f 3 log | uniq -c | sort -n
पढ़ने और समझने में आसान, और कम कम्प्यूटेशनल रूप से महंगा (कोई रेगेक्स) नहीं है, जो कि 9 जीबी लॉग पर, कितना समय लगता है, में बहुत बड़ा फर्क पड़ता है। जब यह वास्तव में साफ हो जाता है यदि आप उपयोगकर्ता-एजेंटों के लिए एक ही काम करना चाहते हैं। यदि आपके लॉग स्पेस-सीमांकित हैं, तो आपको हाथ से कुछ नियमित अभिव्यक्ति मिलान या स्ट्रिंग खोज करना होगा। इस प्रारूप के साथ, यह सरल है:
cut -f 8 log | uniq -c | sort -n
बिल्कुल ऊपर के समान। वास्तव में, कोई भी सारांश जो आप करना चाहते हैं वह अनिवार्य रूप से बिल्कुल एक जैसा है।
पृथ्वी पर क्यों मैं अपने सिस्टम के सीपीयू को awk और grep पर खर्च करूँगा जब कटौती वास्तव में वही होगी जो मुझे तीव्रता के आदेश चाहिए?