VMware Cloud Community
sivagndl
Enthusiast
Enthusiast
Jump to solution

Vcenters triggered Alarms Information.

HI All,

My organization having 10 +  Vcenters. I need script like triggered alarms information. We have many alerts host disconnections, Data store full, network connection lose,  
Out put like Vcenter Name, Object(host,datastore,vm), Status , Alarm Name and triggered date.

Thanks for Advanced.

0 Kudos
30 Replies
LucD
Leadership
Leadership
Jump to solution

There seems to be some strange characters in the script you are running.

Can you attach the script, redact out all confidential information, to this thread ?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
sivagndl
Enthusiast
Enthusiast
Jump to solution

Hi Lucd,

Please find the attached file.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

It seems you had a continuation character on the start of the 2nd line.

Try the attached file.


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
sivagndl
Enthusiast
Enthusiast
Jump to solution

Hi Lucd,

When i connected single vCenter out put shows perfect .

when i connected multiple Vcenters (More then 2 Vcs) shows different output.

Please find the attached CSV files  for 1vc , 2 vcs and 3 Vcs outputs.

Check the Alarm Column details are mixed.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Does this make a difference ?

foreach($dc in (Get-Datacenter | where {$_.ExtensionData.triggeredAlarmState})){

    $dc.ExtensionData.TriggeredAlarmState |

    Select @{N='vCenter';E={$vcenter = $dc.Uid.Split('@:')[1]; $vcenter}},

      @{N="Entity";E={Get-View $_.Entity -Server $vcenter | Select -ExpandProperty Name}},

      @{N="Alarm";E={Get-View $_.Alarm -Server $vcenter  | %{$_.Info.Name}}},

      Time,OverallStatus |

    Where-object{$_.Alarm -notmatch 'Virtual machine cpu usage' -and

                 $_.Alarm -notmatch 'Host IPMI System Event Log status*'}

}


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
sivagndl
Enthusiast
Enthusiast
Jump to solution

No difference  lucd,

Still showing mixed data on Alarm column.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Just to make sure, if you display the output directly on the console (no Export-Csv), do you see the same behavior ?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
sivagndl
Enthusiast
Enthusiast
Jump to solution

yes. its showing same behavior on console and .csv too.

0 Kudos
LucD
Leadership
Leadership
Jump to solution

Sorry, can't seem to be able to reproduce the issues you are seeing.

Works correctly for me when connected to 2 vCenters.

As a final check, can you attach the script as you are running it ?


Blog: lucd.info  Twitter: @LucD22  Co-author PowerCLI Reference

0 Kudos
Srinivasu13
Enthusiast
Enthusiast
Jump to solution

Hi Try below script to collect triggered alarms from multiple vCenters:

How to run this scripts: .\Get-TriggeredAlarms -vCenters vc001,vc002 vc03

Output file location: c:\temp\alarms.csv

Script:

______________________________________________________________________________

param (

    [String[]]$vCenters

)

Function Get-TriggeredAlarms {

    param (

        $vCenter = $(throw "A vCenter must be specified."),

        [System.Management.Automation.PSCredential]$credential

    )

    if ($credential) {

        $vc = Connect-VIServer $vCenter -Credential $credential

    }

    else {

        $vc = Connect-VIServer $vCenter

    }

    if (!$vc) {

        Write-Host "Failure connecting to the vCenter $vCenter."

        exit

    }

    $rootFolder = Get-Folder -Server $vc "Datacenters"

    foreach ($ta in $rootFolder.ExtensionData.TriggeredAlarmState) {

        $alarm = "" | Select-Object VC, EntityType, Alarm, Entity, Status, Time, Acknowledged, AckBy, AckTime

        $alarm.VC = $vCenter

        $alarm.Alarm = (Get-View -Server $vc $ta.Alarm).Info.Name

        $entity = Get-View -Server $vc $ta.Entity

        $alarm.Entity = (Get-View -Server $vc $ta.Entity).Name

        $alarm.EntityType = (Get-View -Server $vc $ta.Entity).GetType().Name   

        $alarm.Status = $ta.OverallStatus

        $alarm.Time = $ta.Time

        $alarm.Acknowledged = $ta.Acknowledged

        $alarm.AckBy = $ta.AcknowledgedByUser

        $alarm.AckTime = $ta.AcknowledgedTime       

        $alarm

    }

    Disconnect-VIServer $vCenter -Confirm:$false

}

