欢迎光临散文网 会员登陆 & 注册

Azure实践之如何批量为资源组虚拟机创建alert

2021-10-19 14:07 作者:Vecloud_  | 我要投稿


通过上一篇的简介,相信各位对于简单的创建alert,以及Azure monitor使用以及大概有个印象了。基础的使用总是非常简单的,这里再分享一个常用的alert使用方法 
  
实际工作中,不管是日常运维还是做项目,我们都需要知道VM的实际性能情况,避免出现性能瓶颈,因此创建alert是一种非常方便的方式,我们可以通过alert第一时间知道系统出现了性能的瓶颈,以便尽快采取解决措施。 


因此,也衍生了一个实际的问题,单独为一台VM开启alert很简单,但是如果我们需要为一个资源组内十几甚至几十上百台VM统一创建alert,则会非常麻烦 


在这里分享一个自己写的简单脚本,可以通过批量的方式为一个资源组内的所有VM,或者是某个单独的VM创建alert,省去很多不必要的重复性工作,以下是代码的内容 


<#.NOTES===========================================================================Createdwith:SAPIENTechnologies,Inc.,PowerShellStudio2017v5.4.134Createdon:2019/1/1013:19Createdby:mxyOrganization:Filename:===========================================================================.DESCRIPTIONAdescriptionofthefile.#>param([parameter(Mandatory=$true)][string]$RGName,#资源组名称[parameter(Mandatory=$false)][string]$VmName,#VM名称[parameter(Mandatory=$true)][string]$MailAddress,#邮件地址[parameter(Mandatory=$false)][ValidateSet("CPU","Memory")][string]$Metric="CPU",#需要针对哪个metric创建alert,方便起见这里目前只是设置了CPU和内存两种[parameter(Mandatory=$false)][ValidateSet("GreaterThan","GreaterThanOrEqual","LessThan","LessThanOrEqual")][string]$Operation="GreaterThan",#操作条件[parameter(Mandatory=$false)][int]$Threshold=50,#阈值[parameter(Mandatory=$false)][ValidateSet("Average","Last","Maximum","Minimum","Total")]#计算方式,是平均还是最大等[string]$TimeAggregationOperator="Average",[parameter(Mandatory=$false)][TimeSpan]$WindowSize="00:05:00"#时间戳)functionWrite-DateTimeMessage{param([parameter(Mandatory=$false)][switch]$Warning,[parameter(Mandatory=$true)][string]$Message,[parameter(Mandatory=$false)][string]$ForegroundColor)if($Warning){Write-Warning($(Get-Date-UFormat'%Y/%m/%d%H:%M:%S')+"*"+$Message)}else{if($ForegroundColor){Write-Host($(Get-Date-UFormat'%Y/%m/%d%H:%M:%S')+"*"+$Message)-ForegroundColor$ForegroundColor}else{Write-Host($(Get-Date-UFormat'%Y/%m/%d%H:%M:%S')+"*"+$Message)}}}#Getmetricnameswitch($Metric){Memory{$MetricName="\Memory\%CommittedBytesInUse"}CPU{$MetricName="\ProcessorInformation(_Total)\%ProcessorTime"}default{#<code>}}#Findthevmifvmnameparameterspecifiedtry{$Error.Clear()if($VmName){Write-DateTimeMessage"Tryingtofindvm$VmNameinresourcegroup$RGName"$vms=Get-AzureRmVM-ResourceGroupName$RGName-Name$VmName-ErrorActionStopWrite-DateTimeMessage"vm$VmNameFoundinresourcegroup$RGName"}else{$vms=Get-AzureRmVM-ResourceGroupName$RGName-ErrorActionStop}#Createactionemail$actionEmail=New-AzureRmAlertRuleEmail-CustomEmail$MailAddress-WarningActionSilentlyContinue#Getresourceidandaddalertif($vms-ne$null){foreach($vmin$vms){$vmID=$vm.id$AlertName=$vm.Name+"_Alert_"+$Metric+"_"+$Operation+"_"+$Threshold+"_"+$actionEmail.CustomEmails$Error.Clear()Write-DateTimeMessage"Tryingtoaddalertforvm$($vm.Name)..."Add-AzureRmMetricAlertRule-Name$AlertName-Location"ChinaEast"-ResourceGroup$RGName-TargetResourceId$vmID-MetricName$MetricName-Operator$Operation-Threshold$Threshold-WindowSize$WindowSize-TimeAggregationOperator$TimeAggregationOperator-Action$actionEmail-ErrorAction'Stop'-WarningAction'SilentlyContinue'|Out-NullWrite-DateTimeMessage"Addalertforvm$($vm.Name)successfully!"}}else{Write-DateTimeMessage"Novminresourcegroup$RGName"}}catch{Write-DateTimeMessage$Error[0].Exception.Message} 

可以看到脚本很简单,运行方法这里举个例子,比如要为mxytest这个资源组下的所有VM创建CPU10分钟之内大于80便发邮件给abc@abc.com的alert,则可以按照以下方式运行 

.\Create-AzureAlert.ps1 -RGName mxytest -MailAddress "abc@abc.com" -Metric CPU -Operation GreaterThan -Threshold 80 -TimeAggregationOperator Average -WindowSize "00:10:00" 

创建完成后即可在alert中国看到对应的内容
Get-AzureRmAlertRule -ResourceGroupName mxytest -WarningAction SilentlyContinue 

也可以通过PowerShell获取到信息

了解更多网络知识关注:http://www.vecloud.com/

Azure实践之如何批量为资源组虚拟机创建alert的评论 (共 条)

分享到微博请遵守国家法律