Laden...

LogfileReader - Daten einlesen und auf Webseite ausgeben

Erstellt von cognitionis vor 2 Jahren Letzter Beitrag vor 2 Jahren 326 Views
C
cognitionis Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren
LogfileReader - Daten einlesen und auf Webseite ausgeben

Hallo zusammen,

ich möchte einen Logfile Reader basteln, der von einem Client auf mehrere Server zugreift und mir dabei die zuletzt geänderte Datei anzeigt bzw. einen Teil des Inhalts ausliest und das immer wieder tun soll, z.B. alle 2 Minuten oder so.
Danach würde ich diese Infos gerne auf einer Webseite anzeigen lassen bzw. die Webseite halbwegs optisch ansprechend erstellen, mit ein paar Textfeldern, die dann mit den Daten befüllt werden sollen. Und die Daten sollte eben regelmäßig immer wieder aktualisiert werden.

Allerdings habe ich noch ein paar Fragen und zwar:
1.) Das Durchsuchen all dieser Ordner dauert ziemlich lange, pro Server bis zu 1-2 Minuten. Wie kann ich hier die Performance verbessern? Gibt es eine schnellere Methode?
2.) Wie kann ich bei einer Webseite Daten anzeigen lassen, also einfach ganz simpel? Ich habe im Internet recherchiert und bin da von ASP, JavaScript, PHP zu allerhand Möglichkeiten gekommen, aber das hat alles ziemlich kompliziert gewirkt. Gibt es da was ganz Simples für Anfänger oder ein Tutorial. Ich weiß nicht mal so recht nach was ich suchen müsste.

Das ist der Code, der gut funktioniert aber leider performancemäßig ziemlich langsam ist.


            // Der Variablen directory wird der zu durchsuchende Pfad zugewiesen
            var directory = new DirectoryInfo(@"\\10.22.33.456\Programm(2)");

            // Der Variablen myFile wird zugewiesen, dass nach *.txt Dateien in allen Unterordnern gesucht wird nach der Datei mit dem letzten
            // Schreibzugriff in absteigender Reihenfolge
            var myFile = (from f in directory.GetFiles("*.txt",SearchOption.AllDirectories)
                          orderby f.LastWriteTime descending 
                          select f).First();


            LblLabel1.Text += "\n" + myFile.DirectoryName;
            LblLabel1.Text += "\nvar directory type: " + directory.GetType();
            LblLabel1.Text += "\nvar myFile type: " + myFile.GetType();
            LblLabel1.Text += "\n" + Convert.ToString(myFile);
            LblLabel1.Text += "\n" + myFile.LastAccessTime;

Danke! 🙂

T
2.222 Beiträge seit 2008
vor 2 Jahren

Das Thema klingt interessant.
Lösungen für das Problem gebe es vermutlich einige.

Welche Logs liest du von den Servern aus?
Da du über eine Freigabe die Logs abfragen willst und das auch noch rekursiv, kann es je nach Tiefe der Ordner Struktur auch lange dauern.
Du könntest das ganze beschleunigen, wenn du weißt welche Ordner wo liegen und diese dann gezielt abfragst.
Dann sparst du dir viel Laufzeit nur mit der Suche nach den Logs.

Die Anzeige auf der Seite könntest du z.b. mit einer simplen Lösung auf Basis einer Api umsetzen.
Wir haben letztens einen Prozess gebaut bei dem wir Anzeigedaten für die Seite über eine Api pushen und diese dann im Cache der Web Anwendung speichern.
Da die Daten regelmäßig aktualisiert werden müssen, müssen wir die Daten auch nicht in einer Datenbank zwischenspeichern.

Das gleiche könntest du hier machen.
Prozess wäre dann grob so.

  1. Per Task die Logs auslesen
  2. Über eine Http Api (WebApi) die Daten mit einem eindeutigen Key und den Texten als Value im Cache speichern.
  3. Auf der Seite dann die Texte über die eindeutigen Keys auslesen und anzeigen.

Da durch brauchst du keine Datenbank und die Daten können dann auch regelmäßig aktualisiert werden.
Nur wenn du die Daten zwischen einem Neustart des Webs auch speichern willst, solltest du diese im Task in der Datenbank speichern und für die Anzeige aus diese laden.

