Kompletter Anfänger: Log analyse

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mardor
User
Beiträge: 27
Registriert: Montag 9. Februar 2015, 19:07

Hallo,

ich versuche im Moment verschiedene Logs zu analysieren.

Hier die Beispiel-Logs:

Code: Alles auswählen

1252543170.769 386 192.168.30.103 TCP_MISS_SSL/200 0 TCP_CONNECT tunnel://192.168.34.32:443/ - DIRECT/192.168.34.32 -     DECRYPT_WBRS-DefaultGroup-test.id-NONE-NONE-DefaultRouting <Sear,5.0,-,-,-,-,-,-,-,-,-,-,-,-,-> -
1252543171.166 395 192.168.30.103 TCP_MISS_SSL/200 2061 GET https://www.example.com:443/sample.gif - DIRECT/192.168.34.32 image/gif DEFAULT_CASE-test.policy-test.id-NONE-NONE-NONE <Sear,5.0,0,-,-,-,-,0,-,-,-,-,-,-,-> -
1252543170.769 386 192.168.10.142 TCP_MISS_SSL/200 2061 GET https://www.example.com:443/sample.gif - DIRECT/192.168.34.32 image/gif DEFAULT_CASE-test.policy-test.id-NONE-NONE-NONE <Sear,5.0,0,-,-,-,-,0,-,-,-,-,-,-,-> -
1252543170.769 386 192.168.30.103 TCP_MISS_SSL/200 0 TCP_CONNECT tunnel://192.168.34.32:443/ - DIRECT/192.168.34.32 -     DECRYPT_WBRS-DefaultGroup-test.id-NONE-NONE-DefaultRouting <Sear,5.0,-,-,-,-,-,-,-,-,-,-,-,-,-> -
Hier soll im log beispielsweise nach der IP gesucht werden und dann der für diesen Eintrag der HTTP Response code ausgegeben werden. Beispielsweise soll auf bei der Suche nach "192.168.10.142" die Ausgabe "TCP_MISS_SSL/200" lauten.

Folgendes habe ich geschrieben:

Code: Alles auswählen

import sys
import re

# Zugriffsversuch
try:
    d = open ("lesen_mod_3.txt")
except:
    print("Dateizugriff nicht erfolgreich")
    sys.exit(0)

# Lesen aller Zeilen in eine Liste
allezeilen = d.readlines()

# Schliessen der Datei
d.close()

#Ausfabe und Summierung der Listenelemente
erg = re.findall("192.168.10.142",allezeilen[0:])
print(erg)
Leider erhalte ich folgende Ausgabe:

Code: Alles auswählen

Traceback (most recent call last):
  File "/Users/mschmitt/Extra/Server/sal.netmage.info/Temp/Python Files/lesen_mod_4.py", line 24, in <module>
    erg = re.findall("192.168.10.142",allezeilen[0:])
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/re.py", line 206, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer
Eigentlich dachte ich mir ich kann die Liste nach einem String durchsuchen und erhalte dann die entsprechende Log Zeile. Das weitere vorgehen wäre gewesen die einzelnen Elemente der Log Zeile zu splitten und mir den richtigen Wert zu holen.

Hat jemand eine Idee für mich ?
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Mardor: findall funktioniert nur bei Strings, wie die Fehlermeldung deutlich sagt, mit Listen kann das nichts anfangen. Zudem ist Dein regulärer Ausdruck fast schon fehlerhaft. Ich würde das auch ohne regulären Ausdruck lösen.
Mardor
User
Beiträge: 27
Registriert: Montag 9. Februar 2015, 19:07

Hallo Sirius3,

das Problem ist aber:

Code: Alles auswählen

import sys
import re

# Zugriffsversuch
try:
    d = open ("lesen_mod_3.txt")
except:
    print("Dateizugriff nicht erfolgreich")
    sys.exit(0)

# Lesen aller Zeilen in eine Liste
allezeilen = d.readlines()

# Schliessen der Datei
d.close()

for zeile in allezeilen: 
    erg = re.findall("192\.168\.10\.142",zeile)
    print(erg)
Brint mir folgende Ausgabe:

Code: Alles auswählen

[]
[]
['192.168.10.142']
[]
und das ist auch nicht was ich haben möchte.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Mardor: dann solltest Du wohl das so schreiben, dass Du bekommst was Du willst. Ein if wirkt Wunder.
Mardor
User
Beiträge: 27
Registriert: Montag 9. Februar 2015, 19:07

Hello Sirius3,

vielen Dank für den Tipp.

Code: Alles auswählen

for zeile in allezeilen: 
    if re.findall("192\.168\.10\.142",zeile):
        print(zeile,end="")
    else:
        print("Keine Uebereinstimmung")
Bin einfach ohne den Tipp nicht draufgekommen, warum auch immer.
Sirius3
User
Beiträge: 17749
Registriert: Sonntag 21. Oktober 2012, 17:20

@Mardor: und da Du eigentlich keinen regulären Ausdruck benutzt, wäre »"192.168.10.142" in zeile« deutlich lesbarer.
Antworten