सवाल आईआईएस निगरानी के लिए अनुशंसित लॉगपार्सर प्रश्न?


चूंकि स्टैक ओवरफ़्लो बढ़ता है, हम समस्या को पहचानने के लिए हमारे आईआईएस लॉग पर बारीकी से देखना शुरू कर रहे हैं HTTP क्लाइंट - जैसी चीजें दुष्ट वेब मकड़ियों, जिन उपयोगकर्ताओं के पास एक बड़ा पृष्ठ है, जो हर दूसरे, खराब लिखित एक-ऑफ वेब स्क्रैपर्स को रीफ्रेश करने के लिए सेट करते हैं, ट्रिक्सी उपयोगकर्ता जो पेज बढ़ाने की कोशिश करते हैं, एक अरब बार गिनती करते हैं, और बहुत आगे।

मैं कुछ के साथ आया हूँ LogParser प्रश्न जो आईआईएस लॉग फ़ाइल पर इंगित करते समय हमें विषमता और असामान्यताओं की पहचान करने में मदद करते हैं।

यूआरएल द्वारा शीर्ष बैंडविड्थ उपयोग

SELECT top 50 DISTINCT 
SUBSTR(TO_LOWERCASE(cs-uri-stem), 0, 55) AS Url, 
Count(*) AS Hits, 
AVG(sc-bytes) AS AvgBytes, 
SUM(sc-bytes) as ServedBytes 
FROM {filename} 
GROUP BY Url 
HAVING Hits >= 20 
ORDER BY ServedBytes DESC
यूआरएल हिट avgbyte परोसा जाता है
------------------------------------------------- - ---- ------- -------
/favicon.ico 16774 522 8756028
/content/img/search.png 15342 446 6842532

यूआरएल द्वारा शीर्ष हिट

SELECT TOP 100 
cs-uri-stem as Url, 
COUNT(cs-uri-stem) AS Hits 
FROM {filename} 
GROUP BY cs-uri-stem 
ORDER BY COUNT(cs-uri-stem) DESC
यूआरएल हिट
------------------------------------------------- - ----
/content/img/sf/vote-arrow-down.png 14076
/content/img/sf/vote-arrow-up.png 14018

आईपी ​​/ उपयोगकर्ता-एजेंट द्वारा शीर्ष बैंडविड्थ और हिट

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
Count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent) 
ORDER BY TotalBytes desc
क्लाइंट उपयोगकर्ता-एजेंट टोटलबाइट हिट करता है
------------- ------------------------------------- -------- --------- -----
66.249.68.47 मोज़िला / 5.0 + (संगत; + Googlebot / 2.1; 135131089 16640
1 9 4.90.190.41 omgilibot / 0.3 ++ omgili.com 133805857 6447

आईपी ​​/ उपयोगकर्ता-एजेंट द्वारा घंटे तक शीर्ष बैंडविड्थ

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
Sum(sc-bytes) AS TotalBytes, 
count(*) as Hits 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY sum(sc-bytes) desc
एचआर क्लाइंट उपयोगकर्ता-एजेंट totbytes हिट
- ------------- ----------------------------------- ------ -------- ----
9 1 9 4.90.190.41 omgilibot / 0.3 ++ omgili.com 30634860 ​​1549
10 1 9 4.90.190.41 omgilibot / 0.3 ++ omgili.com 2 9 070370 1503

आईपी ​​/ उपयोगकर्ता-एजेंट द्वारा घंटे के आधार पर शीर्ष हिट

SELECT TOP 30
TO_STRING(time, 'h') as Hour, 
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
count(*) as Hits, 
Sum(sc-bytes) AS TotalBytes 
FROM {filename} 
group by c-ip, cs(User-Agent), hour 
ORDER BY Hits desc
एचआर क्लाइंट उपयोगकर्ता-एजेंट टोटलबाइट हिट करता है
- ------------- ----------------------------------- ---------- --------
10 1 9 4.90.190.41 omgilibot / 0.3 ++ omgili.com 1503 2 9 070370
12 66.249.68.47 मोज़िला / 5.0 + (संगत; + Googlebot / 2.1 1363 13186302

निश्चित रूप से {filename} आईआईएस लॉगफाइल का मार्ग होगा, जैसे कि

c:\working\sologs\u_ex090708.log

मैंने अच्छे आईआईएस लॉगपार्सर प्रश्नों के लिए बहुत सी वेब खोज की और बहुमूल्य छोटी पाया। इन 5, ऊपर, गंभीर समस्या ग्राहकों की पहचान करने में हमें काफी मदद मिली है। लेकिन मैं सोच रहा हूं - हम क्या खो रहे हैं?

आईआईएस लॉग को टुकड़ा करने और पासा करने के लिए अन्य तरीके क्या हैं (अधिमानतः LogParser प्रश्नों के साथ) सांख्यिकीय विसंगतियों के लिए उन्हें मेरा करने के लिए? क्या आपके पास अपने सर्वर पर चलने वाले अच्छे आईआईएस लॉगपार्सर प्रश्न हैं? 


86
2017-07-25 11:19


मूल


द्वारा संदर्भित blog.stackoverflow.com/2009/07/podcast-63 - Brad Gilbert
शीर्ष बैंडविड्थ उपयोग क्वेरी में DISTINCT कीवर्ड है। ये किस काम के लिए अच्छा है? - Jakub Šturc


जवाब:


हैकिंग सक्रियताओं या अन्य हमलों के लिए एक अच्छा संकेतक प्रति घंटे त्रुटियों की संख्या है। निम्नलिखित लिपि वापस आती है तिथियों और घंटों जिनमें 25 से अधिक त्रुटि कोड थे लौटा हुआ। साइट पर यातायात की मात्रा (और आपके वेब एप्लिकेशन की गुणवत्ता ;-)) के आधार पर मूल्य समायोजित करें।

SELECT date as Date, QUANTIZE(time, 3600) AS Hour, 
       sc-status as Status, count(*) AS ErrorCount
FROM   {filename} 
WHERE  sc-status >= 400 
GROUP BY date, hour, sc-status 
HAVING ErrorCount > 25
ORDER BY ErrorCount DESC

नतीजा कुछ ऐसा हो सकता है:

तिथि घंटे की स्थिति त्रुटि गणना
---------- -------- ------ ------
2009-07-24 18:00:00 404 187
2009-07-17 13:00:00 500 99
2009-07-21 21:00:00 404 80
2009-07-03 04:00:00 404 45
...

अगली क्वेरी एक का पता लगाता है एक आईपी पते से एक ही यूआरएल पर असामान्य रूप से उच्च संख्या में हिट। इस उदाहरण में मैंने 500 चुना है, लेकिन आपको किनारे के मामलों के लिए क्वेरी बदलनी पड़ सकती है (उदाहरण के लिए Google लंदन के आईपी पते को छोड़कर ;-)।)