Nachtrag:
Wenn ihr die Logs andersweitig speichern könnt, also die Programme auch von euch änderbar wären, dann könntet ihr auch einen zentralen Log Server verwenden.
Wir nutzen für die Speicherung von vielen Logdateien z.B. syslog-ng um von GS Boxen die eingehenden Daten zu loggen.
Damit speichern wir unmengen an Logdateien und können diese auch einfach zentral auslesen und verarbeiten.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

C
cognitionis Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

Hallo,

bei den 5 Servern handelt es sich um 5 verschiedene Maschinen/Testsysteme, die mittels automatisierten Prüfprogrammen unterschiedliche Produkte prüfen und danach die Daten in ein Logfile abspeichern.
Die Ordner können wir leider nicht gezielt durchsuchen, da alle Programme dort zu unterschiedlichen Zeitpunkten verwendet werden und das Logfile im jeweiligen Prüfprogrammordner im Unterordner "DATALOG" gespeichert wird.
Und wir wissen eben nie, welches Programm auf welchem Testsystem zu welchem Zeitpunkt läuft, daher will ich mit dieser Webseite eine Übersicht basteln, bei der man sehen kann was jetzt zurzeit auf den jeweiligen Testsystemen läuft.

Also es gibt z.B. folgende Ordner:
Programm (1)
Programm (2)
Programm (3)
Programm (4)
Programm (5)
Programm (6)
Programm (7)
...
Programm (100)
Und jeder einzelne dieser Ordner enthält den Unterordner "DATALOG"

Ich hänge mal ein Bild einer Prozessvisualisierung dazu (Siehe Anhang)

Die Möglichkeit mit der WebAPI klingt interessant. Ich werde mal nach Tutorials suchen. Falls du evtl. ein gutes hast bzw. womöglich auch ein Beispiel, wäre ich sehr dankbar, wenn du mir sagen könntest, wo ich so eines finde. 🙂

4.938 Beiträge seit 2008
vor 2 Jahren

Hallo,

wenn die Daten explizit in einem Unterordner "DATALOG" liegen, dann verwende (mit entsprechender Anpassung) [Snippet] Verzeichnisse und Dateien rekursiv durchlaufen (beachte besonders den Hinweis bzgl. SearchOption.AllDirectories).

Du solltest also zuerst alle Ordner nach "DATALOG" durchsuchen, und erst dann dadrin die Log-Files auslesen (und nicht in allen Ordnern nach Log-Files suchen).
Wenn sogar die "DATALOG"-Ordner immer direkt in den obersten "Programm (X)"-Verzeichnissen liegen, dann reduziert sich die Suche ja noch mehr (also erst alle Hauptordner durchgehen, dort dann den "DATALOG"-Unterordner überprüfen und erst dann die Log-Files dadrin auslesen).

Edit: Du kannst dir auch mal QuickIO.NET von Abt anschauen.

16.828 Beiträge seit 2008
vor 2 Jahren

Also meine erste Frage wäre: warum machst sowas selbst?
Riecht danach, dass ihr Logs nicht nach Standard schreibt, zB mit Full Structured Logging Strukturen, zB mit Serilog.
Würde man das verwenden, dann hätte man a) einen validen, weit verbreiteten Standard und b) die Tools dazu 🙂

Zur Frage wie man einen Server schnell durchsuchen kann:
Da gibt es keine pauschale Antwort, weil das sehr auf den Server und das Netzwerk ankommt.
Viele kleine Dateien erzeugen einen hohen Netzwerk-Overhead und dadurch wird das sehr langsam, besonders über SMB.

Wenn Du nur Standard-Infos brauchst, dann arbeite nicht mit den DirectoryInfo und FileInfo Objekten (die erzeugen unter der Haube mehrere Calls!), sondern nur mit den Pfaden; das erzeugt auf dem Dateisystem nur einen Call => schneller.

aber das hat alles ziemlich kompliziert gewirkt.

Jo, Webseiten bzw. alle Arten von Netzwerk-basierten Anwendungen sind i.d.R. komplexer in der Technologie als Desktop-Applikationen.
Da wirst nicht drum herum kommen zumindest die Basics zu lernen.

