云环境监控工具与实践指南
在当今的云环境中,有效的监控是保障系统稳定运行和业务成功的关键。本文将介绍几种重要的监控工具和技术,包括 Kusto 查询语言、Azure 资源图、Application Insights 以及 Azure 监控警报等,并通过一个演示案例展示如何跟踪服务水平指标(SLI)、服务水平目标(SLO)和服务水平协议(SLA)。
1. Kusto 查询语言(KQL)
Kusto 查询语言(KQL)是一种功能丰富的查询语言,旨在易于阅读和编写。它主要用于分析工作区中收集的数据,最初是为 Azure 数据资源管理器创建的,现在已扩展到 Azure 监控等其他产品。
- 学习资源
- 对于有 SQL 和 Splunk 经验的用户,可以参考以下文档了解语言差异:
- 提供了大量免费的文档和教程,可通过以下链接获取更多学习资源:
- 如果需要练习 KQL 并缺少演示数据,可以使用 演示工作区 。
2. Azure 资源图
Azure 资源图是一项用于管理 Azure 云环境的服务,它提供了由 Kusto 查询(KQL)驱动的查询体验。通过该服务,你可以跨订阅探索资源及其属性,甚至可以查询过去 14 天内更改的资源属性。
3. Application Insights
Application Insights 是 Azure 监控生态系统提供的用于应用程序性能管理(APM)的工具,它可以帮助你理解复杂应用程序架构的各个部分。
-
数据收集选项
- 自动检测(无代码) :开发人员只需启用自动遥测收集,即可轻松对应用程序进行检测。它可以收集应用程序的指标、请求或依赖项调用。许多环境和语言都支持此选项,甚至本地应用程序也可以使用 Application Insights 代理进行检测。 支持的环境、语言和资源提供程序列表 。不过,只有在无法使用 SDK 时才推荐使用此选项。
- SDK :Application Insights 为多种编程语言(如 .NET、Java、Node.js、Python 和 JavaScript)提供了 SDK。使用 SDK 可以完全自定义收集的遥测数据、收集方式以及如何将数据发送到云端的 Application Insights 实例。几乎任何使用支持语言编写且与 Azure 有连接的应用程序,无论前端、中间件还是后端,都可以进行监控。
- OpenTelemetry(新,仍在开发中) :基于开源遥测项目 OpenTelemetry 收集遥测数据(指标、日志和跟踪)。使用 OpenTelemetry 供应商中立的检测 SDK 时,Application Insights 可以用作数据存储。目前,它仅支持分布式跟踪,指标和日志仍在开发中。 未来更新信息 。
-
身份验证和连接选项
- 检测密钥 :Application Insights 实例的标识符。以前的 SDK 允许仅使用检测密钥进行数据摄入,但建议迁移到其他选项,因为检测密钥支持将于 2025 年结束。 迁移说明
- 连接字符串 :定义遥测数据的发送位置。连接字符串可以针对代理重定向进行自定义。建议将连接字符串作为环境变量(或 Azure 应用配置),名称为
APPLICATIONINSIGHTS_CONNECTION_STRING。 连接字符串说明 - 基于 Azure AD 的身份验证(预览,推荐) :仅允许使用 Azure AD 进行身份验证的遥测数据。可以禁用本地身份验证,确保只有 Azure AD 身份(如托管标识或服务主体)可以摄入遥测数据。 详细信息
-
主要功能
- 应用程序地图 :快速展示应用程序及其组件,帮助检测故障和瓶颈。组件主要是应用程序对外部解决方案(如 API、SQL 数据库、Cosmos DB 等)的调用。点击外部组件可查看常见错误,智能视图(预览)选项应用机器学习技术,根据过去的性能帮助识别可能的问题。 应用程序地图智能视图
- 智能检测 :通过机器学习学习应用程序的过去行为,检测异常并发出警报,如响应缓慢或服务降级。它有自己的警报系统,现在可以迁移到 Azure 警报以集中管理警报。 智能检测迁移
- 实时指标流 :使用不同的端点(https://live.applicationinsights.azure.com),与数据摄入功能(https://dc.applicationinsights.azure.com)不同。数据仅在面板打开时发送,显示后即丢弃。而指标资源管理器和日志分析会持续收集数据,聚合并保留 90 天(默认)至 2 年。
- 事务搜索 :用于搜索事务相关信息。
- 可用性测试 :提供多种可用性测试选项:
- URL ping 测试 :简单的端点验证测试。
- 标准测试(预览) :新一代 URL ping 测试,提供更多自定义选项。
- 多步骤 Web 测试(已弃用) :不推荐使用,需要使用 Visual Studio Enterprise 2019 创建,后续版本不再支持。
- 使用 TrackAvailability 进行自定义测试 :使用 Application Insights SDK 从任何应用程序运行自定义测试并发送结果。可以使用 Azure 函数运行测试。 Azure 函数可用性测试
- 故障/性能分析 :故障和性能选项卡按服务器/浏览器视图显示最新信息。性能选项中可以启用探查器,识别执行较慢的“热点”代码路径;故障选项中有快照调试器,在异常发生时自动收集调试快照。
- 故障排除指南 :基于 Azure 工作簿,开发人员可以使用它分析现有环境并记录已知问题的可能缓解措施。
- 使用情况(用户行为) :提供工具帮助理解用户如何使用解决方案。为获得最佳体验,应同时跟踪服务器端和客户端代码。提供多种视图分析用户行为,如用户/会话页面、保留页面、事件页面、漏斗页面等。
2. 自定义 Application Insights 使用 SDK
使用 Application Insights SDK 可以充分发挥该工具的潜力,实现行为定制和自定义遥测选项。
- Application Insights API
即使 Application Insights 默认可以收集大量遥测数据,但使用 SDK 对于收集应用程序逻辑数据至关重要。例如,默认情况下它可以检测许多 HTTP 请求或依赖项调用,但不知道应用程序是电子商务网站还是银行系统。可以使用以下参考中的 API 决定收集的遥测数据: API 摘要 。
// Set up some properties and metrics:
var properties = new Dictionary <string, string>
{{"game", currentGame.Name}, {"difficulty", currentGame.Difficulty}};
var metrics = new Dictionary <string, double>
{{"Score", currentGame.Score}, {"Opponents", currentGame.OpponentCount}};
// Send the event:
telemetry.TrackEvent("WinGame", properties, metrics);
- 高级配置
- 服务启用/禁用 :每种语言的 SDK 都提供选项在代码中修改启用或禁用的服务,也可以通过删除负责自动遥测收集的模块来完全删除服务。
- 采样 :默认启用自适应采样,也支持固定速率采样。 自适应采样配置
- 遥测初始化器 :用于丰富遥测属性,例如可以为每个遥测项包含应用程序版本。
- 角色名称/角色实例 :通常在遥测初始化器中定义,用于在使用应用程序地图时识别运行实例。
- 遥测处理器 :遥测数据创建后,可以通过多个处理器进行修改和过滤,然后再发送到 Application Insights 资源。
- 日志跟踪 :对于使用诊断跟踪日志的 ASP.NET 解决方案(如 ILogger、NLog、log4net 和 System.Diagnostics.Trace),可以在 Application Insights 中收集这些跟踪。
3. Azure 监控警报
大多数监控工具采用“被动”方法,即问题发生后进行修复。而警报应采用“主动”方法,在用户注意到问题之前发出通知。
-
警报信号
- 由日志分析和 Application Insights 收集的日志、指标、跟踪,以及 Application Insights 提供的智能检测或可用性测试。
- 平台指标(默认提供 93 天)
- 活动日志警报
-
警报处理规则
当规则满足时,可以通过抑制警报(如在维护窗口期间)或根据过滤器自动分配操作组来修改预期行为,有助于组织内的警报管理。 -
操作组
警报触发(并经过处理规则评估)后,触发自动化或通知:- 通知 :电子邮件、推送通知
- 自动化 :运行手册、逻辑应用、函数、Webhook、ITSM 集成或事件中心
-
用户响应状态
用户可以将警报状态定义为“新”、“已确认”或“已关闭”。
定义警报时应确保其“可操作”,避免为成功操作/状态创建警报,只关注可能影响服务水平目标的异常情况。随着组织在这方面的实践逐渐成熟,可以过滤噪声(不可操作的警报)并触发自动化来自动修复警报引发的问题。
4. [演示] 使用 Application Insights 和 Log Analytics 跟踪 SLI/SLO/SLA
通过一个 .NET 6 网站的演示案例,展示如何使用 Application Insights 跟踪 SLI、SLO 和 SLA。
-
设置 Application Insights
- 使用遥测初始化器( MyTelemetryInitializer.cs )在每个遥测中包含应用程序版本和角色名称属性。
- 在 Program.cs 中使用从 Azure 应用配置资源获取的连接字符串连接 Application Insights 实例。
-
定义 SLI、SLO、SLA 和错误预算
- SLI :过去 31 天内对天气预测功能的请求,且用户获得成功响应。
- SLO :这些请求的 98% 应在过去 31 天内成功。
- SLA :95%,合同协议通常低于 SLO,以便在出现问题时有一定的缓冲。
- 总错误预算 :每月调用的 2%。
通过以上介绍的工具和技术,可以构建全面的云环境监控解决方案,确保系统的稳定性和性能,满足业务需求。在实际应用中,应根据具体情况选择合适的工具和配置,并不断优化监控策略,以适应不断变化的环境。
云环境监控工具与实践指南
5. 监控工具的操作流程总结
为了更清晰地展示如何使用上述监控工具,下面总结了一个基本的操作流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([开始]):::startend --> B(选择监控工具):::process
B --> C{选择数据收集方式}:::decision
C -->|自动检测| D(配置自动遥测收集):::process
C -->|SDK| E(集成对应语言的 SDK):::process
C -->|OpenTelemetry| F(配置 OpenTelemetry 并连接到 Application Insights):::process
D --> G(配置身份验证和连接):::process
E --> G
F --> G
G --> H(使用工具功能进行监控):::process
H --> I{是否需要设置警报}:::decision
I -->|是| J(定义警报信号和规则):::process
I -->|否| K(持续监控和分析):::process
J --> L(配置警报处理规则和操作组):::process
L --> K
K --> M(根据监控结果优化系统):::process
M --> N([结束]):::startend
6. 监控工具对比
为了帮助大家更好地选择适合自己的监控工具,下面对 Kusto 查询语言、Azure 资源图、Application Insights 和 Azure 监控警报进行对比:
| 工具名称 | 主要用途 | 数据来源 | 特点 |
| ---- | ---- | ---- | ---- |
| Kusto 查询语言(KQL) | 分析工作区中收集的数据 | 工作区、Azure 数据资源管理器等 | 易于阅读和编写,可扩展到多个产品 |
| Azure 资源图 | 管理 Azure 云环境,跨订阅探索资源及其属性 | Azure 云资源 | 由 KQL 驱动,可查询资源属性变化 |
| Application Insights | 应用程序性能管理(APM) | 应用程序的遥测数据 | 提供多种数据收集方式,功能丰富 |
| Azure 监控警报 | 主动通知异常情况 | 日志、指标、跟踪等 | 可自定义警报规则和处理方式 |
7. 常见问题及解决方案
在使用这些监控工具的过程中,可能会遇到一些常见问题,下面为大家提供相应的解决方案:
- Kusto 查询语言(KQL)
- 问题 :查询结果不准确。
- 解决方案 :检查查询语句是否正确,确保数据来源和表结构符合预期。可以参考 SQL 到 Kusto 和 Splunk 到 Kusto 的文档,对比不同语言的差异。
- Application Insights
- 问题 :数据收集不完整。
- 解决方案 :检查数据收集方式的配置是否正确。如果使用自动检测,确保支持的环境、语言和资源提供程序列表无误;如果使用 SDK,检查代码中是否正确集成和配置了 SDK。
- 问题 :身份验证失败。
- 解决方案 :检查使用的身份验证方式(检测密钥、连接字符串、Azure AD 身份验证)是否正确配置。例如,确保连接字符串作为环境变量(或 Azure 应用配置)的名称为 APPLICATIONINSIGHTS_CONNECTION_STRING 。
- Azure 监控警报
- 问题 :警报频繁触发,产生大量噪声。
- 解决方案 :优化警报规则,避免为成功操作/状态创建警报。可以使用警报处理规则过滤噪声,只关注可能影响服务水平目标的异常情况。
8. 总结与建议
通过本文的介绍,我们了解了 Kusto 查询语言、Azure 资源图、Application Insights 和 Azure 监控警报等重要的云环境监控工具和技术。在实际应用中,建议按照以下步骤进行:
1. 根据业务需求和系统架构选择合适的监控工具。
2. 合理配置数据收集方式,优先考虑使用 SDK 以获得更全面和自定义的监控数据。
3. 正确设置身份验证和连接方式,确保数据的安全传输。
4. 利用工具的各种功能进行全面监控,如应用程序地图、智能检测、实时指标流等。
5. 定义可操作的警报规则,避免产生过多噪声,并根据实际情况优化警报处理规则和操作组。
6. 持续监控和分析数据,根据监控结果及时优化系统,确保系统的稳定性和性能。
希望本文能够帮助大家构建更有效的云环境监控解决方案,提升系统的可靠性和业务的成功率。在实践过程中,不断积累经验,根据实际情况灵活调整监控策略,以适应不断变化的云环境。
超级会员免费看
1129

被折叠的 条评论
为什么被折叠?