SELECT DISTINCT date AS Date, cs-uri-stem AS URL,
      c-ip AS IPAddress, Count(*) AS Hits
FROM  {filename}
GROUP BY date, c-ip, cs-uri-stem
HAVING Hits > 500
ORDER BY Hits Desc
दिनांक यूआरएल आईपीएड्रेस हिट्स
---------- ---------------------------------------- ---------- ----
2009-07-24 /Login.aspx 111.222.111.222 1889
2009-07-12 /AccountUpdate.aspx 11.22.33.44 9 73
2009-07-19 /Login.aspx 123.231.132.123 821
2009-07-21 /Admin.aspx 44.55.66.77 571
...

19
2017-07-25 11:47



दूसरी क्वेरी, हम पहले से ही करते हैं - कई प्रश्नों में समूह को नोट करें। आईपी ​​और उपयोगकर्ता एजेंट द्वारा, यह दोनों दुनिया में सबसे अच्छा है, क्योंकि यदि उपयोगकर्ता एजेंट शून्य है, तो यह आईपी जैसा ही है, और यदि नहीं, तो यह अधिक जानकारी है। - Jeff Atwood
ठीक है जेफ, उपयोगकर्ता-एजेंट जोड़ना समझ में आता है। क्षमा करें, खराब शॉर्ट-टाइम मेमोरी और ध्यान घाटा विकार का संयोजन। :-) - splattne
बदलना having के साथ Limit n पहली क्वेरी को ट्यून करने के लिए एक अच्छा तरीका बना सकता है - BCS


वैध ट्रैफिक को फ़िल्टर करने के लिए एक चीज जिसे आप विचार कर सकते हैं (और अपना दायरा बढ़ाएं) सक्षम करना है cs(Cookie) अपने आईआईएस लॉग में, थोड़ा सा कोड जोड़ें जो जावास्क्रिप्ट का उपयोग करके एक छोटी कुकी सेट करता है, और जोड़ें WHERE cs(Cookie)=''

आपके छोटे कोड के कारण, प्रत्येक उपयोगकर्ता को कुकी होना चाहिए जब तक कि वे मैन्युअल रूप से कुकीज़ अक्षम नहीं करते हैं (जो कि लोगों का एक छोटा प्रतिशत हो सकता है) या जब तक कि वह उपयोगकर्ता वास्तव में एक बॉट नहीं है जो जावास्क्रिप्ट का समर्थन नहीं करता है (उदाहरण के लिए, wget, httpclient , आदि जावास्क्रिप्ट का समर्थन नहीं करते हैं)।