Ich weiß nicht mal so recht nach was ich suchen müsste.

Bei der Aussage scheinst die Microsoft Doku nicht zu kennen, denn diese ist seeehr umfangreich, und sehr ausführlich.
Basiert aber natürlich auch darauf, dass Du zB bereits bestehst, was HTTP ist.

ASP.NET-Dokumentation

C
cognitionis Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

@Th69
Cool, danke für den Tipp. So kann man die Suche sicher ein wenig beschleunigen. 🙂
Werd ich dann noch so umschreiben und testen!

Also meine erste Frage wäre: warum machst sowas selbst?
Riecht danach, dass ihr Logs nicht nach Standard schreibt, zB mit Full Structured Logging Strukturen, zB mit Serilog.
Würde man das verwenden, dann hätte man a) einen validen, weit verbreiteten Standard und b) die Tools dazu 🙂

@Abt
Das klingt schon fast nach Captain Einsicht!
Was genau willst du nun für eine Antwort hören?
Warum die Testsysteme in meiner Firma seit Jahren so aufgebaut wurden?
Warum sie den Standard nicht verwendet haben?
Hätte hätte Fahrradkette? Hätte ich im Lotto gewonnen, dann müsste ich nicht mehr arbeiten! 🙂
Fakt ist, dass das System nun so aufgebaut ist und ich eine Lösung finden muss. Das warum, wieso und hätte spielt dabei überhaupt keine Rolle mehr! Also die Sinnhaftigkeit von so einem Post, außer grundlos Kritik zu posten, kann ich überhaupt nicht nachvollziehen!

Bei der Aussage scheinst die Microsoft Doku nicht zu kennen, denn diese ist seeehr umfangreich, und sehr ausführlich.

Genau deswegen frag ich ja auch nach Infos, weil man als Anfänger ja sämtliche Quellen nicht kennt. Und ich bin natürlich dankbar für jede neue sinnvolle Quelle, die genannt wird!
https://docs.microsoft.com/de-de/dotnet/api/?view=netframework-4.8 --> Ich suche meistens anhand derer Doku nach Lösungen, aber wenn ich nicht mal weiß nach was ich suchen soll, dann werd ich logischerweise auch nichts finden!

463 Beiträge seit 2009
vor 2 Jahren

Warum die Testsysteme in meiner Firma seit Jahren so aufgebaut wurden?
Warum sie den Standard nicht verwendet haben?
Hätte hätte Fahrradkette? Hätte ich im Lotto gewonnen, dann müsste ich nicht mehr arbeiten! 🙂
Fakt ist, dass das System nun so aufgebaut ist und ich eine Lösung finden muss. Das warum, wieso und hätte spielt dabei überhaupt keine Rolle mehr! Also die Sinnhaftigkeit von so einem Post, außer grundlos Kritik zu posten, kann ich überhaupt nicht nachvollziehen!

Mit so einer Einstellung wirst du als Entwickler nicht weiterkommen! Es macht durchaus Sinn vorhandes zu hinterfragen und dort ggf. Energie zur Anpassung/Update zu investieren. Ansonsten wirst du immer nur Löcher stopfen und Workarounds basteln - entwicklen würde ich dies dann nicht nennen...

Ich kann übrigens die Sinnhaftigkeit sehr wohl nachvollziehen warum @Abt dies geschrieben hat - du bist da anscheinend noch nicht so weit und steckst in deiner Bastelstube fest - da wünsche ich dir auf jeden Fall viele Glück, denn das wirst du für die Zukunft brauchen!

VG Stefan

C
cognitionis Themenstarter:in
10 Beiträge seit 2021
vor 2 Jahren

Es sind mehrere Maschinen und Datenbanken auf das bestehende System eingestellt und es funktioniert seit Jahren und das hat mit meiner Programmierübung auch überhaupt nichts zu tun!

Das Tool, welches ich schreiben will, soll nur meinem Team ein wenig die Übersicht erleichtern. Und es ist für mich eine gute Übung um Programmieren zu lernen.
Es ist weder zwanghaft erforderlich, noch soll das System geändert werden. Außerdem bin ich kein Entwickler, sondern mache das nebenbei nur aus Eigeninteresse, ist das verboten?
Stattdessen wird hier nur das bestehende System kritisiert und nicht auf meine Frage eingegangen. Ich versteh dieses Verhalten ehrlich gesagt nicht.

