gpt4 book ai didi

azure - 如何通过某种警报检查 Azure VM 是否在特定时间运行?

转载 作者:行者123 更新时间:2023-12-03 04:25:27 26 4
gpt4 key购买 nike

我想知道如何为 Azure VM 创建警报,告诉我服务器是否在特定时间运行。

场景:Azure 网络的服务器需要在上午 7:30 启动,以便为用户做好准备,因为他们每天晚上 7:30 关闭以节省费用。今天, azure 自动化脚本找不到资源组的任何虚拟机!所以这意味着服务器没有启动。我想创建一个警报,仅告诉我服务器是否在上午 7:45 未运行。这样我就可以启动它们了。(现在运行脚本确实可以找到所有服务器,但之前由于某种原因没有找到...也许 Azure 正在移动资源组中的虚拟机?)

我看过:- Microsoft Operations Management Suit > 日志搜索 > 添加警报规则。- 资源管理器 > 虚拟机 > 监控 > 警报规则 > 添加 metic 警报和添加事件日志警报。但我看不到只在特定时间运行警报的位置。

更新/编辑:使用的脚本:

param ( 
[Parameter(Mandatory=$false)]
[String]$AzureCredentialAssetName = 'AzureCred',

[Parameter(Mandatory=$false)]
[String]$AzureSubscriptionIDAssetName = 'AzureSubscriptionId'
)

# Setting error and warning action preferences
$ErrorActionPreference = "SilentlyContinue"
$WarningPreference = "SilentlyContinue"

# Connecting to Azure
$Cred = Get-AutomationPSCredential -Name $AzureCredentialAssetName -ErrorAction Stop
$null = Add-AzureAccount -Credential $Cred -ErrorAction Stop -ErrorVariable err
$null = Add-AzureRmAccount -Credential $Cred -ErrorAction Stop -ErrorVariable err

# Selecting the subscription to work against
$SubID = Get-AutomationVariable -Name $AzureSubscriptionIDAssetName
Select-AzureRmSubscription -SubscriptionId $SubID

# Getting all resource groups
$ResourceGroup = "Servers"

# Getting all virtual machines
$RmVMs = (Get-AzureRmVM -ResourceGroupName $ResourceGroup -ErrorAction $ErrorActionPreference -WarningAction $WarningPreference).Name

# Managing virtual machines deployed with the Resource Manager deployment model
"Loop through all VMs in resource group $ResourceGroup."
if ($RmVMs)
{
foreach ($RmVM in $RmVMs)
{
"`t$RmVM found ..."
$RmPState = (Get-AzureRmVM -ResourceGroupName $ResourceGroup -Name $RmVM -Status -ErrorAction $ErrorActionPreference -WarningAction $WarningPreference).Statuses.Code[1]
if ($RmPState -eq 'PowerState/deallocated')
{
"`t$RmVM is starting up ..."
$RmSState = (Start-AzureRmVM -ResourceGroupName $ResourceGroup -Name $RmVM -ErrorAction $ErrorActionPreference -WarningAction $WarningPreference).IsSuccessStatusCode

if ($RmSState -eq 'True')
{
"`t$RmVM has been started."
}
else
{
"`t$RmVM failed to start."
}
}
}
}
else
{
"No VMs for $ResourceGroup deployed with the Resource Manager deployment model."
}
"Runbook Completed."

我只是想要一个故障安全装置来知道服务器是否没有在应该运行的时候运行。

预期输出:

Loop through all VMs in resource group Servers.

DOMAINCONTROLLER found ...

SQLSERVER found ...

GATEWAY found ...

APPLICATIONHOST found ...

Runbook Completed.

而不是:

Loop through all VMs in resource group Servers.

No VMs for Servers deployed with the Resource Manager deployment model.

Runbook Completed.

即手动重新运行相同的脚本给出了预期的结果。

最佳答案

据我所知,当您的 VM 在特定时间启动或停止时,Azure 指标警报无法发送邮件。

根据您的描述,Start/Stop VMs during off-hours [Preview] solution in Automation是您省钱的好解决方案。

在非工作时间启动/停止 VM [预览] 解决方案可按照用户定义的计划启动和停止 Azure 资源管理器虚拟机,并深入了解使用 OMS 启动和停止虚拟机的自动化作业是否成功日志分析。

它可以在启动和停止 VM Runbook 完成时发送电子邮件通知。

您还可以使用Azure自动化在特定时间启动或停止VM,更多信息请参阅此link .

更新:

你的脚本适合我。我检查您的脚本,$RmVMs = (Get-AzureRmVM -ResourceGroupName $ResourceGroup -ErrorAction $ErrorActionPreference -WarningAction $WarningPreference).Name 返回 null。您有多个订阅吗?您的订阅 ID 似乎有误。请确保您的订阅 ID 正确。您可以在本地 PowerShell 上获取您的订阅 ID。

Get-AzureRmSubscription

更新2:

您可以将订阅保存到自动化连接。您可以使用下面的脚本:

param ( 
[Parameter(Mandatory=$false)]
[String]$AzureCredentialAssetName

)

# Authenticate to Azure with certificate
Write-Verbose "Get connection asset: $ConnectionAssetName" -Verbose
$connectionName = Get-AutomationConnection -Name $AzureCredentialAssetName
try
{
# Get the connection "AzureRunAsConnection "
$servicePrincipalConnection=Get-AutomationConnection -Name $AzureCredentialAssetName

"Logging in to Azure..."
Add-AzureRmAccount `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
}
catch {
if (!$servicePrincipalConnection)
{
$ErrorMessage = "Connection $connectionName not found."
throw $ErrorMessage
} else{
Write-Error -Message $_.Exception
throw $_.Exception
}
}

$ResourceGroup = "shui2"
.....

enter image description here

关于azure - 如何通过某种警报检查 Azure VM 是否在特定时间运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43990866/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com