मुझे संदेह है कि यदि किसी उपयोगकर्ता के पास गतिविधि की उच्च मात्रा होती है, लेकिन वे कुकीज़ स्वीकार करते हैं और जावास्क्रिप्ट सक्षम होते हैं, तो वे एक वैध उपयोगकर्ता होने की अधिक संभावना रखते हैं, जबकि यदि आपको उपयोगकर्ता को उच्च मात्रा में गतिविधि मिलती है लेकिन कोई कुकी / जावास्क्रिप्ट समर्थन नहीं है , वे एक बॉट होने की अधिक संभावना है।


6
2017-07-25 17:26





क्षमा करें, अभी तक टिप्पणी नहीं कर सकता है इसलिए मुझे जवाब देने के लिए मजबूर किया गया है।

'यूआरएल द्वारा शीर्ष बैंडविड्थ उपयोग' क्वेरी के साथ एक मामूली बग है। जबकि अधिकांश समय आप एक पृष्ठ के लिए अपने अनुरोध लेते हैं और फ़ाइल आकार से गुणा करते हैं, इस मामले में, चूंकि आप किसी भी क्वेरी पैरामीटर पर ध्यान नहीं दे रहे हैं, तो आप कुछ थोड़ा-से भागने जा रहे हैं हर गलत संख्या।

अधिक सटीक मूल्य के लिए, बस एक करें योग (अनुसूचित जाति-बाइट) के स्थान पर MUL (हिट्स, AvgBytes) ServedBytes के रूप में


6
2017-09-10 13:11





एंडर्स लुंडस्ट्रॉम सामान्य लॉगपार्सर पूछताछ के संबंध में ब्लॉग लेखों की एक श्रृंखला लिख ​​रहा है।

मैं इनका उपयोग कर रहा हूं:


6
2017-10-28 14:12





इस लड़के के पास लगभग एक दर्जन उपयोगी प्रश्न हैं:

http://logparserplus.com/Examples/Queries.aspx


5
2017-08-09 15:07



और वह लड़का (मुझे) है हमेशा पोस्ट करने के लिए और अधिक प्रश्नों की तलाश में। - James Skemp


आप अपने सबसे लंबे अनुरोध (उपजी और / या प्रश्न), और सर्वर द्वारा प्राप्त अधिकांश बाइट वाले लोगों को देखना चाहते हैं। मैं उन बाइट्स और आईपी द्वारा समूहों को भी कोशिश करता हूं, ताकि आप देख सकें कि एक विशेष अनुरोध प्रारूप जो एक आईपी द्वारा दोहराया जा सकता है।

SELECT TOP 30
cs-uri-stem,
cs-uri-query,
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-bytes,
c-ip,
FROM {filename} 
WHERE cs-uri-stem != '/search'
ORDER BY LEN(cs-uri-query) desc

SELECT TOP 30
COUNT(*) AS Hits
cs-uri-stem,
cs-uri-query,
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-bytes,
c-ip,
FROM {filename} 
GROUP BY c-ip, cs(User-Agent), cs-bytes 
ORDER BY Hits desc

मैं या तो दिन के एक घंटे और मिनट के लिए आईपी का अनुरोध करने के समूह के लिए हिट गिनता हूं, या घंटे के मिनट के साथ अनुरोध करने वाले आईपी को समूहबद्ध करता हूं ताकि यह पता चल सके कि स्क्रिप्ट हो सकती है या नहीं। यह घंटे स्क्रिप्ट द्वारा हिट पर एक छोटा सा संशोधन होगा।

किसी गैर-प्रोग्रामिंग साइट पर, SQL कीवर्ड के लिए अपने लॉग खोजना भी एक अच्छा विचार है, जैसे चीजें SELECT, UPDATE, DROP, DELETE और अन्य विषमताएं जैसे FROM sys.tables, एक साथ ऑरिंग और आईपी द्वारा गिनती आसान लगती है। इनमें से अधिकांश साइटों के लिए, शायद ही कभी यूआरआई के क्वेरी हिस्से में दिखाई देने वाले शब्द शायद ही कभी होंगे, लेकिन यहां वे वैध रूप से यूआरआई स्टेम और डेटा पार्ट्स में दिखाई दे सकते हैं। मैं किसी भी हिट के आईपी को उलटना पसंद करता हूं यह देखने के लिए कि कौन प्रीमियर स्क्रिप्ट चला रहा है। मुझे देखना है .ru, .br, .cz तथा .cn। मेरा न्याय करने का मतलब नहीं है, लेकिन मैं अब उन्हें अवरुद्ध करने के लिए प्रवृत्त हूं। उनकी रक्षा में, वे देश आमतौर पर अधिकतर आबादी वाले होते हैं, हालांकि मैं अब तक बहुत कुछ नहीं देखता हूं .in, .fr, .us या .au वही कर रहा हूँ

