PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Win2k3 - Auswertung von Logfiles?


roman
2008-07-16, 10:42:40
Hi Leute,

habe ein kleines Problem, bei dem ich leider nicht mehr weiterkomme.

Ich brauche eine Auswertung des Speicherverbrauchs von SSIS-Paketen. Jedes Paket gibt dazu über unser Jobscheduling-System ein Logfile aus, in dem unter anderem eben der Speicherverbrauch verzeichnet ist. Um nun nicht jede Datei einzeln öffnen zu müssen (sind pro Tag ca. 800 Logfiles), suche ich nach einer effektiven Möglichkeit, die jeweilige Zeile auszulesen und in ein neues File zu schreiben, wenn möglich auch noch mit dem Dateinamen vorne dran.

Gibt es da mit Windows-Bordmitteln (VBScript o.ä.) eine Möglichkeit, das zu realisieren?

Thx schonmal,

Roman

Schnitzl
2008-07-16, 13:09:53
vbscript wär ne Möglichkeit, dazu sollten aber die Logfiles eine definierte Form haben.
Wie das neue File aussehen soll hab ich nicht so ganz verstanden.
Am Einfachsten wäre, eine Datei zu schreiben und in der die neuen Speicherwerte anhängen. Das kann man dann noch an Excel schicken ;)

roman
2008-07-16, 15:23:55
Die Logfiles sehen so aus:

Hier
Steht
Ganz
Viel
Output

Job Object statistic
====================
Total User CPU Time: 0.016 second
Total Kernel CPU Time: 0.063 second
This Period Total User CPU Time: 0.016 second
This Period Total Kernel CPU Time: 0.063 second
Total Page Fault Count: 4306
Total Processes: 3
Active Processes: 0
Total Terminated Processes: 0
Total peak job memory used: 8.118 mega bytes

Die letzte Zeile ist die für mich relevante. Am Besten wäre, wenn also der Wert nach dem "Total Peak job memory used" in ein neues File geschrieben wird, wenn möglich mit dem Namen der Datei, aus der er gelesen wurde:

Job1_Sysout.dat 8.118
Job2_Sysout.dat 20.000
.
.
.

Aus diesem File soll dann eine tägliche Auswertung erstellt werden, um potentielle Performancekiller herausfiltern zu können, und auch um die Hardwareinfrastruktur besser planen zu können.

roman
2008-07-17, 15:03:40
Keiner eine Idee? :frown:

BoRaaS
2008-07-17, 15:37:35
Evt. der Log Parser von M$ ??
Klick Mich (http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en)
bzw.
Log Parser im Scriptcenter (http://www.microsoft.com/technet/scriptcenter/tools/logparser/default.mspx)

Oder mit in der CMD mit "findstr" arbeiten ??

Greets BoRaaS

Schnitzl
2008-07-17, 15:42:13
Ja wie gut kennst du dich mit vbscript aus?

Logfile in einen Array einlesen, dann nach "Total peak job memory used:" suchen und Wert dahinter in die Auswertdatei.

Wobei noch zu klären wäre was da:
Hier
Steht
Ganz
Viel
Output
so drinsteht und ob es evtl. kollidiert.
Wie groß sind denn die Logfiles?

roman
2008-07-17, 16:18:07
@BoRaaS: Thx, den Log Parser werd ich mir mal anschauen, von der Beschreibung her dürfte das interessant sein - wenn das Programm denn mit dem Format der Logfiles was anfangen kann.

@Schnitzl: Bin blutiger VBScript-Anfänger - ich lerne aber gerne was dazu. ;)

Im Output stehen zB Warnings und Fehler aus der Durchführung, die Zeile mit "Total peak job memory used:" kommt im Log des SSIS-Pakets meines Wissens nicht vor. Die Größe der Logfiles kann bis zu mehreren hundert KByte reichen, die meisten sind allerdings zwischen 1 - 5 KByte groß.

Mittels Google hab ich ja schon einige brauchbare vbs-Beispiele zum Suchen in Textfiles gefunden, zB den gesamten Inhalt eines Ordners in ein File schreiben, die jeweilige Zeile auslesen und in ein neues File ausgeben. Danach ersetze ich mit 'Replace' den Text, damit nur noch der Zahlenwert übrig bleibt.
Allerdings fehlt mir da noch der zugehörige Paketname, ich bräuchte also wie oben beschrieben entweder ein Flatfile mit Tab-Trennung oder ein CSV-File. Ist es mit VBScript überhaupt möglich, Text in Spalten aufzubereiten?

