VMware Cloud Community
BBB36
Enthusiast
Enthusiast
Jump to solution

Datastore Folder Alarm

I need a script to create an alarm for a specific datastore folder in the storage view (e.g. datastore-1000gb) under a specific Datacenter (e.g. Datacenter-1).
The alarm will have 2 alerts generating a warning at 80% utilization and critical at 90% utilization, and email to a specific email address (alert@email.com) and also a snmp trap. I don't have a specific script in mind except the one I found here: https://communities.vmware.com/t5/VMware-PowerCLI-Discussions/powercli-script-to-create-datastore-al.... It's from 2017. Can it be modified to fit my ask? I'll sincerely appreciate that. Thanks.

0 Kudos
1 Solution

Accepted Solutions
LucD
Leadership
Leadership
Jump to solution

There are a number of cmdlets to create and change Alarms, but the requirements you specify are unfortunately afaik not possible.
Similar to the thread you linked to, you can use the API method.

Something like this for example

$dsFolderName = 'datastore-1000gb'
$toAddr = 'alert@email.com'

$dsFolder = Get-Folder -Name $dsFolderName

$spec = New-Object VMware.Vim.AlarmSpec
$spec.Expression = New-Object VMware.Vim.OrAlarmExpression
$spec.Expression.Expression = New-Object VMware.Vim.AlarmExpression[] (1)
$spec.Expression.Expression[0] = New-Object VMware.Vim.MetricAlarmExpression
$spec.Expression.Expression[0].Red = 9000
$spec.Expression.Expression[0].Metric = New-Object VMware.Vim.PerfMetricId
$spec.Expression.Expression[0].Metric.Instance = ''
$spec.Expression.Expression[0].Metric.CounterId = (Get-Metric -MetricGroup Disk -Name 'Space Actually Used').Key
$spec.Expression.Expression[0].Yellow = 8000
$spec.Expression.Expression[0].Type = 'Datastore'
$spec.Expression.Expression[0].Operator = 'isAbove'
$spec.Name = 'Space Utilization 3'
$spec.Action = New-Object VMware.Vim.GroupAlarmAction
$spec.Action.Action = New-Object VMware.Vim.AlarmAction[] (4)
$spec.Action.Action[0] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[0].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[0].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[0].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[0].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[0].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[0].Yellow2green = $false
$spec.Action.Action[0].Yellow2red = $false
$spec.Action.Action[0].Red2yellow = $false
$spec.Action.Action[0].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[0].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[0].Action.CcList = ''
$spec.Action.Action[0].Action.ToList = $toAddr
$spec.Action.Action[0].Action.Body = ''
$spec.Action.Action[0].Green2yellow = $false
$spec.Action.Action[1] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[1].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[1].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[1].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[1].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[1].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[1].Yellow2green = $false
$spec.Action.Action[1].Yellow2red = $false
$spec.Action.Action[1].Red2yellow = $false
$spec.Action.Action[1].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[1].Green2yellow = $false
$spec.Action.Action[2] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[2].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[2].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[2].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[2].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[2].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[2].Yellow2green = $false
$spec.Action.Action[2].Yellow2red = $false
$spec.Action.Action[2].Red2yellow = $false
$spec.Action.Action[2].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[2].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[2].Action.CcList = ''
$spec.Action.Action[2].Action.ToList = $toAddr
$spec.Action.Action[2].Action.Body = ''
$spec.Action.Action[2].Green2yellow = $false
$spec.Action.Action[3] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[3].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[3].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[3].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[3].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[3].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[3].Yellow2green = $false
$spec.Action.Action[3].Yellow2red = $false
$spec.Action.Action[3].Red2yellow = $false
$spec.Action.Action[3].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[3].Green2yellow = $false
$spec.Description = ''
$spec.Enabled = $false
$spec.Setting = New-Object VMware.Vim.AlarmSetting
$spec.Setting.ToleranceRange = 0
$spec.Setting.ReportingFrequency = 300

$alarmMgr = Get-View AlarmManager
$alarmMgr.CreateAlarm($dsFolder.Id, $spec)


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

View solution in original post

0 Kudos
3 Replies
LucD
Leadership
Leadership
Jump to solution

There are a number of cmdlets to create and change Alarms, but the requirements you specify are unfortunately afaik not possible.
Similar to the thread you linked to, you can use the API method.

Something like this for example

$dsFolderName = 'datastore-1000gb'
$toAddr = 'alert@email.com'

$dsFolder = Get-Folder -Name $dsFolderName

