सवाल Nginx लॉग से उपयोगकर्ता-एजेंटों की सूची प्राप्त करें


मेरे पास nginx लॉग फ़ाइल है, और मैं ब्राउज़र के प्रत्येक प्रमुख संस्करण के लिए बाजार हिस्सेदारी जानना चाहता हूं। मुझे मामूली संस्करणों और ऑपरेटिंग सिस्टम में दिलचस्पी नहीं है। मैं ऐसा कुछ प्राप्त करना चाहता हूं:

100 IE6
 99 IE7
 20 IE8
200 FF2
300 FF3

मुझे पता है कि फ़ाइल से उपयोगकर्ता एजेंटों की सूची कैसे प्राप्त करें, लेकिन मैं केवल ब्राउज़र के प्रमुख संस्करण देखने के लिए सूची को जोड़ना चाहता हूं। क्या कोई ऐसा उपकरण है जो करता है?


5
2017-12-01 12:51


मूल




जवाब:


awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
  • awk(1) - जीईटी अनुरोधों की पूर्ण उपयोगकर्ता-एजेंट स्ट्रिंग का चयन करना
  • cut(1) - इससे पहले शब्द का उपयोग कर
  • sort(1) छंटनी
  • uniq(1) - गिनती
  • sort(1) - गिनती से छंटनी, उलटा हुआ

पुनश्च। बेशक इसे एक से बदल दिया जा सकता है awk/sed/perl/python/ आदि लिपि। मैं सिर्फ यह दिखाना चाहता था कि यूनिक्स-तरीका कितना समृद्ध है।


16
2017-12-01 19:10



धन्यवाद, यह दिलचस्प लग रहा है। मैं इसे तुरंत कोशिश करूँगा। :) - Željko Filipin
मैं आपका कोड काम करने की कोशिश कर रहा हूं। क्या आप प्रत्येक आदेश के बारे में अधिक जानकारी प्रदान कर सकते हैं? (मैं कुछ शोध भी करूंगा।) - Željko Filipin
आप उपयोग कर सकते हैं man grep, man awk आदि। - SaveTheRbtz
धन्यवाद, वह करेंगे। मैं काफी स्पष्ट नहीं था। मुझे अब तक भ्रमित करने वाली एकमात्र चीज है {print $6}, लेकिन मुझे लगता है कि यह एक पंक्ति में डेटा के टुकड़े का प्रतिनिधित्व करता है। - Željko Filipin
बहुत बहुत धन्यवाद। मुझे लगता है कि मेरा लॉग मानक नहीं है, लेकिन मुझे इसे काम करने के लिए $ 6 से $ 8 बदलना पड़ा। - Željko Filipin


जबकि SaveTheRbtz द्वारा एक लाइनर नौकरी करता है, मुझे पार्स करने में कई घंटे लग गए nginx प्रवेश लॉग

यहां उनके आधार पर एक तेज संस्करण है, जो प्रति 100 एमबी लॉग फ़ाइल (लगभग 1 मिलियन लाइनों के अनुरूप) में 1 मिनट से भी कम समय लेता है:

sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg

यह डिफ़ॉल्ट पहुंच लॉग प्रारूप के साथ काम करता है nginx, जो कि जैसा ही है combined अपाचे का प्रारूप httpd और है User-Agent अंतिम क्षेत्र के रूप में, द्वारा सीमित "


6
2017-07-08 16:02





Awstats चाल करना चाहिए, लेकिन अधिक जानकारी प्रदान करेगा। आशा है कि ये आपकी मदद करेगा...


2
2017-12-01 12:57



धन्यवाद, Awstats वेबलाइज़र के समान दिखता है। मुझे इसे आज़माना है। - Željko Filipin
Awstats स्थापित करने के लिए जटिल था। - Željko Filipin


webalizer कर सकते है।

उदाहरण:

webalizer -o reports_folder -M 5 log_file
  • -o reports_folder उस फ़ोल्डर को निर्दिष्ट करता है जहां रिपोर्ट उत्पन्न होती है
  • -M 5 केवल ब्राउज़र का नाम और प्रमुख संस्करण संख्या प्रदर्शित करता है
  • log_file लॉग फ़ाइल नाम निर्दिष्ट करता है
  • स्रोत: ftp://ftp.mrunix.net/pub/webalizer/README

2
2017-12-01 14:19





यह उपयोग किए गए स्वीकृत उत्तर की थोड़ी भिन्नता है fgrep तथा cut

cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn

जब संभव हो तो "कमजोर" कमांड का उपयोग करने के बारे में कुछ अपील है।


2
2018-01-19 02:16





मैं उस के लिए खोल स्क्रिप्ट का उपयोग करता हूं: बिल्ली, अजीब पाइप, सॉर्ट और यूनिक नौकरी करेगा


0
2017-12-01 16:17



धन्यवाद। मुझे पता है कि लॉग कैसे पार्स करें। मैं एक ऐसे टूल की तलाश में था जो पहले से ही जानता है कि इसे कैसे करें, इसलिए मुझे एक स्क्रिप्ट लिखनी नहीं है। - Željko Filipin