Cleaning up esxtop log files using PowerShell - Login VSI Tips and Tricks

Every now and then when doing large scale tests using Login VSI or collecting live performance data I use VMware's esxtop tool to give me a detailed insight to what’s going on at the host. While esxtop provides great insights, sometimes it’s just a little bit too much information. This got me thinking, how can I quickly sanitize the log file so it only contains information that is actually relevant for me at this moment?
And, of course, the first thing that comes to mind is a few lines of PowerShell. I simply import the csv file collected using esxtop and export it again containing only the columns of information I like. So let’s import the esxtop logfile using the Import-CSV command, select the data I like using select-object and throw it out again using export-csv.
Hmmm, what’s happening here? This should have been a fairly straight forward. Analyzing it a bit further, I found out that this is because there is a comma ending every line.
Luckily PowerShell allows me to fix that before I feed the content to import-csv. While experimenting, I figure at this point it’s probably best to create a simple script that does the following:
- Point to the esxtop log that I would like to filter
- Import the “broken” csv file
- Remove the last character from every line
- Import the “fixed” CSV file
- Select the counters of my choice
- *\Physical Cpu(_Total)\% Util Time
- *\Physical Disk Adapter(vmhba0)\Commands/sec
- *\Physical Disk Adapter(vmhba0)\Reads/sec
- *\Physical Disk Adapter(vmhba0)\Writes/sec
- Write it to a new file (export.csv)
- Clean up
Write-Host Select file $fd = New-Object system.windows.forms.openfiledialog $fd.MultiSelect = $false $fd.showdialog() $fd.filenames Write-Host Read file $lines=@() $text = Get-Content -Path $fd.filenames $text | %{ $lines += $_.SubString(0,$_.Length-1) } $FixedFilename = $fd.filenames -replace ".csv", ".fixed" $FilteredFilename = $fd.filenames -replace ".csv", ".filtered" Write-Host Write fixed logfile Set-Content -Path $FixedFilename -Value $Lines Write-Host Read fixed logfile $csv = import-csv -path $FixedFilename Write-Host Write filtered logfile $csv | select-object "*\Physical Cpu(_Total)\% Util Time", "*\Physical Disk Adapter(vmhba0)\Commands/sec", "*\Physical Disk Adapter(vmhba0)\Reads/sec", "*\Physical Disk Adapter(vmhba0)\Writes/sec" | export-csv export.csv -notypeinformation Write-Host Delete temp files remove-item $FixedFilename
For those of you who have their regional settings setup in a way that Excel does not require the comma fix, that’s great! Otherwise you can now live knowing that your log files will be a lot smaller :-).
Also, make sure to read this blog about PowerShell.
Tags: How-to, Login VSI, VMware, Load Testing, Best Practices, Support, Scripts