Linux/UNIXLinuxverfechter finden hier Weggefährten.
vSphere 4.1 U1 Availability Report
Diskussion: vSphere 4.1 U1 Availability Report im Forum Linux/UNIX, in der Kategorie Operating Systems; Anzeige
Hallo zusammen,
wir brauchen eine Auswertung der ESX-Host wie hoch die Verfügbarkeit war (On/Offlinezeiten und wenn möglich aufgesplittet in ...
wir brauchen eine Auswertung der ESX-Host wie hoch die Verfügbarkeit war (On/Offlinezeiten und wenn möglich aufgesplittet in Un/geplante Downtime).
Normalerweise nehme ich auf meinen ESX-Host die Datei welche sich unter /var/log/vmksummary.html befindet, leider behauptet diese bei einem meiner Server das dieser im letzten Monat 1 Stunde Online 3 Stunden Offline war. Den Rest des Monats war mein Server beides nicht, also weder On noch Offline ;-)
Die Hotline kann auch nicht weiterhelfen. Es ist ein größeres Probem mti dieser Datei und die Wissenn noch nciht wann sie das Repariert bekommen.
Für solche Überwachungen bietet sich Nagios an. Wenn der zuständige Admins die geplanten Downtimes korrekt aktiviert, ist das dann auch im Report enthalten.
Nagios ist zwar bei uns im Einsatz, aber leider nicht voll funktionsfähig.
Mein Chef will diesen ESX-Report regelmäßig jeden Monat haben und dieser soll direkt aus den ESX-Host ausgelesen werden.
Persönlich würde ich gerne die Datei /var/log/vmksummary auslesen da in dieser ja die Logwerte drinne stehen, doch leider sind meine Programmierkenntnisse weit weg von gut.
Daraus wird eine TXT und eine HTML datei generiert, einziger unterschied ist dass die HTML Datei mit entsprechenden HTML-Tags ergänzt wird.
/var/log/vmksummary.txt
Code:
Availability Report for $Servername$
May 2, 2011 - Jun 9, 2011
Availability: 27.249%
Total time: 4.7 hours
Uptime: 1.3 hours
Downtime: 3.4 hours
Note: Downtime is any time the system isn't capable of running
Virtual Machines. This includes reboots, crashes, configuration and running linux
Downtime Analysis:
72.8% (3.4 hours) downtime caused by:
100.0% (3.4 hours) scheduled downtime
0.0% (0) unscheduled downtime
Reasons for scheduled downtime:
81.3% server halted (2 instances)
17.8% server rebooting (4 instances)
0.9% server booting (7 instances)
Stats:
Current uptime: 36 days, 11 hours
Longest uptime: 28 minutes
Shortest uptime: 0
Average uptime: 10 minutes
Longest downtime: 2.6 hours
Shortest downtime: 15 seconds
Average downtime: 15 minutes
Maximum VMs Sampled: 348481
Average VMs Sampled: 348481.00
Server Information: Number of CPUs: 32 logical
16 cores
2 packages, Intel(R) Xeon(R) CPU X7560 @ 2.27GHz
Installed Memory: 268420352 kB
Current Build: 348481
Report generated Thu Jun 9 04:02:07 CEST 2011
Das sind Originalauswertungen auch mit den Fehlern (zumindest in der TXT Datei, die andere Datei ist laut VMware Support i.O.
ich würde einfach das Nagios mal in Gang bringen. Alternativ gibt es einen Performance Counter auf den ESi) Hosts: System->Uptime. Evtl kannst du damit was anfangen. Meine Testhosts zeigen allerdings "Performance data is currently not available for this entity." Woran das liegt müsste man noch recherchieren.
Danke erstmal für die Antwort, den Chart muss ich gestehen kannte ich noch nicht. Bringt aber eine Interssante neue Komponente ins Spiel. Laut der Aussage aus dem Chart ist der Server 19,3 Tage Online gewesen und die letzten Tage offline. Wenn ich im vCenter die Hostübersich anschaue läuft der Host aber aktuell und dort auch korrekt geschrieben seit 36 Tagen.
Bin also immernoch auf der suche nach einer Korrekten Verfügbarkeitsauswertung.
Greetz
Chris
P.S.: Danke an alle die Tipps gegeben haben bzw. noch geben werden.
ich hab das Problem glaube ich nicht verstanden. Nach deinem vorletzten Posting zu urteilen sind die Daten doch da. Was willst du mehr? Warum direkt aus dem ESX auslesen? Auch wenn du es mit Nagios machst, wird er halt ab und zu mal pingen oder per ssh / npre "uptime" ausführen. Um das jetzt nachträglich aus dem ESX zu rekonstruieren, kannst du eben selber uptime nutzen oder die Log Files parsen und schauen zu welchen Zeitpunkten Bootprozesse stattgefunden haben.
Der Chart aus dem PerformanceMonitor geht schon in die richtige Richtung, allerdings will mein Chef Zahlen/Fakten.
Das ich das ganze direkt aus dem Host auslesen will liegt daran dass mein Chef die folgenden Werte in Stunden und Prozentual aufgeschlüsselt haben will. ZWar auch zusätzlich als Grafik, aber eben nicht nur.
Uptime
Planed Downtime (Maintenance)
Downtime
am liebsten wäre mir die Auswertung der /var/log/vmksummary da hier die gesammelten Werte ja eigentlich "korrekt" sien müssen da er ja hier "nur" Logt, und nichts rechnet.
am liebsten wäre mir die Auswertung der /var/log/vmksummary da hier die gesammelten Werte ja eigentlich "korrekt" sien müssen da er ja hier "nur" Logt, und nichts rechnet.
und was hindert dich jetzt daran die Datei auszuwerten? Du musst dir eigentlich nur raussuchen woran du hochfahren und runterfahren erkennst, und dann über ein Perl-Script die Timestamps dazu rausziehen.
Ich bin parallel dabei mir bissle Programmierung anzueignen dass ich soweit komme dass ich das schaffe, aber eigentilch bin ich absolut untalentiert was Programmieren angeht.
Daher suche ich ja nach einer Kostengünstigen Variante (darf auch etwas Kosten wenn es nicht in die vierstelligen Beträge geht) die das löst. Ich kann mir nicht vorstellen dass ich der einzige bin der so eine Anforderung von seinem Chef bekommt.
zwischenzeitlich habe ich ein "Script" geschrieben welches meine Anforderungen RELATIV gut umsetzt.
Die Rechtschreibung und die Kommentare bitte bisher Ignorieren, die tun sonst weh ;-)
Aber Prinzipiell macht das Programm das was es soll.
# Calculating of the diffrent Times
$X=1
$ZeitPlanedDown=0
$ZeitUnplanedDown=0
$ZeitEnterMaintenance=0
$ZeitExitMaintenance=0
$ZeitMaintenance=0
$Maintenance="false"
#This Loop runs for every Entry of the VIEvents
while ($X -lt $xy.Count)
{
# IF the Server is in Maintenance the Downtime have to be Calculated for "Planned" Downtime,
# this Part of the Programm going active.
IF ($Maintenance -eq "true")
{
# IF The Server leave The Maintenace Mode, Calculate the Time of the Maintenance Mode and
# add the Time to the Full Maintenace Time.
IF ($xy[$x].Description -eq "HostSystem.exitMaintenanceMode")
{
$Maintenance = "false"
#Write-Host "Server verlässt Maintenance"
$ZeitExitMaintenance = $xy[$X].CreatedTime
$ZeitMaintenanceCalculate = $ZeitExitMaintenance - $ZeitEnterMaintenance
$ZeitMaintenance += $ZeitMaintenanceCalculate.TotalSeconds
#Write-Host "MaintenanceZeit: " $ZeitMaintenance
}
Else
{
# IF a "HostConnectedEvent" or a "HostConnectionLost" Event appears run this Part of the Programm.
IF ($xy[$x].Event -like "Host*Event")
{
# IF the Host Reconnect to the vCenter, Calculate the PlanedDowntime and Add this to the Full
# Planned Downtime Time.
IF (($xy[$x].Event -eq "HostConnectedEvent") -and ($xy[$x-1].Event -eq "HostConnectionLostEvent"))
{
$ZeitPlanedDownCalculate = $xy[$x].CreatedTime - $xy[$x-1].CreatedTime
$ZeitPlanedDown += $ZeitPlanedDownCalculate.TotalSeconds
#Write-Host "PlanedDown" $ZeitPlanedDown
}
# If this is "just" a "HostConnectionLost" Event the Programm should do Nothing coze its calculate the Time on a
# other Part of this Programm.
ElseIF (($xy[$x].Event -eq "HostConnectionLostEvent") -and ($xy[$x+1].Event -eq "HostConnectedEvent"))
{
#Write-Host "XXXXXXXXXXXXXX Wird ausgewertet XXXXXXXXXXX"
}
# If There some Other Events, run this Part of the Programm.
Else
{
# Sometimes there are a "HostConnectedEvent" whitout Powerdown before, if this happen
# Run this Part of Programm
IF (($xy[$x].CreatedTime.Hour -eq $xy[$x-1].CreatedTime.Hour) -and ($xy[$x].CreatedTime.Minute -eq $xy[$x-1].CreatedTime.Minute) -and ($xy[$x].CreatedTime.Second -eq $xy[$x-1].CreatedTime.Second))
{
# Just Diagnostic Output, i need it for Programming and dont wanna delete
# Dunno may i need it later for Debug or something.
#Write-Host "XXXXXXXXXXXXXX Doppelter Eintrag XXXXXXXXXXX"
#$xy[$x-1].CreatedTime
#$xy[$x].CreatedTime
#Write-Host "XXXXXXXXXXXXXX Doppelter Eintrag XXXXXXXXXXX"
}
Else
{
# Here i made a Douple Check, this should be fixed later.
# Here i never got output.
IF (($xy[$x].Event -like "HostConnectedEvent") -and ($xy[$x-1].Event -like "HostConnectedEvent"))
{
#Write-Host "Server still Running Event"
}
# IF still some Failure, give me also the Event before and after that i could
# check what happend. Also "just Diagnostic" Part for me.
Else
{
Write-Host "XXXXXXXXXXXXXX 1 FAILURE XXXXXXXXXXX"
Write-Host $xy[$x-1].Event, $xy[$x-1].CreatedTime
Write-Host $xy[$x].Event, $xy[$x].CreatedTime
Write-Host $xy[$x+1].Event, $xy[$x+1].CreatedTime
Write-Host "XXXXXXXXXXXXXX 1 FAILURE XXXXXXXXXXX"
}
}
}
}
Else
{
# Sometimes im not patience and the Server goes not fast enough into Maintenance i push
# the "Enter Maintenance" Button twice. So i Need this IF.
IF (($Maintenance -eq "true") -and ($xy[$x].Description -eq "HostSystem.enterMaintenanceMode"))
{
#Do Nothing
}
# Diagnostic Part, sometimes really usefull.
else
{
Write-Host "XXXXXXXXXXXXXXXFAILUREXXXXXXXXXXXXXXX"
Write-Host "Maintenance" $xy[$X].Event $xy[$X].Description
Write-Host "XXXXXXXXXXXXXXXFAILUREXXXXXXXXXXXXXXX"
}
}
}
}
# Run IF SErver is NOT in Maintenance-Mode
Else
{
# IF Server Enter Maintenance Mode Save Time and Change Value "Maintenance" to "true"
IF ($xy[$x].Description -eq "HostSystem.enterMaintenanceMode")
{
$Maintenance = "true"
$ZeitEnterMaintenance = $xy[$x].CreatedTime
#Write-Host "Server betritt Maintenance"
}
# IF Server doesnt Enter Maintenance Mode
Else
{
#If this is a HostConnected or HostConnectionlost Event run this Part of Programm
IF ($xy[$x].Event -like "Host*Event")
{
# IF Server Reconnect, Calculate Unplaned Downtime and Add to Full UnplanedDowntime Time
IF (($xy[$x].Event -eq "HostConnectedEvent") -and ($xy[$x-1].Event -eq "HostConnectionLostEvent"))
{
$ZeitUnplanedDownCalculate = $xy[$x].CreatedTime - $xy[$x-1].CreatedTime
$ZeitUnplanedDown += $ZeitUnplanedDownCalculate.TotalSeconds
#Write-Host "Unplaned Down" $ZeitUnplanedDown
}
# If there is a Connection Lost Event whit a following HostConnectedEvent do nothing,
# will calculate on a other Part in Programm
ElseIF (($xy[$x].Event -eq "HostConnectionLostEvent") -and ($xy[$x+1].Event -eq "HostConnectedEvent"))
{
#Write-Host "XXXXXXXXXXXXXX Wird ausgewertet XXXXXXXXXXX"
}
# IF there is a Entry i didnt thing about, run this part of Programm
Else
{
# Sometimes Douple Entrys happen, so run this part of Programm for diagnostic
IF (($xy[$x].CreatedTime.Hour -eq $xy[$x-1].CreatedTime.Hour) -and ($xy[$x].CreatedTime.Minute -eq $xy[$x-1].CreatedTime.Minute) -and ($xy[$x].CreatedTime.Second -eq $xy[$x-1].CreatedTime.Second))
{
#Write-Host "XXXXXXXXXXXXXX Doppelter Eintrag XXXXXXXXXXX"
#$xy[$x-1].CreatedTime
#$xy[$x].CreatedTime
#Write-Host "XXXXXXXXXXXXXX Doppelter Eintrag XXXXXXXXXXX"
}
# IF Something else happend.
Else
{
# Douple Check, this part of Programm never come up
IF (($xy[$x].Event -like "HostConnectedEvent") -and ($xy[$x-1].Event -like "HostConnectedEvent"))
{
Write-Host "Server still Running Event"
}
# For diagnostic give me also the Event Before and After that i could Check what happend
Else
{
Write-Host "XXXXXXXXXXXXXX 2 FAILURE XXXXXXXXXXX"
Write-Host $xy[$x-1].Event, $xy[$x-1].CreatedTime
Write-Host $xy[$x].Event, $xy[$x].CreatedTime
Write-Host $xy[$x+1].Event, $xy[$x+1].CreatedTime
Write-Host "XXXXXXXXXXXXXX 2 FAILURE XXXXXXXXXXX"
}
}
}
}
# IF there is Still some Failure, give me please the Event.
Else
{
IF (($xy[$X].Description -like "HostSystem.exitMaintenanceMode") -and ($X -le 2))
{
# First Exit of Maintenance coze the Host ist not a new Installation
# If it is a Update this could happen.
}
Else
{
Write-Host "XXXXXXXXXXXXXXXFAILUREXXXXXXXXXXXXXXX"
Write-Host "NotMaintenance" $xy[$X].Event $xy[$X].Description
Write-Host "XXXXXXXXXXXXXXXFAILUREXXXXXXXXXXXXXXX"
}
}
}
}
# Count UP for the Loop
$X++
}
# Bring the Time in a Human Readable Format
$TotalMaintenance = New-TimeSpan -Seconds $ZeitMaintenance
$TotalUnplanedDown = New-TimeSpan -Seconds $ZeitunplanedDown
$TotalPlanedDown = New-TimeSpan -Seconds $ZeitPlanedDown
# Output on the Screen
Write-Host "Availability Report for "$Server
$FirstEvent = Get-Date $FirstEvent -Format D
$Today = Get-Date -Format D
Write-Host $FirstEvent " - " $Today
Write-Host " "
$availability = $Livetime.TotalSeconds
$Downtime = $TotalPlanedDown.TotalSeconds + $TotalUnplanedDown.TotalSeconds
$availability = PercentforAvailability $Downtime $availability
Write-Host "Availability: " $availability" %"
Write-Host "Total Time: " $Livetime.Days " Days "$Livetime.Hours" hours" $Livetime.Minutes " minutes"
Write-Host " "
$Uptime = $Livetime.TotalSeconds - $TotalPlanedDown.TotalSeconds - $TotalUnplanedDown.TotalSeconds
$Uptime = New-TimeSpan -Seconds $Uptime
Write-Host "Uptime: " $Uptime.Days " Days " $Uptime.Hours" hours" $Uptime.Minutes " minutes"
$Downtime = New-TimeSpan -Seconds $Downtime
Write-Host "Downtime: " $Downtime.days " Days " $Downtime.Hours" hours" $Downtime.Minutes " minutes"
Write-Host " "
Write-Host "Maintenance"
Write-Host "Maintenance Time: " $TotalMaintenance.Days " Days " $TotalMaintenance.Hours " hours" $TotalMaintenance.Minutes " minutes"
$availability = $Livetime.TotalSeconds
$TimeMaintenace = $TotalMaintenance.TotalSeconds
$PercentMaintenance = Percent $TimeMaintenace $availability
Write-Host "Maintenance is " $PercentMaintenance "% of the Full LiveTime"
Write-Host "Downtime during Maintenance: " $TotalPlanedDown.Days " Days " $TotalPlanedDown.Hours " hours" $TotalPlanedDown.Minutes " minutes"
$availability = $Livetime.TotalSeconds
$TimeDowntime = $TotalPlanedDown.TotalSeconds
$PercentMaintenance = Percent $TimeDowntime $availability
Write-Host "Downtime is " $PercentMaintenance "% of the Full LiveTime and"
$availability = $TotalMaintenance.TotalSeconds
$TimeDowntime = $TotalPlanedDown.TotalSeconds
$PercentMaintenance = Percent $TimeDowntime $availability
Write-Host "Downtime is" $PercentMaintenance "% of the Full Maintenance Time"
Write-Host " "
$availability = $Livetime.TotalSeconds
$TimeDowntime = $TotalUnplanedDown.TotalSeconds
$PercentDowntime = Percent $TimeDowntime $availability
Write-Host "Unplaned Downtime: " $TotalUnplanedDown.Days " Days " $TotalUnplanedDown.Hours " hours" $TotalUnplanedDown.Minutes " minutes"
Write-Host "This is " $PercentDowntime "% of the Full LiveTime"
Write-Host " "
Write-Host " "
Write-Host " "
}
Dieser Erzeugt folgende Ausgabe
Ausgabe
Availability Report for %FQDN%
Montag, 31. Mai 2010 - Mittwoch, 29. Juni 2011
Availability: 99,87 %
Total Time: 393 Days 22 hours 50 minutes
Uptime: 393 Days 10 hours 55 minutes
Downtime: 0 Days 11 hours 55 minutes
Maintenance
Maintenance Time: 0 Days 9 hours 25 minutes
Maintenance is 0,1 % of the Full LiveTime
Downtime during Maintenance: 0 Days 5 hours 22 minutes
Downtime is 0,06 % of the Full LiveTime and
Downtime is 56,98 % of the Full Maintenance Time
Unplaned Downtime: 0 Days 6 hours 32 minutes
This is 0,07 % of the Full LiveTime
Statt %FQDN% steht da natürilch ein Servername, aber den habe ich hier Zensiert.
Damit das ganze Funktioniert muss die PowerCli bereits mit dem vCenter Server verbunden sein. Danach werden alle Host ausgelesen die vorhanden sind und die Ausgabe wird für jeden Host generiert.
Das ganze Befindet sich noch im frühen Betastadium, es müssen noch Kommentare angepasst werden und auch der Quelltext ist nicht Optimal. Aber immerhin läuft es schon so wie ich das möchte.
Über KOmmentare/Kritik/Anregungen würde ich mich freuen.