$spec = New-Object VMware.Vim.AlarmSpec
$spec.Expression = New-Object VMware.Vim.OrAlarmExpression
$spec.Expression.Expression = New-Object VMware.Vim.AlarmExpression[] (1)
$spec.Expression.Expression[0] = New-Object VMware.Vim.MetricAlarmExpression
$spec.Expression.Expression[0].Red = 9000
$spec.Expression.Expression[0].Metric = New-Object VMware.Vim.PerfMetricId
$spec.Expression.Expression[0].Metric.Instance = ''
$spec.Expression.Expression[0].Metric.CounterId = (Get-Metric -MetricGroup Disk -Name 'Space Actually Used').Key
$spec.Expression.Expression[0].Yellow = 8000
$spec.Expression.Expression[0].Type = 'Datastore'
$spec.Expression.Expression[0].Operator = 'isAbove'
$spec.Name = 'Space Utilization 3'
$spec.Action = New-Object VMware.Vim.GroupAlarmAction
$spec.Action.Action = New-Object VMware.Vim.AlarmAction[] (4)
$spec.Action.Action[0] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[0].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[0].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[0].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[0].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[0].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[0].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[0].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[0].Yellow2green = $false
$spec.Action.Action[0].Yellow2red = $false
$spec.Action.Action[0].Red2yellow = $false
$spec.Action.Action[0].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[0].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[0].Action.CcList = ''
$spec.Action.Action[0].Action.ToList = $toAddr
$spec.Action.Action[0].Action.Body = ''
$spec.Action.Action[0].Green2yellow = $false
$spec.Action.Action[1] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[1].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (2)
$spec.Action.Action[1].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[0].StartState = 'green'
$spec.Action.Action[1].TransitionSpecs[0].FinalState = 'yellow'
$spec.Action.Action[1].TransitionSpecs[1] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[1].TransitionSpecs[1].Repeats = $false
$spec.Action.Action[1].TransitionSpecs[1].StartState = 'red'
$spec.Action.Action[1].TransitionSpecs[1].FinalState = 'yellow'
$spec.Action.Action[1].Yellow2green = $false
$spec.Action.Action[1].Yellow2red = $false
$spec.Action.Action[1].Red2yellow = $false
$spec.Action.Action[1].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[1].Green2yellow = $false
$spec.Action.Action[2] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[2].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[2].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[2].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[2].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[2].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[2].Yellow2green = $false
$spec.Action.Action[2].Yellow2red = $false
$spec.Action.Action[2].Red2yellow = $false
$spec.Action.Action[2].Action = New-Object VMware.Vim.SendEmailAction
$spec.Action.Action[2].Action.Subject = 'Alarm {alarmName} on Datastore : {targetName} is {newStatus}'
$spec.Action.Action[2].Action.CcList = ''
$spec.Action.Action[2].Action.ToList = $toAddr
$spec.Action.Action[2].Action.Body = ''
$spec.Action.Action[2].Green2yellow = $false
$spec.Action.Action[3] = New-Object VMware.Vim.AlarmTriggeringAction
$spec.Action.Action[3].TransitionSpecs = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec[] (1)
$spec.Action.Action[3].TransitionSpecs[0] = New-Object VMware.Vim.AlarmTriggeringActionTransitionSpec
$spec.Action.Action[3].TransitionSpecs[0].Repeats = $false
$spec.Action.Action[3].TransitionSpecs[0].StartState = 'yellow'
$spec.Action.Action[3].TransitionSpecs[0].FinalState = 'red'
$spec.Action.Action[3].Yellow2green = $false
$spec.Action.Action[3].Yellow2red = $false
$spec.Action.Action[3].Red2yellow = $false
$spec.Action.Action[3].Action = New-Object VMware.Vim.SendSNMPAction
$spec.Action.Action[3].Green2yellow = $false
$spec.Description = ''
$spec.Enabled = $false
$spec.Setting = New-Object VMware.Vim.AlarmSetting
$spec.Setting.ToleranceRange = 0
$spec.Setting.ReportingFrequency = 300

$alarmMgr = Get-View AlarmManager
$alarmMgr.CreateAlarm($dsFolder.Id, $spec)


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

0 Kudos
BBB36
Enthusiast
Enthusiast
Jump to solution

Hey @LucD Thanks so much as usual! I'll definitely test this out and let you know how it goes.

0 Kudos
BBB36
Enthusiast
Enthusiast
Jump to solution

Thank you @LucD. This works very well. 

0 Kudos