Application Insights 中的可用性测试自动禁用
Availability Test in Application Insights atuomatically disables
我们有一个非常简单的 Application Insights 可用性测试(它在美国 4 个地区命中了 HTTPS URL)(基本上它命中了我们的应用服务)。
我们观察到此可用性测试会自动停止(不是固定的计划)但它会突然停止然后我们要做的是返回可用性测试编辑测试并再次保存它以便它重新启动。
这真的很奇怪,因为我们也检查了 Activity 日志,但其中没有任何关于有人停止测试等的报告。
关于如何解决这个问题的任何帮助?由于可用性测试突然停止(测试变灰)非常严重,因为我们不知道是否有任何中断,直到有人报告该服务。
该行为是由两个问题引起的,不应广泛传播:
- ARM 模板问题
- App Insights 可用性配置可能存在错误
这是一个有趣的极端案例,由 ARM 模板中的错误以及我们的前端和后端处理它的方式之间的差异引起。在提供的 ARM 模板中,定义了两个标签:
"tag": "[concat('hidden-link:/subscriptions/',subscription().id,'/resourceGroups/',resourceGroup().name,'/providers/microsoft.insights/components/',parameters('appInsightsName'))]",
"linkToAiResource": "[concat('hidden-link:', resourceId('microsoft.insights/components', parameters('appInsightsName')))]",
"tags": {
"[variables('tag')]": "Resource",
"[variables('linkToAiResource')]": "Resource"
},
这两个标签实例化为:
"hidden-link:/subscriptions//subscriptions/xxx/resourceGroups/yyy/providers/microsoft.insights/components/zzz": "Resource",
"hidden-link:/subscriptions/xxx/resourceGroups/yyy/providers/microsoft.insights/components/zzz": "Resource"
请注意,我们在第一个标签中复制了“/subscriptions/”。所以,两个问题:
- 一开始就有两个这样的link
- 第一个无效(我猜 subscription().id 已经包含了“/subscriptions/”部分)。
修复应该很简单——只需留下第二个标签(我们验证它开始工作)。
现在,我们这边的错误是前后端处理这种情况的逻辑不同:
- 前端成功找到隐藏的有效“资源”-link(忽略无效的)
- 后端(我猜)使用第一个,发现它指向(显然)已删除的资源并将此测试也标记为已删除。这导致此测试停止
我们会调整逻辑。两者都将在前端开始失败,并将更改后端以使用相同的逻辑(修复将在 1 月的某个时间推出)。
我们有一个非常简单的 Application Insights 可用性测试(它在美国 4 个地区命中了 HTTPS URL)(基本上它命中了我们的应用服务)。 我们观察到此可用性测试会自动停止(不是固定的计划)但它会突然停止然后我们要做的是返回可用性测试编辑测试并再次保存它以便它重新启动。 这真的很奇怪,因为我们也检查了 Activity 日志,但其中没有任何关于有人停止测试等的报告。
关于如何解决这个问题的任何帮助?由于可用性测试突然停止(测试变灰)非常严重,因为我们不知道是否有任何中断,直到有人报告该服务。
该行为是由两个问题引起的,不应广泛传播:
- ARM 模板问题
- App Insights 可用性配置可能存在错误
这是一个有趣的极端案例,由 ARM 模板中的错误以及我们的前端和后端处理它的方式之间的差异引起。在提供的 ARM 模板中,定义了两个标签:
"tag": "[concat('hidden-link:/subscriptions/',subscription().id,'/resourceGroups/',resourceGroup().name,'/providers/microsoft.insights/components/',parameters('appInsightsName'))]",
"linkToAiResource": "[concat('hidden-link:', resourceId('microsoft.insights/components', parameters('appInsightsName')))]",
"tags": {
"[variables('tag')]": "Resource",
"[variables('linkToAiResource')]": "Resource"
},
这两个标签实例化为:
"hidden-link:/subscriptions//subscriptions/xxx/resourceGroups/yyy/providers/microsoft.insights/components/zzz": "Resource",
"hidden-link:/subscriptions/xxx/resourceGroups/yyy/providers/microsoft.insights/components/zzz": "Resource"
请注意,我们在第一个标签中复制了“/subscriptions/”。所以,两个问题:
- 一开始就有两个这样的link
- 第一个无效(我猜 subscription().id 已经包含了“/subscriptions/”部分)。
修复应该很简单——只需留下第二个标签(我们验证它开始工作)。
现在,我们这边的错误是前后端处理这种情况的逻辑不同:
- 前端成功找到隐藏的有效“资源”-link(忽略无效的)
- 后端(我猜)使用第一个,发现它指向(显然)已删除的资源并将此测试也标记为已删除。这导致此测试停止
我们会调整逻辑。两者都将在前端开始失败,并将更改后端以使用相同的逻辑(修复将在 1 月的某个时间推出)。