Danke auf jeden Fall für deine Hilfe! :)


edit: Habe ein Logfile angehängt, so oder so ähnlich sehen alle aus. Die Zusammenfassung am Ende ist auf jeden Fall bei jedem drin.

Gast
2008-07-17, 16:24:30
Ja wie gut kennst du dich mit vbscript aus?

Logfile in einen Array einlesen, dann nach "Total peak job memory used:" suchen und Wert dahinter in die Auswertdatei.

Wobei noch zu klären wäre was da:

so drinsteht und ob es evtl. kollidiert.
Wie groß sind denn die Logfiles?
wenn es immer in der letzten zeile steht, dann ist es dich nicht weiter schwierig.
Die letzte Zeile ist die für mich relevante.

roman
2008-07-17, 16:31:35
wenn es immer in der letzten zeile steht, dann ist es dich nicht weiter schwierig.
Freut mich, wenns nicht schwierig ist! :D Bitte klär mich auf, wie ich das hinkriegen soll ...

Schnitzl
2008-07-17, 16:39:04
ok, wenns um kB geht, dann passt das.

So kannst du das in ein Array einlesen:
' öffne Logdateien und lese in Array
Set LogFile = objFSO.OpenTextFile("C:\Job1_Sysout.dat", ForReading, false)
strDatei = LogFile.ReadAll
LogFile.Close
strArray = Split(strDatei, vbCrLF)
nun kannst du die Zeile suchen, z.B. mit Left() und ner If-Abfrage
Und dann diese Zeile in die neue Ergebnisdatei schreiben.
Set ResultFile = objFSO.OpenTextFile("C:\Auswertung.txt", ForWriting, true)
Da kannst dann die ganze Zeit reinschreiben, solange bis sie zumachst:
ResultFile.Close

P.S.: fast vergessen ;)
Const ForReading = 1, ForWriting = 2, ForAppending = 8

Gast
2008-07-17, 16:47:45
Freut mich, wenns nicht schwierig ist! :D Bitte klär mich auf, wie ich das hinkriegen soll ...
keine zeit :D

hab ihr mal andere log-provider ausprobiert? bei SQL Server Table soltlest du dir die infos alle schön via sql holen können. beides, also tabelle und text-datei dürfte auch gehen.

What Log Provider Type is Best in SSIS? (http://www.whiteknighttechnology.com/cs/blogs/brian_knight/archive/2005/12/27/54.aspx)

Schnitzl
2008-07-17, 18:13:39
hab kurz a bissle gebastelt, u got pm.

/Edit: hab grad gesehn, du wolltest die Ausgabe ja anders, setz das in die if-schleife:
Ergebnis = Mid(strNewLine, 23, 20)
ResultFile.WriteLine "Job" & I & "_Sysout.dat:" & Ergebnis

MfG

littlejam
2008-07-17, 19:34:41
Windows Bordmittel sind zwar fein, aber für sowas würde ich dann doch einfach grep (http://pages.interlog.com/~tcharron/grep.html) nehmen.

Runterladen, die grep.exe aus dem Paket entpacken und einfach via
grep "Total peak job memory used" *.dat>bla.txt
die Daten rausziehen.

Gruß

roman
2008-07-17, 20:54:59
Windows Bordmittel sind zwar fein, aber für sowas würde ich dann doch einfach grep (http://pages.interlog.com/~tcharron/grep.html) nehmen.

Windows-Bordmittel deswegen, weil in unserer Server-Umgebung externe Tools und handgeschnitzte Helferchen eher nicht so gern gesehen sind.

Trotzdem Danke für deinen Tipp. :)

BoRaaS
2008-07-17, 23:22:39
Windows Bordmittel sind zwar fein, aber für sowas würde ich dann doch einfach grep (http://pages.interlog.com/~tcharron/grep.html) nehmen.

Runterladen, die grep.exe aus dem Paket entpacken und einfach via
grep "Total peak job memory used" *.dat>bla.txt
die Daten rausziehen.

Gruß

findstr ist doch ähnlich grep

littlejam
2008-07-18, 08:57:16
findstr ist doch ähnlich grep
Hast recht...

findstr /C:"Total peak job memory used" *.dat>bla.txt

Gruß