Planung: Parsen von Logdaten und Vorabanalyse mit SQLite

Du hast eine Idee für ein Projekt?
Antworten
Dandu
User
Beiträge: 3
Registriert: Donnerstag 9. Oktober 2014, 14:03

Hallo,

im Rahmen einer Bachelorarbeit lautet mein Thema:
"Zur Bewertung von Systemstabilität soll eine Auswertung von Logdaten automatisch für eingebettete Systeme erfolgen."

Dabei sollen bestimmte Informationen aus verschiedenen Logfiles geparst werden und mit SQLite vorab aufbereitet/sortiert werden.

Im späteren Verlauf sollen diese Daten als Statistiken auf einen Front-End zur Verfügung gestellt werden. Dies ist aber erst einmal uninteressant für den Anfang.

Mit diesem Thread möchte ich erst einmal herausfinden was mit Python alles möglich ist um diese Aufgabenstellung lösen zu können.

Zu den Logfiles:
Diese kommen von verschiedenen Datenloggern und besitzen dadurch auch andere Strukturen im Aufbau (Zeitstempel, Signalwörter, etc) aber geloggt wird die gleiche Hardware. Die Dateien können unterschiedlich groß sein (Anzahl Zeilen >30.000), abhängig von Dauer der Logzeit. Dabei spielt das Thema Performance eine wichtige Rolle (evtl. Multithreading?).
Wichtige Informationen sind z.B. Software und Hardware Version des Gerätes und noch einige mehr.

Geplant war es von mir die Daten mit Python zu parsen und diese Informationen erst in eine XML oder CSV Datei zwischengespeichert werden (z.B. CSV Modul) oder ob das gleich direkt mit dem SQLite Modul möglich wäre.

Ich besitze soweit Grundkenntnisse in C, C++ und Python (etwas weniger als die anderen beiden). Mein Betreuer wünscht sich aber eine Lösung in Python.

Im ersten Schritt wollte ich in einer Logfile nach einer bestimmten Information suchen und diese parsen und dies dann soweit erweitern, bis ich alles habe was ich brauch.

Jetzt würde ich einfach von erfahrenen Python Programmierern erfahren wie gut dies zu bewerkstelligen ist oder ob die Umsetzung Problematisch ist.
Falls noch Unklarheiten sind einfach schreiben.
Sirius3
User
Beiträge: 17757
Registriert: Sonntag 21. Oktober 2012, 17:20

@Dandu: C bringt gar keine, C++ nur ganz spärliche Werkzeuge mit, um Strings zu verarbeiten, da bist Du mit Python schon auf der sicheren Seite.
Meinst Du mit Performance, dass 30.000 Zeilen pro Sekunde oder pro Minute auflaufen? Ein Zwischenschritt über CSV ist unnötig, wenn die Daten sowieso in einer Datenbank landen sollen.
Wenn Du unterschiedliche Log-File-Formate aber mit dem selben Informationsgehalt hast, empfielt sich eine generisches Logfileparser-Interface, das Du je nach Fall mit einer konkreten Implementierung bedienen kannst.
Dandu
User
Beiträge: 3
Registriert: Donnerstag 9. Oktober 2014, 14:03

@Sirius3 bei 2 min loggen werden bei einer Datei ungefähr 40.000 zeilen pro Minute aufgezeichnet. Während des loggens werden 3 files erstellt für jeweils eine Prozessor. Die Dateien sind also unterschiedlich groß. Ich bringe mal in Erfahrung wielange der längste Stabilitätstest geht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ob Multithreading sich lohnt hängt ab ob deine Aufgabe IO-bound oder CPU-bound ist. Wenn dein IO ausgelastet ist, bringts ja nicths wenn mehr Threads auf die Daten warten.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dandu
User
Beiträge: 3
Registriert: Donnerstag 9. Oktober 2014, 14:03

So ist schon etwas her, musste zwischendurch noch an einem anderen Projekt arbeiten.

@Leonidas die Aufgabe ist CPU-bound muss also nicht auf die Daten warten.

Der aktuelle Stand momentan ist, dass ich jede Zeile durchgehe und nach Wörtern aus einer anderen Datei (dictionary) lese. Wird eine Zeile gefunden schreibe ich diese erst einmal in eine andere Datei.

Das Problem ist, das jede Logfile von den Traces der Prozessoren auch anders aufgebaut ist. Eine ist mit Zeitstempel die andere ohne, dann wieder eine verschlüsselt. Die Wörter nach denen ich suche stehen natürlich auch nicht immer an der gleichen Stelle. Jeder Lieferant hat da seine eigenen Gewohnheiten. Außerdem ist damit zu rechnen das sich der Syntax mit neuen Versionen ändert. Habe mir überlegt mit Levenshtein Änderungen der Suchwörter in den traces abzufangen.

Momentan versuche ich mit Regulären Ausdrücken eine 2te Variante zu implementieren. Brauche da aber noch etwas Zeit zum einlesen.

Ich werde demnächst ein neuen Thread aufmachen, wo ich dann mal etwas Quellcode und evtl. ein paar Zeilen von abgeänderten traces (Geheimhaltung und so) zeigen kann.
Antworten