你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注释
Azure SRE 代理目前处于预览阶段。 通过使用 SRE 代理,你同意特定于产品的 预览版使用条款。
站点可靠性工程(SRE)侧重于通过自动化和主动管理创建可靠、可缩放的系统。 SRE 代理通过提供 AI 支持的监视、故障排除和修正功能,将这些原则引入云环境。 SRE 代理可自动执行日常作任务,并提供推理见解来帮助维护应用程序可靠性,同时减少手动干预。 作为聊天机器人提供,可以提出问题并提供自然语言命令来维护应用程序和服务。 为了确保准确性和控制,代表你执行的任何代理作都需要你的批准。
此示例应用通过以受控方式模拟 HTTP 500 故障来演示错误检测。 可以使用 Azure 应用服务 部署槽位安全地测试这些方案,这样就可以并行运行不同的应用配置。
通过将应用设置设置为 INJECT_ERROR
1
来启用错误模拟。 启用后,应用会在单击多个按钮后引发 HTTP 500 错误,使你可以看到 SRE 代理如何响应应用程序故障。
在本教程中,你将:
- 使用 Azure 门户创建应用服务应用。
- 从 GitHub 部署示例应用。
- 使用启动命令配置应用并启用日志记录。
- 创建部署槽来模拟故障。
- 设置 Azure SRE 代理以监视应用。
- 通过交换到故障槽位来触发失败。
- 使用 AI 驱动的聊天通过回滚交换来诊断和解决问题。
如果没有 Azure 帐户,请在开始前创建一个免费帐户。
先决条件
若要完成本教程,需要:
- 一个 Azure 订阅。
- 为 SRE 代理设置创建角色分配(基于角色的访问控制管理员或用户访问管理员)的
Microsoft.Authorization/roleAssignments/write
权限。
1.创建应用服务应用
首先创建 SRE 代理可以监视的 Web 应用。
在顶部搜索栏中,搜索 应用服务,然后从结果中选择它。
选择 “+ 创建 ”,然后选择 “Web 应用”。
配置“基本信息”选项卡
在 “基本信息 ”选项卡中,提供以下详细信息:
项目详细信息
设置 | 价值 |
---|---|
订阅 | 你的 Azure 订阅 |
资源组 | 创建新的 → my-app-service-group |
实例详细信息
设置 | 价值 |
---|---|
名称 | my-sre-app |
发布 | 代码 |
运行时堆栈 | .NET 9 (STS) |
操作系统 | Windows操作系统 |
区域 | 你附近的区域 |
选择“ 部署 ”选项卡。
在 “身份验证设置”下,启用 基本身份验证。
注释
基本身份验证随后将用于 GitHub 的一次性部署。 在生产环境中禁用基本身份验证。
选择“ 查看并创建”,然后在验证通过时 创建 。
部署完成后,会看到 部署已完成。
2.部署示例应用
创建应用服务应用后,请从 GitHub 部署示例应用程序。
在 Azure 门户中,通过选择“ 转到资源”导航到新创建的应用服务。
在左侧菜单中的 “部署 ”部分下,选择 “部署中心”。
在 “设置” 选项卡中,配置:
资产 | 价值 |
---|---|
来源 | 外部 Git |
资料库 | https://github.com/Azure-Samples/app-service-dotnet-agent-tutorial |
分支 | main |
- 选择 “保存” 以应用部署设置。
3.验证示例应用
部署后,确认示例应用按预期运行。
在应用服务的左侧菜单中,选择“ 概述”。
选择 “浏览 ”以在新浏览器选项卡中打开应用。(加载可能需要一分钟时间)。
该应用显示一个大型计数器和两个按钮:
选择“ 递增 ”按钮多次观察计数器增加情况。
4.为故障模拟设置部署槽
若要模拟应用故障方案,请添加辅助部署槽位。
在应用服务的左侧菜单中的部署部分下,选择部署槽。
选择 添加插槽。
输入以下值:
资产 价值 注解 名称 broken
错误场景在此槽位中触发。 克隆设置来源 my-sre-app
从主应用复制配置。 滚动到对话框窗口底部,然后选择“ 添加”。 槽位创建可能需要一分钟才能完成。
将示例应用部署到槽位
创建槽后,从列表中选择故障槽位。
在左侧菜单中的 “部署 ”部分下,选择 “部署中心”。
在 “设置” 选项卡中,配置:
资产 价值 来源 外部 Git 资料库 https://github.com/Azure-Samples/app-service-dotnet-agent-tutorial
分支 main
选择 “保存” 以应用部署设置。
添加应用设置以启用错误模拟
若要控制错误模拟,请在运行时配置应用设置检查。
在应用服务的左侧菜单中,选择“设置”部分下的环境变量。
在顶部,请确保选择了正确的槽位(例如“故障”)。
在 “应用设置 ”选项卡下,选择“ + 添加”。
输入以下值:
资产 价值 注解 名称 INJECT_ERROR
必须完全 INJECT_ERROR
(全大写,无空格)。价值 1
在应用中启用错误模拟。 确保未选中“部署槽位设置”框。
选择 “应用” 以添加设置。
在 “环境变量 ”页底部,选择“ 应用” 以应用更改。
出现提示时,选择“ 确认 ”以确认并重启所选槽中的应用。
5.创建 Azure SRE 代理
现在,创建一个 Azure SRE 代理来监视应用服务应用。
在 Azure 门户中,搜索并选择 Azure SRE 代理。
选择+ 新建。
在 “创建代理 ”窗口中,输入以下值:
资产 价值 注解 订阅 你的 Azure 订阅 资源组 my-sre-agent-group
Azure SRE 代理的新组 名称 my-sre-agent
区域 瑞典中部 在预览期间是必需的;可以监视任何 Azure 区域中的资源 选择角色 参与者 授予代理代表你执行操作的权限 选择“选择资源组”。
在 “要监视的所选资源组”窗口 中,搜索并选择
my-app-service-group
。选择“保存”。
返回“ 创建代理 ”窗口,选择“ 创建”。 代理创建过程需要几分钟才能完成。
6.与代理聊天
部署 SRE 代理并将其连接到资源组后,可以使用自然语言与其交互,以监视和排查应用问题。
在 Azure 门户中,搜索并选择 Azure SRE 代理。
从代理列表中选择 my-app-service-sre-agent。
选择 “与代理聊天”。
在聊天框中,输入以下命令:
List my App Service apps
代理响应并提供
my-app-service-group
资源组中已部署的应用服务应用列表。
现在代理可以看到你的应用,你已准备好模拟故障,并让代理帮助你解决它。
7. 中断应用
现在,通过切换到损坏的部署槽来模拟故障场景。
在应用服务中,转到左侧菜单中的 “部署 ”部分,然后选择 “部署槽位”。
选择“交换”。
在 “交换 ”对话框中,配置:
资产 价值 注解 来源 my-sre-app-broken
具有错误版本的槽位 目标 my-sre-app
生产槽 滚动到底部,然后选择“ 开始交换”。 交换作可能需要一分钟才能完成。
交换完成后,访问应用的 URL。
选择“递增”按钮六次。
应会看到应用失败并返回 HTTP 500 错误。
刷新页面(通过多次按 Command-R 或 F5)以生成额外的 HTTP 500 错误,这有助于 SRE 代理检测和诊断问题。
8.修复应用
应用遇到故障后,请使用 SRE 代理诊断并解决问题。
在 Azure 门户中,搜索并选择 Azure SRE 代理。
从代理列表中选择 my-app-service-sre-agent。
选择 “与代理聊天”。
在聊天框中,输入以下命令:
What's wrong with my-sre-app?
代理开始分析应用的运行状况。 应会看到与可用性、CPU 和内存使用情况以及最近的槽交换相关的诊断消息。
每个会话可能有所不同,但应看到类似于以下内容的消息:
“现在我将通过换回槽位对 my-sre-app 执行缓解措施,使应用程序恢复至正常状态。 请注意,换回槽位不一定能立即恢复正常状态。 我会不断更新进度。
暂停后,代理会提示你批准回滚:
执行槽位交换回滚以针对 my-sre-app 还原应用程序可用性
[批准][拒绝]
选择 “批准 ”以启动回滚。
回滚完成后,代理将确认:
my-sre-app 的槽位交换已成功完成(时间戳)。 已还原生产槽。 我现在将继续执行缓解后的步骤:
我将请你提供正确的 GitHub 仓库 URL,以便就交换相关的停机问题提交问题。我将监控应用程序,并在 5 分钟内提供可用性更新。
请提供您希望提交问题的 GitHub 存储库 URL。
9. 验证修复是否有效
SRE 代理回滚槽位交换后,确认应用正常运行。
通过从“概述”页中选择“浏览”,在浏览器中打开应用服务应用。
请注意,文本“启用错误注入”不再显示,确认应用已恢复到其原始状态。
选择“ 递增 ”按钮六次以确保不会发生任何错误。
清理资源
如果不再需要在本教程中创建的应用和代理,可以删除关联的资源组以避免产生费用。
针对这两个资源组重复以下步骤:
my-app-service-group
(应用服务资源组)my-sre-agent-group
(Azure SRE 代理资源组)
在 Azure 门户,导航到“资源组”。
选择要删除的资源组。
在“ 概述 ”选项卡中,选择“ 删除资源组”。
在确认对话框中,输入资源组的名称。
选择 删除。 删除需要几分钟才能完成。