Website-Icon .: blog cscholz.io :.

Exchange 2007: Log-File Analyse mit logparse

Wer sich längere Zeit an Postfix und die sehr übersichtlichen Log-Files gewähnt hat (wie ich) hat bei Exchange 2007 erstmal ein paar Probleme wenn es um die Handhabung der Log-Dateien geht. Es gibt jedoch dafür – wie konnte es anders sein – ein Tool von Microsoft. Für die Analyse der Exchange 2007 LogFiles kann der IIS Log Parser verwendet werden.

Nach der Installation des Log Parsers sollte der Pfad zur LogParser.exe in die Path Variable aufgenommen werden. Damit auch genügend Daten geloggt werden die man analysieren kann, sollte für den Empfangs-/Sende-Connector das logging auf verbose eingestellt werden (MS Technet Artikel).

Set-ReceiveConnector "Connector Name" -ProtocolLoggingLevel verbose
Set-SendConnector "Send Connector Name" -ProtocolLoggingLevel verbose

Die Log-Dateien werden anschließend in folgenden Pfaden angelegt:
Exchange ServerTransportRolesLogsProtocolLogSmtpReceive
Exchange ServerTransportRolesLogsProtocolLogSmtpSend

Default mäßig wird jedes Log-Verzeichnis maximal 250 MB groß. Wie die Einstellungen der Logfile größe geändert werden kann finden Sie hier.

Möchten Sie den Pfad der Log-Dateien ändern geht dies auch wieder über das cmdlet

Set-TransportServer  ExchangeHUBHosName -ReceiveProtocolLogPath "C:WINDOWSsystem32LogFilesSMTPIN"
Set-TransportServer  ExchangeHUBHosName -SendProtocolLogPath "C:WINDOWSsystem32LogFilesSMTPOUT"

Um sich nun die ersten Daten anzeigen zu lassen, wechseln Sie der einfachheitshalber in das Verzeichnis der Exchange 2007 Log-Files und geben folgenden Befehl ein:

LogParser.exe „select * from ...SmtpReceiveRECV*.log” -i:CSV -nSkipLines:4 -o:datagrid

Ja nach Umfang der Abfrage und der zu bearbeitenden Datenmenge kann dies die Netzwerkverbindung unter Umständen sehr belasten!!

Um die Ausgabe auf einzelne Felder zu beschränken müssen die Felder in Eckigen Klammern angegeben werden:

logparser "select [#Fields: date-time] from re*.log" -i:CSV -nSkipLines:4  -o:DATAGRID

Die Überschrift der Spalten kann mittels as angepasst werden:

logparser "select [#Fields: date-time] as Datum/Zeit from re*.log" -i:CSV -nSkipLines:4  -o:DATAGRID

Interessanter sind natürlich erst konretere Auswertungen. Um Zum Beispiel eine Übersicht aller Clients zu bekommen, die eine SMTP Verbindung zum Server aufgebaut haben muss als Auswahlfeld remote-endpoint gewählt werden. Da dieses Datenfeld jedoch die IP + Port enthält muss wiederrum der Port abgeschnitten werden. Dafür gibt es die Funktion extrac_prefix. Der Befehl sieht dann wiefolgt aus:

logparser "select reversedns(extract_prefix(remote-endpoint,0,':')) from re*.log" -i:CSV -nSkipLines:4  -o:DATAGRID

Eine Möglichkeit das Ergebniss noch Aussagekräftiger zu gestalten wäre die Anzahl der Verbindungen pro Host auszugeben. dazu Dazu muss lediglich group by, order by und ein counter eingebaut werden. Die Erweiterung des letzten Befehls wäre dann:

logparser "select reversedns(extract_prefix(remote-endpoint,0,':')) as RemoteSendingHost, count(*) as Hits from re*.log group by RemoteSendingHost order by Hits desc" -i:CSV -nSkipLines:4  -o:DATAGRID

Um diese Ergebnisse nun evtl. dem Vorstand oder dem direkten Vorgesetzten zur Verfügung zu stellen macht sich das ganze als Grafik natürlich sehrviel besser 😉

logparser "select reversedns(extract_prefix(remote-endpoint,0,':')) as RemoteSendingHost, count(*) as Hits into chart.gif from re*.log group by RemoteSendingHost order by Hits desc" -i:CSV -nSkipLines:4 -charttype:pieexploded3d -ChartTitle:"Connection overview" -categories:OFF

Eine Übersicht über die grafischen Darstellungsmöglichkeiten bekommen Sie mit

LogParser -h -o:CHART

Wie die einzelnen Graphen aussehen, können Sie sich hier anschauen.

Mit like lassen sich Felder nach bestimmten Werte Filtern. So zum Beispiel alle Verbindungen in denen ein reset (rset) vorkam.

logparser "select * from re*.log WHERE data LIKE '%rset%'" -i:CSV -nSkipLines:4  -o:DATAGRID

Oder alle eMails die an einen bestimmten Empfänger gingen.

logparser "select * from re*.log WHERE data LIKE '%from%' AND data LIKE '%scholz%'" -i:CSV -nSkipLines:4  -o:DATAGRID

Ebenso lassen sich nicht leere Felder filtern.

logparser "select * from re*.log WHERE context IS NOT NULL" -i:CSV -nSkipLines:4  -o:DATAGRID

So, und nun mal ganz im Vertrauen… wie übersichtlich wirken diese Befehle im Gegensatz zu cat, grep, awk? Ich hab da noch so meine Probleme so einen Filter „mal eben“ zusammen zu bauen.

Aber… kommt Zeit, kommt Rat!

Hier noch ein paar Praxis Beispiele

Wer bekommt die meißte Spam-eMails

LogParser.exe "select recipient-address as Empfänger, count(*) as Treffer from MSGTRK*.log WHERE message-subject LIKE '%SPAM%' and recipient-address IS NOT NULL group by recipient-address order by Treffer desc " -i:CSV -nSkipLines:4 -o:datagrid

Wie groß ist das eMail Aufkommen pro Stunde?

logparser "select extract_prefix([#Fields: date-time],0,':') as Stunde, count(*) as Hits into mails_pro_stunde.gif from RECV20080528-*.log group by Stunde order by Stunde" -i:CSV -nSkipLines:4   -ChartTitle:"Message count per hour" -o:CHART -chartType:Column3D -groupSize:640x480

Spam eMail aufkommen pro Stunde

logparser "select extract_prefix([#Fields: date-time],0,':')as Stunde , count(*) as Hits into spams_pro_stunde.gif from MSGTRK20080529*.log WHERE message-subject LIKE '%SPAM%' group by Stunde order by Stunde" -i:CSV -nSkipLines:4  -ChartTitle:"spams per hour" -o:CHART -chartType:Column3D -gro
upSize:640x480

 

Die mobile Version verlassen