derparte
Goto Top

Serverlogdatei auswerten

Hallo,

ich bräuchte Hilfe beim Auswerten einer Logdatei die die Lastenverteilung von Terminal-Servern protokolliert. 0 bedeutet keine Last und 10000 maximallast. Das ganze speichert der Server als txt datei.

Der Aufbau der Logdatei sieht so aus:

14.09.2007
08:05

Servername Serverlast
------------
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 625
XXXXXXXXXXXXXX 1634
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 625
XXXXXXXXXXXXXX 2570
XXXXXXXXXXXXXX 2864
XXXXXXXXXXXXXX 2711
XXXXXXXXXXXXXX 2824
XXXXXXXXXXXXXX 2767
XXXXXXXXXXXXXX 2821
XXXXXXXXXXXXXX 2523
XXXXXXXXXXXXXX 2801
XXXXXXXXXXXXXX 2590
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0

14.09.2007
08:10

Servername Serverlast
------------
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 625
XXXXXXXXXXXXXX 1959
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 625
XXXXXXXXXXXXXX 2889
XXXXXXXXXXXXXX 3025
XXXXXXXXXXXXXX 2822
XXXXXXXXXXXXXX 2988
XXXXXXXXXXXXXX 3087
XXXXXXXXXXXXXX 3047
XXXXXXXXXXXXXX 3062
XXXXXXXXXXXXXX 3024
XXXXXXXXXXXXXX 3049
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0

14.09.2007
08:15

Servername Serverlast
------------
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 1249
XXXXXXXXXXXXXX 2339
XXXXXXXXXXXXXX 625
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 1249
XXXXXXXXXXXXXX 3218
XXXXXXXXXXXXXX 3256
XXXXXXXXXXXXXX 3245
XXXXXXXXXXXXXX 3439
XXXXXXXXXXXXXX 3294
XXXXXXXXXXXXXX 3273
XXXXXXXXXXXXXX 3274
XXXXXXXXXXXXXX 3487
XXXXXXXXXXXXXX 3226
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 312
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0
XXXXXXXXXXXXXX 0

Wenn ich nun versuche die datei nach excel oder access zu importieren, schreibt das Programm leider alles nur so wie es dort steht in zwei spalten und ist somit nicht verwertbar. Gibt es eine einfachere Methode als mit strg+c und strg+v daraus etwas brauchbares zumachen. Habe schon versucht mit einem makro in excel, dass es automatisch kopiert wird und in die nächste zeile eingeführt wird, das klappt aber leider nicht. Es würde ja schon reichen wenn das ganze in ein importierfähiges format gebracht werden könnte.

Zum Beispiel:

Servername 0;89;89;....
Servername 1;89;89;....

Also das die zahlen für jeden server dann hinter einander mit komma oder simikolon oder tab stehen.

Hoffentlich kann mir jeamnd helfen.

Content-Key: 69030

Url: https://administrator.de/contentid/69030

Printed on: April 19, 2024 at 19:04 o'clock

Member: bastla
bastla Sep 19, 2007 at 20:17:46 (UTC)
Goto Top
Hallo DerParte!

Auch wenn Dein Beispiel mit den vielen "89"-Werten sich nicht wirklich aus den anderen Daten ableiten lässt, hoffe ich, Dein Vorhaben dennoch richtig interpretiert zu haben.

Zunächst wird eine Liste aller Server ("Servers.txt") benötigt - basierend auf Deinem Beispiel sähe diese so aus face-wink:
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
XXXXXXXXXXXXXX
Danach sollte der folgende Batch die jeweiligen Werte der "Log.txt" je Server zeilenweise zusammenfassen und in die Datei "Log.csv" schreiben :
@echo off & setlocal enabledelayedexpansion
set "List=D:\Servers.txt"  
set "In=D:\Log.txt"  
set "Out=D:\Log.csv"  

if exist "%Out%" del "%Out%"  
for /f "usebackq delims=" %%i in ("%List%") do call :ProcessServerEntries "%%i"  
goto :eof

:ProcessServerEntries
set "Line=%~1"  
for /f "tokens=2" %%a in ('findstr %1 "%In%"') do set "Line=!Line!;%%a"  
echo %Line% >>"%Out%"  

Grüße
bastla
Member: Biber
Biber Sep 19, 2007 at 21:43:18 (UTC)
Goto Top
@bastla

Super!
Diesen Thread will ich im Bereich "Batch & Shell" haben.
Und verschiebe ihn ganz schnell von "Windows Server" dorthin, ehe ihn ein anderer Moderator findet.

Schönen Abend
Biber
Member: DerParte
DerParte Sep 20, 2007 at 05:51:37 (UTC)
Goto Top
Vielen dank. Funktioniert einbahnfrei. Gäbe es noch die Uhrzeit mit zu protokollieren? also in der zeile über den Werten? Wenn nicht auch nicht schlimm lässt sich in excel auch schnell manuel mit den ersten drei zahlen bewerkstelligen.
Member: bastla
bastla Sep 20, 2007 at 06:43:47 (UTC)
Goto Top
Hallo DerParte!

... lässt sich in excel auch schnell manuel ... bewerkstelligen.
An die Uhrzeiten hatte ich auch gedacht, war aber eigentlich zum selben Schluss gekommen.

Trotzdem sollte vielleicht die .csv-Datei zumindest Datum und Startzeit (obwohl vermutlich ohnehin immer gleich) beeinhalten - etwa so:
@echo off & setlocal enabledelayedexpansion
set "List=D:\Servers.txt"  
set "In=D:\Log.txt"  
set "Out=D:\Log.csv"  
set /a Header=2

if exist "%Out%" del "%Out%"  

set /a Count=0
for /f "usebackq delims=" %%i in ("%In%") do (  
	if !Count! lss %Header% (
		echo %%i >>"%Out%"  
		set /a Count+=1
	)
)

for /f "usebackq delims=" %%i in ("%List%") do call :ProcessServerEntries "%%i"  
goto :eof

:ProcessServerEntries
set "Line=%~1"  
for /f "tokens=2" %%a in ('findstr %1 "%In%"') do set "Line=!Line!;%%a"  
echo %Line% >>"%Out%"  
Mit der Variablen %Header% wird festgelegt, wie viele Zeilen vom Anfang der Quelldatei in die Zieldatei geschrieben werden sollen.

Ergänzend ließe sich (falls sinnvoll) das Datum auch noch in den Dateinamen integrieren. Dazu könntest Du die Zeile "set Out=D:\Log.csv" durch den folgenden Block ersetzen (Voraussetzung: Datum steht, wie im Beispiel oben, in der ersten Zeile der Quelldatei):
set Datum=
for /f "usebackq delims=" %%i in ("%In%") do if not defined Datum set Datum=%%i  
set Datum=%Datum:~6,4%-%Datum:~3,2%-%Datum:~0,2%
set "Out=D:\Log_%Datum%.csv"  

Grüße
bastla

P.S.: @Biber: Danke für die Blumen ... face-smile