SELECT TOP 30
c-ip as Client, 
SUBSTR(cs(User-Agent), 0, 70) as Agent, 
cs-uri-stem,
LOWER(cs-uri-query) AS q,
count(*) as Hits,
SUM(sc-bytes) AS BytesSent,
SUM(cs-bytes) AS BytesRecv
FROM {filename} 
WHERE q like '%select%' OR q like '%sys.tables%' OR etc... 
GROUP BY c-ip, cs(User-Agent) 
ORDER BY Hits desc

अनुलेख मैं यह सत्यापित नहीं कर सकता कि ये प्रश्न वास्तव में सही ढंग से चलेंगे। अगर उन्हें फिक्सिंग की ज़रूरत है तो कृपया उन्हें स्वतंत्र रूप से संपादित करें।


4
2017-07-30 17:06





ये सभी पाए गए थे यहाँ (जो आपके आईआईएस लॉगफाइल को पार्स करने के लिए एक उत्कृष्ट गाइड है, बीटीडब्ल्यू):

आपकी वेबसाइट पर 20 नवीनतम फाइलें

logparser -i: एफएस "शीर्ष 20 पथ चुनें, सी: \ inetpub \ wwwroot * से क्रिएशनटाइम *। * क्रिएशनटाइम डीईएससी द्वारा आदेश" -rtp: -1

Path                                                        CreationTime
----------------------------------------------------------- ------------------
c:\inetpub\wwwroot\Default.asp                              6/22/2003 6:00:01
c:\inetpub\wwwroot\About.asp                                6/22/2003 6:00:00
c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00

20 सबसे हाल ही में संशोधित फाइलें

logparser -i: एफएस "शीर्ष 20 पथ चुनें, सी: \ inetpub \ wwwroot * से LastWriteTime *। * LastWriteTime DESC द्वारा आदेश" -rtp: -1

Path                                                        LastWriteTime
----------------------------------------------------------- ------------------
c:\inetpub\wwwroot\Default.asp                              6/22/2003 14:00:01
c:\inetpub\wwwroot\About.asp                                6/22/2003 14:00:00
c:\inetpub\wwwroot\global.asa                               6/22/2003 6:00:00
c:\inetpub\wwwroot\Products.asp                             6/22/2003 6:00:00

जिन फ़ाइलों के परिणामस्वरूप 200 स्टेटस कोड हैं (यदि ट्रोजन हटा दिए गए थे)

लॉगपार्सर "चयन DISTINCT TO_LOWERCASE (सीएस-यूरी-स्टेम) के रूप में यूआरएल, गणना () पूर्व से एएस हिट्स.log जहां URL द्वारा URL ऑर्डर द्वारा स्क-स्टेटस = 200 ग्रुप "-rtp: -1

URL                                      Hits
---------------------------------------- -----
/About.asp                               122
/Default.asp                             9823
/downloads/setup.exe                     701
/files.zip                               1
/Products.asp                            8341
/robots.txt                              2830

किसी भी आईपी पते को दिखाएं जो एक ही पृष्ठ में एक ही दिन में 50 से अधिक बार हिट करता है

लॉगपार्सर "चयन दिनांक दिनांक, सीएस-यूरी-स्टेम, सी-आईपी, गणना () पूर्व से एएस हिट्स.log ग्रुप बाय डेट, सी-आईपी, सीएस-यूरी-स्टेम हैविंग हिट्स> हिट्स डेस्क द्वारा 50 ऑर्डर "-rtp: -1

date       cs-uri-stem                         c-ip            Hits
---------- ----------------------------------- --------------- ----
2003-05-19 /Products.asp                       203.195.18.24   281
2003-06-22 /Products.asp                       210.230.200.54  98
2003-06-05 /Products.asp                       203.195.18.24   91
2003-05-07 /Default.asp                        198.132.116.174 74

3
2017-08-06 20:58



मैंने उन पर ध्यान दिया है और उन्हें विशेष रूप से सहायक नहीं मिला है। वे ज्यादातर "समझौता पाते हैं" और यह वास्तव में हमारा लक्ष्य नहीं है (हमें समझौता नहीं किया गया है) - Jeff Atwood