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

   通过上一篇的简介,相信各位对于简单的创建alert,以及Azure monitor使用以及大概有个印象了。基础的使用总是非常简单的,这里再分享一个常用的alert使用方法

成都创新互联-专业网站定制、快速模板网站建设、高性价比锡山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式锡山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖锡山地区。费用合理售后完善,十年实体公司更值得信赖。

   实际工作中,不管是日常运维还是做项目,我们都需要知道VM的实际性能情况,避免出现性能瓶颈,因此创建alert是一种非常方便的方式,我们可以通过alert第一时间知道系统出现了性能的瓶颈,以便尽快采取解决措施。

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

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

<# 
 .NOTES
 ===========================================================================
  Created with:  SAPIEN Technologies, Inc., PowerShell Studio 2017 v5.4.134
  Created on:    2019/1/10 13:19
  Created by:    mxy
  Organization:  
  Filename:      
 ===========================================================================
 .DESCRIPTION
  A description of the file.
#>
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"#时间戳
 
)

function Write-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)
  }
 }
 
}

#Get metric name
switch ($Metric)
{
 Memory {
  $MetricName = "\Memory\% Committed Bytes In Use"
 }
 CPU {
  $MetricName = "\Processor Information(_Total)\% Processor Time"
 }
 default
 {
  #
 }
}
#Find the vm if vmname parameter specified
try
{
 $Error.Clear()
 if ($VmName)
 {
  Write-DateTimeMessage "Trying to find vm $VmName in resource group $RGName"
  $vms = Get-AzureRmVM -ResourceGroupName $RGName -Name $VmName -ErrorAction Stop
  Write-DateTimeMessage "vm $VmName Found in resource group $RGName"
 }
 else
 {
  $vms = Get-AzureRmVM -ResourceGroupName $RGName -ErrorAction Stop
 }
 
 # Create action email
 $actionEmail = New-AzureRmAlertRuleEmail -CustomEmail $MailAddress -WarningAction SilentlyContinue
 
 # Get resource id and add alert
 if ($vms -ne $null)
 {
  foreach ($vm in $vms)
  {
   $vmID = $vm.id
   
   $AlertName = $vm.Name + "_Alert_" + $Metric + "_" + $Operation + "_" + $Threshold + "_" + $actionEmail.CustomEmails
   $Error.Clear()
   Write-DateTimeMessage "Trying to add alert for vm $($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-Null
   Write-DateTimeMessage "Add alert for vm $($vm.Name) successfully!"
  }
 }
 else
 {
  Write-DateTimeMessage "No vm in resource group $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"

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

创建完成后即可在alert中国看到对应的内容

Get-AzureRmAlertRule -ResourceGroupName mxytest -WarningAction SilentlyContinue

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

也可以通过PowerShell获取到信息

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

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前题目:Azure实践之如何批量为资源组虚拟机创建alert-创新互联
转载来于:http://cdiso.cn/article/pedes.html