Write-Host ("Getting the alarms from {0} vCenters." -f $vCenters.Length)

$alarms = @()

foreach ($vCenter in $vCenters) {

    Write-Host "Getting alarms from $vCenter."

    $alarms += Get-TriggeredAlarms $vCenter

}

$alarms | export-csv c:\temp\alarms.csv

___________________________________________________________________

------------------------------------------------------------------------------- If you found this or any other answer helpful, please consider to award points. (use Correct or Helpful buttons) Regards, Srini
0 Kudos
sivagndl
Enthusiast
Enthusiast
Jump to solution

Hi Srinuvas,


Thanks It's really cool.  i add little more in Script.(where-object ,html & sent Mail).

i required little modification in html block script.


If status is in yellow, that column  should show yellow color  .

If status is Red, that column should show Red color.

============================================================

Capture11.JPG

============================================================

param (

  [String[]]$vCenters

)

Function Get-TriggeredAlarms {

  param (

  $vCenter = $(throw "A vCenter must be specified."),

  [System.Management.Automation.PSCredential]$credential

  )

  if ($credential) {

  $vc = Connect-VIServer $vCenter -Credential $credential

  }

  else {

  $vc = Connect-VIServer $vCenter

  }

  if (!$vc) {

  Write-Host "Failure connecting to the vCenter $vCenter."

  exit

  }

  $rootFolder = Get-Folder -Server $vc "Datacenters"

  foreach ($ta in $rootFolder.ExtensionData.TriggeredAlarmState) {

  $alarm = "" | Select-Object VC, EntityType, Alarm, Entity, Status, Time, Acknowledged, AckBy, AckTime

  $alarm.VC = $vCenter

  $alarm.Alarm = (Get-View -Server $vc $ta.Alarm).Info.Name

  $entity = Get-View -Server $vc $ta.Entity

  $alarm.Entity = (Get-View -Server $vc $ta.Entity).Name

  $alarm.EntityType = (Get-View -Server $vc $ta.Entity).GetType().Name

  $alarm.Status = $ta.OverallStatus

  $alarm.Time = $ta.Time

  $alarm.Acknowledged = $ta.Acknowledged

  $alarm.AckBy = $ta.AcknowledgedByUser

  $alarm.AckTime = $ta.AcknowledgedTime

  $alarm|

  Where-object{$_.Alarm -notmatch 'Virtual machine' -and

                      $_.Alarm -notmatch 'Host IPMI System*' -and

                      $_.Alarm -notmatch 'Host memory usage' -and

                      $_.Alarm -notmatch 'Host CPU usage' -and

                      $_.Alarm -notmatch 'SIOC-enabled'}

  }

  Disconnect-VIServer $vCenter -Confirm:$false

}

Write-Host ("Getting the alarms from {0} vCenters." -f $vCenters.Length)

$alarms = @()

foreach ($vCenter in $vCenters) {

  Write-Host "Getting alarms from $vCenter."

  $alarms += Get-TriggeredAlarms $vCenter

}

$Header = @"

<style>

BODY {background-color: #a3dbe7;}

TABLE {border-width:1px; border-style:solid; border-color:black; border-collapse:collapse;}

TH, TD {border-width:1px; padding:0px; border-style:solid; border-color:black;}

</style>

<title>

Title of my Report

</title>

"@

$sMail = @{

  From = "mymailid@mail.com"

  To = "mymailid@mail.com"

  Subject = 'Vcenter Tiggered Alarms Information.'

  BodyAsHtml = $true

  Body = $alarms | ConvertTo-HTML -Head $Header| Out-String

  SmtpServer = 'smtp server'

}

Send-MailMessage @sMail

0 Kudos