Von T-Virus und Th69 habe ich bisher tolle Antworten und super Hilfestellungen erhalten und ich glaube das ist doch der Sinn hinter einem Forum oder etwa nicht?

463 Beiträge seit 2009
vor 2 Jahren

Stattdessen wird hier nur das bestehende System kritisiert und nicht auf meine Frage eingegangen. Ich versteh dieses Verhalten ehrlich gesagt nicht.

Von T-Virus und Th69 habe ich bisher tolle Antworten und super Hilfestellungen erhalten und ich glaube das ist doch der Sinn hinter einem Forum oder etwa nicht?

Meinst du nicht, dass es auch Sinn macht dich auf Probleme der bestehenden Systeme hinzuweisen? Wenn ich lese "jahrelang" und "IT" dann schellen bei mir sofort alle Alarmglocken - IT ist nun mal permanente Weiterentwicklung. Man sollte immer alle Seiten betrachten - und da dir auf deine Frage schon Antworten gegeben wurden ist doch gut, dass auch auf die Systeme eingegangen wird, oder?

Ich kenne viele die würden am liebsten heute noch mit WinXP / Server 2003 arbeiten - aber die Zeit ist nun mal vorbei, wir sind nun mal schon beim Windows 10 und Server 2019 angekommen - und auch in der Entwicklung hat sich in dieser Zeit einiges verändert. Klar, ihr könnt weiterhin bei eurer Lösung bleiben und in 1-3 Jahren verzweifeln weil gar nichts mehr geht oder ihr versucht nicht nur zu basteln/fummeln sondern verbünftige Lösungen zu finden.

16.828 Beiträge seit 2008
vor 2 Jahren

Das klingt schon fast nach Captain Einsicht!
Was genau willst du nun für eine Antwort hören?

Wenn Du ernst genommen werden willst, dann solltest Dich auch entsprechend benehmen.

Ich kenn Deine Umgebung nicht, ich kenn die Gründe nicht.
Im Endeffekt war das nichts anderes als ein Hinweis, dass es dafür einen Standard gibt, den man zumindest mal kennen könnte - und man sowas eben nicht selbst bauen muss, was letzten Endes Geld kostet - für die Firma. Das spart Dir doch Zeit und Du musst Dich nicht drum kümmern, wenns da schon was gibt. Ist doch toll?
Also nimm es doch einfach als Hinweis an, dass es sowas gibt, wenn Du es nicht kennst.

Kein Grund pampig zu werden und Deinen Berufs?frust hier abzuladen.
Danke.

Entsprechend kann ich auch Stefan's Beiträge verstehen.
Besonders der Hinweis

Ansonsten wirst du immer nur Löcher stopfen und Workarounds basteln - entwicklen würde ich dies dann nicht nennen...

ist viel wert.
Ich bin seit >15 Jahren im Maschinenbau selbst (als Berater) tätig und was ich täglich seh grenzt manchmal durchaus als Lottierie, Inkompotenz, viel unwissen und Totalschäden.
Daher nimm die entsprechende Hinweise einfach entgegen; gibt durchaus Entwickler, die Dir das nicht umsonst sagen. Ein wunder, dass manche Maschinenbau-Hersteller überhaupt Software ausliefern können.

Aber keine Frage: gibt auch gute Maschinenbau-Software und gute Entwickler bei Machinenbauern!
Keiner will Dir hier schaden.

Stattdessen wird hier nur das bestehende System kritisiert und nicht auf meine Frage eingegangen. Ich versteh dieses Verhalten ehrlich gesagt nicht.

Niemand hat hier pauschal was kritisiert. Wir kennen wie gesagt Deine Umgebung nicht, also müssen wir nachfragen, warum das so ist, wie es aktuell ist.
Kann dazu legitime Gründe geben, weil das halt "so sein muss, sonst geht nix mehr" - oder weil einem das Wissen fehlt, dass es hier schon einen schlauen Standard gibt.
Dass Du jetzt eine einfache Nachfrage des bestehendes Systems als Kritik empfindest - nun, eher vermutlich ein persönliches Ding.