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