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
    • -i gibt das Trennzeichen an was bei Exchange das Komma ist.
    • -nSkipLines gibt an wieviele Zeilen am Anfang jedes Logfiles übersprungen werden. Hier 4, da dier ersten 4 Zeilen nur der Logfile-Header steht
    • -o gibt das Ausgabeformat an

    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

     

    Leave A Reply