bernhard frank’s blog
[bi:frængk] - freimütiges über webhosting auf windows
disclaimerThese postings are provided "AS IS" with no warranties, and confer no rights. Use of included code samples are subject to the terms specified at Microsoft - Terms of Use
Das Ergebnis wird mit 2 Logparser Beispiel Abfragen oder Schritten durchgeführt:
zu 1.)
logparser -i:W3C "select c-ip,QUANTIZE(Sub(TO_TIMESTAMP( date, MAX(time) ),TO_TIMESTAMP( date, MIN(time) )),10) As [verweildauer] INTO c:\temp\logfiles\verweildauer.csv from c:\temp\logfiles\combined.log group by date,c-ip order by [verweildauer] DESC"
erzeugt CSV Datei mit Werten wie z.B.:
c-ip,verweildauer
192.168.68.67,0000-01-01 00:02:40
192.168.68.11,0000-01-01 00:02:40
192.168.68.37,0000-01-01 00:02:40
zu 2.)
Bei dem System handelt es um 6 Webserver bei denen per DNS round robin eine Lastverteilung erreicht werden soll. Um die Güte / Verhalten der Lastverteilung zu überprüfen wurden die Logdateien der einzelnen Server zusammengeführt (auch mittels logparser) und eine Abfrage über die gesamte Logdatei gefahren.
Folgende Logparser Beispiel Abfrage verwendet die PROPCOUNT Funktion um die Prozent-Werte zu berechnen - das Ganze wird dann noch auf 2 Nachkommastellen gerundet und als Tortengrafik dargestellt:
LogParser.exe -i:W3C "select s-ip,DIV(ROUND(MUL(PROPCOUNT(*), 10000.0)),100) AS Percent into c:\temp\lb.jpg from c:\temp\combined.log group by s-ip order by Percent DESC" -chartType:PieExploded3D -chartTitle:"Loadbalancing (% of Requests)" -view:ON -filetype:jpg -values:on -categories:off
Folgende Logparser Beispiel Abfrage summiert die Werte des sc-bytes Feldes aus der Logdatei in Minutenblöcke 'Quantize(time,60)' rechnet die erhaltene Summe in MBit um rundet ein bisschen und stellt das Ganze als Liniendiagramm dar. Da die Berechnung je nach Logdatei möglicherweise etwas länger dauert kann man den Zeitraum noch etwas eingrenzen:
logparser -i:W3C "SELECT TO_TIMESTAMP(date,QUANTIZE(time, 60)) as [Time],DIV(To_REAL(SUM(sc-bytes)),1024000) As [MBit/min] into c:\temp\MBitperMin.jpg from C:\temp\logfiles\combined.log where date between TIMESTAMP('2009-12-10','yyyy-MM-dd') AND TIMESTAMP('2009-12-11','yyyy-MM-dd') group by s-ip,QUANTIZE(time, 60),date " -o:CHART -chartType:Line -values:OFF -groupSize:1024x768 -view:ON
Hintergrund: Kurz vor dem Peak wurde ein Link zu einem Video an tausende Clients versandt.Sehen wir uns den Peak Zeitraum etwas genauer an:
logparser -i:W3C "SELECT TO_TIMESTAMP(date,QUANTIZE(time, 1)) as [Time],DIV(To_REAL(SUM(sc-bytes)),1024000) As [MBit/sec] into c:\temp\MBitperSec.jpg from C:\temp\logfiles\combined.log where time between TIMESTAMP('09:00:00','hh:mm:ss') AND TIMESTAMP('10:00:00','hh:mm:ss') and date = TIMESTAMP('2009-12-11','yyyy-MM-dd') group by s-ip,QUANTIZE(time, 1),date" -o:CHART -values:OFF -groupSize:1024x768 -view:ON -oTsFormat:'hh:mm:ss' -charttype:Line
Prinzipiell diegleiche Abfrage, nur wurde hier mit -oTSFormat:'hh:mm:ss' die Zeitangaben auf der x-Achse sinnvoller formatiert.
Folgende Logparser Beispiel Abfrage liefert die Top 5 der erreichten http Requests/sec aus der IIS Logdatei, dazu werden die Zeiten mittels Quantize commando in 1-Sekunden-Blöcken zusammengefasst:
liefert:
date Interval Hits/s
---------- -------- ----
2009-12-11 09:07:18 204
2009-12-11 09:04:48 204
2009-12-11 09:06:50 203
2009-12-11 09:04:52 199
2009-12-11 09:07:32 196
Szenario:
Problem:die Logfelder für die Performance counter bleiben leer (ApplicationPoolIdentity):
#Software: IIS Advanced Logging Module
#Version: 1.0
#Start-Date: 2009-12-04 10:21:05.973
#Fields: cs-uri-stem W3WP-PrivateBytes TimeTakenMS CPU-Utilization
/default.aspx - 10240 –
Abhilfe: Nachdem die Application Pool Identität auf den NetworkService gesetzt wurde werden die Einträge mitgeloggt:
#Start-Date: 2009-12-04 10:16:13.627
/default.aspx 40357888 10350 53.58