Azure Monitor 和 Prometheus
Prometheus 是一种常用的开源监视和警报解决方案,在云原生生态系统中得到广泛使用。 Prometheus 用于监视基础结构和工作负荷的性能并对其发出警报,常用在 Kubernetes 环境中。
使用 Prometheus 作为 Azure 托管服务或作为自托管服务来收集指标。 可以从 Azure Kubernetes 服务 (AKS) 群集、已启用 Azure Arc 的 Kubernetes 群集、虚拟机和虚拟机规模集收集 Prometheus 指标。
Prometheus 指标存储在 Azure Monitor 工作区中,你可以在其中使用带 PromQL 的指标资源管理器和 Azure 托管 Grafana 分析和可视化数据。
重要
Azure Monitor 托管 Prometheus 用于存储有关客户计算机和应用程序服务运行状况的信息。 它不用于存储任何分类为个人身份信息 (PII) 或最终用户身份信息 (EUII) 的数据。 强烈建议不要将任何敏感信息(用户名、信用卡号等)发送到 Azure Monitor 托管 Prometheus 字段(例如指标名称、标签名称或标签值)。
适用于 Prometheus 的 Azure Monitor 托管服务
适用于 Prometheus 的 Azure Monitor 托管服务是 Azure Monitor 指标的一个组件,它为运行 Prometheus 提供完全托管的且可缩放的环境。 它简化了 Azure Kubernetes 服务中的 Prometheus 的部署、管理和缩放,使你能够专注于监视应用程序和基础结构。
作为一项完全托管的服务,适用于 Prometheus 的 Azure Monitor 托管服务可自动在 AKS 或已启用 ARC 的 Kubernetes 中部署 Prometheus。 该服务提供高可用性、SLA 保证和软件自动更新。 该服务提供了高度可缩放的指标存储,数据保留期限长达 18 个月。
适用于 Prometheus 的 Azure Monitor 托管服务提供预配置的警报、规则和仪表板。 借助 Prometheus 社区推荐的仪表板和本机 Grafana 集成,你可以立即实现全面监视。 与 Azure 托管 Grafana 本机集成,也可与自托管 Grafana 配合使用。
定价基于引入和查询,无需额外的存储成本。 有关详细信息,请参阅 Azure Monitor 定价中的“指标”选项卡。
启用适用于 Prometheus 的 Azure Monitor 托管服务
适用于 Prometheus 的 Azure Monitor 托管服务从 Azure Kubernetes 服务收集数据:
- Azure Kubernetes 服务 (AKS)
- 已启用 Azure Arc 的 Kubernetes
若要启用适用于 Prometheus 的 Azure Monitor 托管服务,必须创建一个 Azure Monitor 工作区来存储指标。 创建工作区后,可以加入收集 Prometheus 指标的服务。
- 若要从 Kubernetes 群集收集 Prometheus 指标,请参阅启用对 Kubernetes 群集的监视。
- 若要配置远程写入以从自托管 Prometheus 服务器收集数据,请参阅适用于 Prometheus 的 Azure Monitor 托管服务的远程写入。
Azure 托管的自托管 Prometheus
除了适用于 Prometheus 的托管服务之外,你还可以安装和管理自己的 Prometheus 实例,并使用远程写入将指标存储在 Azure Monitor 工作区中。
使用远程写入,可以从在以下环境中运行的自托管 Prometheus 服务器收集数据:
- Azure 虚拟机
- Azure 虚拟机规模集
- 已启用 Arc 的服务器
- 自托管的 Azure 托管型或已启用 arc 的 Kubernetes 群集。
自托管 Kubernetes 服务
从 Kubernetes 群集上的自管理 Prometheus 发送指标。 若要详细了解对 Kubernetes 服务的 Azure Monitor 工作区进行的远程写入,请参阅以下文章:
- 使用托管标识身份验证将 Prometheus 数据从 AKS 发送到 Azure Monitor
- 使用 Microsoft Entra ID 身份验证将 Prometheus 数据从 AKS 发送到 Azure Monitor
- 使用 Microsoft Entra ID Pod 托管标识(预览版)身份验证将 Prometheus 数据发送到 Azure Monitor
- 使用 Microsoft Entra ID 工作负载 ID(预览版)身份验证将 Prometheus 数据发送到 Azure Monitor
虚拟机和虚拟机规模集
从虚拟机和虚拟机规模集上的自管理 Prometheus 发送数据。 虚拟机可以位于 Azure 托管的环境中,也可位于本地。 有关详细信息,请参阅将 Prometheus 指标从虚拟机发送到 Azure Monitor 工作区。
数据存储
Prometheus 指标存储在 Azure Monitor 工作区中。 数据存储在时序数据库中,可以通过 Prometheus 查询语言 (PromQL) 进行查询。 可以在单个 Azure Monitor 工作区中存储来自多个 Prometheus 数据源的数据。 有关详细信息,请参阅 Azure Monitor 工作区概述。
数据在 Azure Monitor 工作区中保留 18 个月。
查询和分析 Prometheus 指标
Prometheus 数据使用 Prometheus 查询语言 (PromQL) 检索。 你可以编写自己的查询,使用来自开源社区的查询,使用包含 PromQL 查询的 Grafana 仪表板。 请参阅 Prometheus 项目。
以下 Azure 服务支持从 Azure Monitor 工作区查询 Prometheus 指标:
使用 PromQL 的 Azure Monitor 指标资源管理器
借助使用 PromQL 的指标资源管理器,你可以分析和可视化平台和 Prometheus 指标。 指标资源管理器支持适用于 Prometheus 的 PromQL 指标。 可以从存储 Prometheus 指标的 Azure Monitor 工作区的“指标”菜单项中找到使用 PromQL 的指标资源管理器(预览版)。 有关详细信息,请参阅使用 PromQL 的指标资源管理器。
Azure 工作簿
使用 Azure 工作簿和 PromQL 查询创建由适用于 Prometheus 的 Azure Monitor 托管服务提供支持的图表和仪表板。 有关详细信息,请参阅使用 Azure 工作簿查询 Prometheus 指标
Grafana 集成
使用 Azure 托管 Grafana 可视化 Prometheus 指标。 将 Azure Monitor 工作区连接到 Grafana 工作区,使其可用作 Grafana 仪表板中的数据源。 然后,可访问使用 Prometheus 指标的多个预生成的仪表板,并且能够创建任意数量的自定义仪表板。 有关详细信息,请参阅将 Grafana 工作区链接到 Azure Monitor 工作区
Prometheus 查询 API
通过 REST API 使用 PromQL 来查询存储在 Azure Monitor 工作区中的 Prometheus 指标。 有关详细信息,请参阅 Prometheus 查询 API。
规则和警报
Prometheus 支持使用 PromQL 查询记录规则和预警规则。 规则和警报会自动部署到适用于 Prometheus 的 Azure Monitor 托管服务。 记录规则记录的指标存储在 Azure Monitor 工作区中,可以通过仪表板或其他规则进行查询。 对于 AKS 群集,提供了一组记录规则以便轻松快速启动。
警报规则触发的警报可以触发操作或通知,如为警报规则配置的操作组中所定义。 还可在 Azure 门户中查看已触发和已解决的 Prometheus 警报以及其他警报类型。
服务限制和配额
适用于 Prometheus 的 Azure Monitor 托管服务具有用于引入的默认限制和配额。 达到引入限制时,可能会发生限制。 可以请求增加这些限制。 有关 Prometheus 指标限制的信息,请参阅Azure Monitor 服务限制。
若要监视引入指标并针对其发出警报,请参阅监视 Azure Monitor 工作区指标引入。
限制/已知问题 - Azure Monitor 适用于 Prometheus 的托管服务
- 抓取和存储指标的最低频率为 1 秒。
- 在节点更新期间,在群集级别收集器的某些指标集合中,可能会遇到持续 1 到 2 分钟的间隙。 此间隙是由于 Azure Kubernetes 服务更新群集中的节点的定期操作。 此行为是预期行为,它的发生是由于它基于的节点正在更新。 推荐的预警规则不受此行为的影响。
- 不会自动启用适用于 Windows 节点的托管 Prometheus。 若要启用对群集中的 Windows 节点和 Pod 的监视,请参阅监视群集中的 Windows 节点和 Pod。
事例敏感性
Azure 托管的 Prometheus 是一个不区分大小写的系统。 如果字符串(例如指标名称、标签名称或标签值)与另一个时序的区别仅在于字符串的大小写,则它会将这些字符串视为相同的时序。
注意
此行为不同于本机开放源代码 Prometheus,因为后者是区分大小写的系统。
在 Azure VM、VMSS 或 Azure Kubernetes 服务 (AKS) 群集中运行的自托管 Prometheus 实例是区分大小写的系统。
在 Azure 托管的 Prometheus 中,以下时序被视为相同:
diskSize(cluster="chinanorth3", node="node1", filesystem="usr_mnt")
diskSize(cluster="chinanorth3", node="node1", filesystem="usr_MNT")
上述示例是时序数据库中的单个时序。
- 针对它们引入的任何样本都会像针对单个时序抓取/引入它们一样存储。
- 如果前述示例采用相同的时间戳引入,则会随机删除其中一个示例。
- 存储在时序数据库中并通过查询返回的大小写是不可预测的。 对于同一个时序,可能在不同的时间会返回不同的大小写。
- 通过进行不区分大小写的比较,可从时序数据库中检索查询中存在的任何指标名称或标签名称/值匹配器。 如果查询中存在区分大小写的匹配器,则进行字符串比较时,会将其视为不区分大小写的匹配器。
最佳做法是确保使用单个一致事例生成或抓取时序。
在开放源代码 Prometheus 中,上述时序被视为两个不同的时序。 针对它们抓取/引入的任何样本将单独存储。
Prometheus 参考
以下是 Prometheus 文档的链接。