使用网络观察程序故障排除功能监视 VPN 网关
若要向客户提供可靠的服务,获取网络性能的深入见解至关重要。 因此,必须能够快速检测网络中断状态,并采取纠正措施来缓解中断状态。 在 Azure 自动化中,可以通过 Runbook 以编程方式实施和运行任务。 使用 Azure 自动化可以创建完美的脚本来执行连续、主动的网络监视和警报。
场景
下图中的方案是一个多层应用程序,其中使用 VPN 网关和隧道建立了本地连接。 确保 VPN 网关正常运行对于应用程序的性能至关重要。
可以创建一个包含脚本的 Runbook 来检查 VPN 隧道的连接状态,使用资源故障排除 API 来检查连接隧道的状态。 如果状态不正常,可向管理员发送电子邮件触发器。
此方案将:
- 创建一个可以调用
Start-AzureRmNetworkWatcherResourceTroubleshooting
cmdlet 来排查连接状态的 Runbook - 将计划链接到 Runbook
开始之前
在开始学习本方案之前,必须满足以下先决条件:
- 在 Azure 中有一个 Azure 自动化帐户。 请确保自动化帐户具有最新模块,同时确保具有 AzureRM.Network 模块。 如果需要将 AzureRM.Network 模块添加到自动化帐户,可以在模块库中找到此模块。
- 必须在 Azure 自动化中配置一组凭据。 在 Azure 自动化安全性中了解详细信息。
- 在 Azure 自动化中定义有效的 SMTP 服务器(Microsoft 365、本地电子邮件或其他服务器)和凭据
- 在 Azure 配置的虚拟网络网关。
- 现有存储帐户,其中具有一个存储登录信息的现有容器。
注意
上图所示的基础结构用于演示目的,不是使用本文中的步骤创建的。
创建 Runbook
配置示例的第一个步骤是创建 Runbook。
步骤 1
在 Azure 门户中导航到“Azure 自动化”,并单击“Runbook”
步骤 2
单击“添加 Runbook”启动 Runbook 创建过程。
步骤 3
在“快速创建”下面,单击“创建新的 Runbook”创建 Runbook。
步骤 4
在此步骤中,我们将为 Runbook 命名,在本示例中命名为 Get-VPNGatewayStatus。 必须为 Runbook 指定一个描述性的名称,我们建议遵循正式的 PowerShell 命名标准来命名。 本示例中的 Runbook 类型为“PowerShell”,其他选项包括“图形”、“PowerShell 工作流”和“图形 PowerShell 工作流”。
步骤 5
在此步骤中创建 Runbook。以下代码示例提供了本示例所需的所有代码。 需要将代码中包含 <value> 的项替换为订阅中的值。
使用以下代码,并单击“保存”
# Set these variables to the proper values for your environment
$automationCredential = "<work or school account>"
$fromEmail = "<from email address>"
$toEmail = "<to email address>"
$smtpServer = "<smtp.office365.com>"
$smtpPort = 587
$runAsConnectionName = "<AzureRunAsConnection>"
$subscriptionId = "<subscription id>"
$region = "<Azure region>"
$vpnConnectionName = "<vpn connection name>"
$vpnConnectionResourceGroup = "<resource group name>"
$storageAccountName = "<storage account name>"
$storageAccountResourceGroup = "<resource group name>"
$storageAccountContainer = "<container name>"
# Get credentials for work or school account
$cred = Get-AutomationPSCredential -Name $automationCredential
# Get the connection "AzureRunAsConnection "
$servicePrincipalConnection=Get-AutomationConnection -Name $runAsConnectionName
"Logging in to Azure..."
Connect-AzAccount -Environment AzureChinaCloud `
-ServicePrincipal `
-TenantId $servicePrincipalConnection.TenantId `
-ApplicationId $servicePrincipalConnection.ApplicationId `
-CertificateThumbprint $servicePrincipalConnection.CertificateThumbprint
"Setting context to a specific subscription"
Set-AzureRmContext -SubscriptionId $subscriptionId
$nw = Get-AzurermResource | Where {$_.ResourceType -eq "Microsoft.Network/networkWatchers" -and $_.Location -eq $region }
$networkWatcher = Get-AzureRmNetworkWatcher -Name $nw.Name -ResourceGroupName $nw.ResourceGroupName
$connection = Get-AzureRmVirtualNetworkGatewayConnection -Name $vpnConnectionName -ResourceGroupName $vpnConnectionResourceGroup
$sa = Get-AzureRmStorageAccount -Name $storageAccountName -ResourceGroupName $storageAccountResourceGroup
$storagePath = "$($sa.PrimaryEndpoints.Blob)$($storageAccountContainer)"
$result = Start-AzureRmNetworkWatcherResourceTroubleshooting -NetworkWatcher $networkWatcher -TargetResourceId $connection.Id -StorageId $sa.Id -StoragePath $storagePath
if($result.code -ne "Healthy")
{
$body = "Connection for $($connection.name) is: $($result.code) `n$($result.results[0].summary) `nView the logs at $($storagePath) to learn more."
Write-Output $body
$subject = "$($connection.name) Status"
Send-MailMessage `
-To $toEmail `
-Subject $subject `
-Body $body `
-UseSsl `
-Port $smtpPort `
-SmtpServer $smtpServer `
-From $fromEmail `
-BodyAsHtml `
-Credential $cred
}
else
{
Write-Output ("Connection Status is: $($result.code)")
}
步骤 6
保存 Runbook 后,必须向它链接一个计划才能自动启动它。 若要启动链接过程,请单击“计划”。
将计划链接到 Runbook
必须创建一个新计划。 单击“将计划链接到 Runbook”。
步骤 1
在“计划”边栏选项卡中,单击“创建新计划”
步骤 2
在“新建计划”边栏选项卡中填写计划信息。 以下列表提供了可设置的值:
- 名称 - 计划的友好名称。
- 说明 - 计划的说明。
- 开始时间 - 此值是日期、时间和时区的组合,构成计划触发时间。
- 重复周期 - 此值确定计划的重复方式。 有效值为“一次”或“定期”。
- 重复间隔 - 以小时、天、周或月为单位的计划重复间隔。
- 设置过期时间 - 该值确定计划是否会过期。 可设置为“是”或“否”。 如果选择“是”,则要提供有效的日期和时间。
注意
如果需要以高于每隔一小时的频率运行某个 Runbook,必须以不同的间隔创建多个计划(即,在小时后面指定 15、30 或 45 分钟)
步骤 3
单击“保存”,将计划保存到 Runbook。
后续步骤
了解如何将网络观察程序故障排除功能与 Azure 自动化集成后,接下来请访问 Create an alert triggered packet capture with Azure Network Watcher(使用 Azure 网络观察程序创建警报触发的数据包捕获),了解如何根据 VM 警报触发数据包捕获。