Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
监视应用程序的运行状况是管理和升级部署的重要信号。 Azure 虚拟机规模集支持 滚动升级,包括 自动 OS 映像升级 和 自动 VM 来宾修补程序;这些功能依赖于对各个实例的运行状况监控来升级你的部署。 你还可使用应用程序运行状况扩展来监视规模集中每个实例的应用程序运行状况,并使用自动实例修复来执行实例修复。
本文介绍如何使用应用程序运行状况扩展的两种类型,即 二进制运行状况状态 或 丰富运行状况状态,来监视部署在虚拟机规模集上的应用程序的运行状况。
先决条件
本文假定你熟悉以下内容:
注意
应用程序运行状况扩展希望在配置的端口 tcp 或请求路径 http/https 上接收一致的探测响应,以将 VM 标记为 “正常”。 如果 VM 上没有正在运行的应用程序,或者你无法配置探测响应,则 VM 将显示为 不健康(二进制健康状态)或 未知(丰富健康状态)。 有关将运行状况探测响应发送到本地终结点的示例,请参阅 应用程序运行状况示例。
注意
对于虚拟机规模集,只能使用一种运行状况监视源,可以是应用程序运行状况扩展或运行状况探测。 如果启用这两个选项,则需要在使用实例修复或自动 OS 升级等业务流程服务之前移除一个。
何时使用应用程序运行状况扩展
应用程序运行状况扩展将部署在虚拟机规模集实例中,并从规模集实例报告应用程序运行状况。 该扩展会对本地应用程序端点进行探测,并根据应用程序返回的 TCP/HTTP(S) 响应更新运行状况状态。 Azure 使用此运行状况来对运行不正常的实例启动修复,并确定实例是否有资格执行升级操作。
该扩展可从虚拟机内部报告运行状况,适用于无法使用外部探测(例如 Azure 负载均衡器运行状况探测)的场景。
二进制运行状况状态与丰富运行状况状态
应用程序运行状况扩展有两个选项可用:二进制运行状况状态和丰富运行状况状态。 下表重点介绍了两个选项之间的一些关键差异。 有关常规建议,请参阅本部分的末尾。
| 功能 | 二元健康状态 | 丰富运行状况状态 |
|---|---|---|
| 可用的健康状态 | 两种可用状态:“正常”、“不正常” | 四种状态:正常、异常、初始化中、未知1 |
| 发送健康信号 | 运行状况信号通过 HTTP/HTTPS 响应状态代码或 TCP 连接传递。 | HTTP/HTTPS 协议上的健康信号通过探测响应状态码和响应正文传递。 通过 TCP 协议传递的健康信号与二元健康状态保持一致。 |
| 识别 不健康 实例 | 如果未从应用程序收到“正常”信号,实例将自动进入“不正常”状态。 不正常实例可能表示扩展配置存在问题(例如,无法访问终结点)或应用程序存在问题(例如,出现非 200 状态代码)。 | 仅当应用程序发出“不正常”探测响应时,实例才会进入“不正常”状态。 用户负责实现自定义逻辑,以识别并标记具有不健康应用程序2的实例。 扩展设置不正确(例如,终结点不可访问)或运行状况探测响应无效的实例将归入未知状态2。 |
| 新创建的实例的“正在初始化”状态 | 正在初始化状态不可用。 新创建的实例可能需要一些时间才能进入稳定状态。 | 正在初始化状态使新创建的实例在被视为可进行滚动升级或实例修复操作之前,先进入稳定的运行状况。 |
| HTTP/HTTPS 协议 | 受支持 | 受支持 |
| TCP 协议 | 受支持 | 有限支持 -“未知”状态在 TCP 协议上不可用。 有关 TCP 上的运行状况状态行为,请参阅丰富的运行状况状态协议表。 |
1Unknown 状态在 TCP 协议中不可用。 2 仅适用于 HTTP/HTTPS 协议。 TCP 协议将采用与二元健康状态中相同的流程来识别 不健康 实例。
通常,在以下情况下,应使用丰富运行状况状态:
- 您可以通过 HTTP/HTTPS 协议发送运行状况信号,并可在探测响应正文中提交运行状况信息。
- 你想要使用自定义逻辑来标识和标记不正常的实例
- 您可能需要为新创建的实例设置一个initializing宽限期,以便在实例可进行滚动升级或实例修复之前,先达到稳定的运行状况。
- 你希望通过发出自定义指标,通过滚动升级更好地控制排序和更新过程
在以下情况下,应使用二进制运行状况状态:
- 你对配置自定义逻辑来识别和标记不正常的实例不感兴趣
- 新创建的实例不需要initializing宽限期
- 在 VM 上执行滚动升级时,无需使用自定义指标
丰富运行状况状态
丰富运行状况报告包含四种运行状况:正在初始化、正常、异常和未知。 下列表格简要说明了各个运行状况状态的配置方式。
HTTP/HTTPS 协议
| 协议 | 运行状况 | 说明 |
|---|---|---|
| http/https | 正常 | 若要发送 正常 信号,应用程序应返回一个探测响应,并包含以下内容:探测响应代码:2xx 状态,探测响应正文:{"ApplicationHealthState": "Healthy"} |
| http/https | 不正常 | 若要发送 不健康 信号,应用程序应返回带有以下内容的探测响应:探测响应代码:状态 2xx,探测响应正文:{"ApplicationHealthState": "Unhealthy"} |
| http/https | 正在初始化 | 实例在扩展启动时自动进入“正在初始化”状态。 有关详细信息,请参阅初始化状态。 |
| http/https | 未知 | 在以下情况下,可能会出现 未知 状态:当应用程序返回非 2xx 状态代码时、当探测请求超时时、当应用程序终结点无法访问或配置不正确时、当响应正文中的 ApplicationHealthState 提供的值缺失或无效时,或当宽限期到期时。 有关更多信息,请参阅未知状态。 |
TCP 协议
| 协议 | 运行状况 | 说明 |
|---|---|---|
| TCP | 正常 | 要发送运行正常信号,必须与所提供的应用程序终结点成功完成握手。 |
| TCP | 不健康 | 如果与所提供的应用程序端点进行握手时失败或未完成,实例将被标记为 不健康。 |
| TCP | 正在初始化 | 实例在扩展启动时自动进入“正在初始化”状态。 有关详细信息,请参阅初始化状态。 |
初始化状态
此状态仅适用于富运行状况状态。
Initializing 状态仅会在扩展启动时出现一次,并且可通过扩展设置 gracePeriod 和 numberOfProbes 进行配置。
在扩展启动时,应用程序运行状况将保持“正在初始化”状态,直到出现以下两种情况之一:
- 根据 numberOfProbes 的配置,同一运行状况状态(正常 或 不正常)会被连续报告指定次数
-
gracePeriod过期
如果连续报告相同的运行状况状态(“正常”或“不正常”),应用程序运行状况将从“正在初始化”状态转换为报告的运行状况状态(“正常”或“不正常”)。
示例
如果 numberOfProbes = 3,则表示:
- 若要从“正在初始化”转换为“正常”状态:应用程序运行状况扩展必须通过 HTTP/HTTPS 或 TCP 协议接收三个连续的“正常”信号
- 若要从“正在初始化”转换为“不正常”状态:应用程序运行状况扩展必须通过 HTTP/HTTPS 或 TCP 协议接收三个连续的“不正常”信号
如果在应用程序报告连续的运行状况状态之前 gracePeriod 已过期,则实例运行状况将按如下方式确定:
- HTTP/HTTPS 协议:应用程序运行状况将从“正在初始化”转换为“未知”
- TCP 协议:应用程序运行状况将从“正在初始化”转换为“不正常”
未知状态
此状态仅适用于丰富健康状态。 Unknown 状态仅针对“http”或“https”探测报告,并会在以下情况下出现:
- 应用程序返回非 2xx 状态代码时
- 当探针请求超时时
- 应用程序终结点无法访问或配置不正确时
- 当响应正文中为
ApplicationHealthState提供了缺失或无效的值时 - 宽限期到期时
处于“未知”状态的实例的处理方式与“不正常”实例类似。 如果启用,将对“未知”实例执行实例修复,而滚动升级将暂停,直到实例回退为“正常”状态。
| 健康状态 | 滚动升级说明 | 实例修复触发器 |
|---|---|---|
| 正在初始化 | 等待状态变为 正常、异常 或 未知 之一 | 否 |
| 正常 | 正常 | 否 |
| 不健康 | 不正常 | 是的 |
| 未知 | 不健康 | 是的 |
丰富运行状况状态的扩展架构
以下 JSON 展示了 Rich Health States 扩展的架构定义。 扩展至少需要“http”或“https”请求,且各自具有相关的端口或请求路径。 还支持 TCP 探测,但无法通过探测响应正文设置 ApplicationHealthState,并且无法使用 Unknown 状态。
{
"extensionProfile" : {
"extensions" : [
{
"name": "HealthExtension",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "2.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": 5,
"numberOfProbes": 1,
"gracePeriod": 600
}
}
}
]
}
}
属性值
| 名称 | 值/示例 | 数据类型 |
|---|---|---|
| apiVersion | 2018-10-01 |
日期 |
| 发布服务器 | Microsoft.ManagedServices |
字符串 |
| 类型 |
ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
字符串 |
| typeHandlerVersion | 2.0 |
字符串 |
设置
| 名称 | 值/示例 | 数据类型 |
|---|---|---|
| 协议 |
http 或 https 或 tcp |
字符串 |
| 移植 | 协议为 http 或 https 时为可选,协议为 tcp 时为必需 |
整数 (int) |
| 请求路径 | 当协议为 http 或 https 时,则为必填;当协议为 tcp 时,则不允许 |
字符串 |
| 时间间隔(秒) | 可选,默认值为 5 秒。 这是每次健康探测之间的时间间隔。 例如,如果 intervalInSeconds == 5,则会每隔 5 秒向本地应用程序终结点发送一次探测。 最小值为 5 秒,最大值为 60 秒。 | 整数 (int) |
| 探试次数 | 可选,默认值为 1。 这是使健康状态发生变化所需的连续探测次数。 例如,如果 numberOfProbles == 3,则需要 3 个连续的“正常”信号才能将运行状况从“不正常”/“未知”更改为“正常”状态。 相同的要求适用于将运行状况更改为“不正常”或“未知”状态。 最小值为 1 个探测,最大值为 24 个探测。 | 整数 (int) |
| 宽限期 | 可选,默认值 = intervalInSeconds * numberOfProbes;最大宽限期为 14400 秒 |
整数 (int) |
二元健康状态
二元健康状态报告包含两种健康状态:健康 和 不健康。 以下表格简要说明了健康状态的配置方式。
HTTP/HTTPS 协议
| 协议 | 运行状况 | 说明 |
|---|---|---|
| http/https | 正常 | 要发送 健康 信号,应用程序应返回 200 响应代码。 |
| http/https | 不正常 | 如果未从应用程序收到 200 响应代码,该实例将被标记为“不正常”。 |
TCP 协议
| 协议 | 运行状况 | 说明 |
|---|---|---|
| TCP | 正常 | 若要发送Healthy信号,必须与提供的应用程序端点成功完成握手。 |
| TCP | 不健康 | 如果与提供的应用程序端点进行握手时失败或未完成,实例将被标记为不健康。 |
可能导致“不正常”状态的一些情况包括:
- 当应用程序终结点返回非 200 状态代码时
- 当虚拟机实例中没有配置应用程序终结点来提供应用程序运行状态时
- 当应用程序终结点配置不正确
- 当应用程序终结点不可访问时
二进制健康状态的扩展架构
以下 JSON 显示了应用运行状况扩展的架构定义。 扩展至少需要“tcp”、“http”或“https”请求,且各自具有相关的端口或请求路径。
{
"extensionProfile" : {
"extensions" : [
{
"name": "HealthExtension",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "1.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": 5,
"numberOfProbes": 1
}
}
}
]
}
}
属性值
| 名称 | 值/示例 | 数据类型 |
|---|---|---|
| apiVersion | 2018-10-01 |
日期 |
| 发布服务器 | Microsoft.ManagedServices |
字符串 |
| 类型 |
ApplicationHealthLinux (Linux)、ApplicationHealthWindows (Windows) |
字符串 |
| typeHandlerVersion | 1.0 |
字符串 |
设置
| 名称 | 值/示例 | 数据类型 |
|---|---|---|
| 协议 |
http 或 https 或 tcp |
字符串 |
| 移植 | 当协议为 http 或 https 时为可选,当协议为 tcp 时为必填 |
整数 (int) |
| 请求路径 | 当协议为 http 或 https 时为必填,当协议为 tcp 时不允许 |
字符串 |
| 时间间隔(秒) | 可选,默认值为 5 秒。 这是每次健康探测之间的时间间隔。 例如,如果 intervalInSeconds == 5,则会每隔 5 秒向本地应用程序终结点发送一次探测。 最小值为 5 秒,最大值为 60 秒。 | 整数 (int) |
| 探试次数 | 可选,默认值为 1。 这是运行状况发生变化所需的连续探测次数。 例如,如果 numberOfProbles == 3,则需要连续 3 个“正常”信号才能将运行状况从“运行不正常”更改为“正常”状态。 相同的要求适用于将运行状况更改为“运行不正常”状态。 最小值为 1 个探测,最大值为 24 个探测。 | 整数 (int) |
部署应用程序健康扩展
可以使用多种方法将应用程序运行状况扩展部署到规模集,如下面的示例所详述。
丰富运行状况状态
以下示例将 应用程序运行状况 - 详细状态 扩展(名称为 myHealthExtension)添加到基于 Windows 的规模集的规模集模型中的 extensionProfile。
你还可以使用此示例,将 PUT 调用改为 PATCH 调用,从而将现有扩展从二进制状态升级为丰富运行状况状态。
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
"name": "myHealthExtension",
"location": "<location>",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthWindows",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "2.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>",
"intervalInSeconds": <intervalInSeconds>,
"numberOfProbes": <numberOfProbes>,
"gracePeriod": <gracePeriod>
}
}
}
使用PATCH编辑已部署的扩展。
升级虚拟机以安装扩展。
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
二元健康状态
以下示例在基于 Windows 的规模集模型中,将 Application Health 扩展(名称为 myHealthExtension)添加到 extensionProfile。
你还可以使用此示例,通过发出 PATCH 调用而非 PUT 调用,将现有扩展从丰富健康状态更改为二元健康状态。
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
"name": "myHealthExtension",
"location": "<location>",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthWindows",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "1.0",
"settings": {
"protocol": "<protocol>",
"port": <port>,
"requestPath": "</requestPath>"
}
}
}
使用 PATCH 编辑已部署的扩展。
升级虚拟机以安装扩展。
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
疑难解答
需要有关配置探测响应的帮助
有关发送到本地终结点的运行状况探测响应示例,请参阅 应用程序运行状况示例。
查看 VMHealth – 单个实例
Get-AzVmssVM
-InstanceView `
-ResourceGroupName <rgName> `
-VMScaleSetName <vmssName> `
-InstanceId <instanceId>
查看 VMHealth - 批量调用
这仅适用于具有统一编排的虚拟机规模集。
GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`
未显示运行状况状态
如果运行状况状态未显示在 Azure 门户中或无法通过 GET 调用显示,请检查以确保虚拟机升级到最新模型。 如果虚拟机未使用最新模型,请升级虚拟机,之后将显示运行状况状态。
扩展执行输出日志
扩展执行输出将记录到以下目录中的文件中:
C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension
日志还会定期记录应用程序的运行状况。
后续步骤
了解如何在虚拟机规模集中部署您的应用程序。