我们正在升级FutureStack的注册,仅到4月30日。条款和条件适用。 现在注册

New Relic的PromQL实现如何支持99.5%的Top Grafana查询

8分钟阅读

作为一种服务,我们遥测数据平台允许您存储和分析指标、事件、日志和跟踪,无论它们来自New Relic代理或第三方来源,如普罗米修斯。传统上,New Relic的用户使用新遗迹查询语言(NRQL)。然而,当我们与用户讨论普罗米修斯时,我们了解到这一点PromQL支持将允许他们使用现有的Grafana仪表板,并使新用户无需学习NRQL就可以采用我们的平台。

Prometheus是监视来自无数基础设施和其他系统的指标的优秀工具,但它缺乏长期、持久和可靠的存储解决方案,这给它带来了挑战。这个挑战就是为什么我们支持普罗米修斯的远程写能力,给你能力发送你的普罗米修斯度量到遥测数据平台。

在我们建立普罗米修斯支持系统时,我们有幸与朱利叶斯中场他是普罗米修斯项目的联合创始人。而他最近的博客(PROMQL兼容供应商的兼容性)给了我们31%的兼容性分数,我们知道我们的PromQL实现支持99.5%的顶级Grafana仪表盘查询,我们相信它将支持你的大多数用例。这篇博文讨论了我们支持PromQL的方法,我们的实现什么时候和为什么不同于PromLabs的实现,最重要的是,New Relic如何支持你的PromQL需求。

构建以支持最常见的查询

在开发我们的PromQL解决方案时,我们优先支持客户使用最多的查询。由于Grafana作为探索和可视化Prometheus指标的工具的流行,我们确定了最常用的社区仪表板和构建它们的PromQL查询。这个超过600个PromQL查询的集合涵盖了前780万Grafana仪表盘下载。我们知道支持这些查询将覆盖我们客户的绝大多数用例。因此,当我们在2020年8月推出对PromQL的支持时,我们的PromQL引擎能够解析、翻译和正确执行99.5%的查询在上述的集合中。巧合的是,在取得这些成果的一天后,PromLabs的promql-compliance-tester是开源的工具。

对于New Relic 31%的分数,PromLabs的博客给出了一个重要的观点:“……仅仅是数字上的分数就描绘出了一幅有限的画面。它们不会告诉你执行错误的影响有多大,也不会告诉你有多少明显的行为差异。”实现差异并不一定会影响用户体验。更详细地说:如果我们的PromQL实现返回的结果是与PromLabs测试套件所期望的一样,结果将导致PromLabs的测试套件失败,尽管结果对于您的实际故障排除需求一样有用。

指标很重要,但可伸缩的长期存储也很重要

虽然Prometheus和Telemetry Data Platform有相似之处(支持特殊模式和不使用用户指定的索引的灵活查询),但它们遵循不同的设计原则,需要不同的权衡。查询语言、查询执行模型、数据模型和存储格式通常通过设计约束内在地联系在一起。

PromLabs遵从性测试强调了一个微妙但基本的点:对PromQL的支持与Prometheus数据模型和Prometheus存储实现紧密耦合。由于不同的战略目标,我们选择了与PromLabs不同的设计权衡;值得注意的是,我们专注于:

  1. 遥测数据类型:遥测数据平台支持度量、事件、日志和跟踪,而Prometheus只支持度量。
  2. 存储系统:遥测数据平台提供可扩展且经济有效的长期存储,而Prometheus则没有。
  3. 计算增量:遥测数据平台计算的增量摄取的时间而不是在查询时间,在更大的数据集上提供更快的结果。这种方法的另一个优点是,它避免了在查询时某些函数出现不希望的结果(见下面)。

严格遵守PromQL协议的结果是迫使供应商做出上面列举的相同的权衡,需要一个支持确切数据模型的存储接口。然而,匹配查询执行模型和存储接口限制了平台的灵活性做出不同的设计权衡,最终限制它为用户提供额外好处的能力。这样的权衡包括查询时绝对计数器和累积计数器的计算速率,这一直是问题的主题激烈的辩论在开源社区中。具体来说,rate()和increase函数计算不相交值对之间的增量,但在此过程中,它们会丢弃部分数据并推断其他数据,返回意外的结果。遥测数据平台没有这样的问题,因为它计算的增量在摄取的时间而不是查询时间,利用相关时间框架的每个数据点。

Prometheus特色A.基于模型它不提供分布式、可伸缩的存储。因此,普罗米修斯使用累积计数器,在类似速率的查询中计算查询时的增量,以提供度量分辨率的优雅降低,并避免在传递失败时数据丢失。考虑到Prometheus在单个节点上的单线程执行,这是一种适当的折衷。

相比之下,遥测数据平台使用推送的交付模型作为高可用性和可伸缩平台的一部分,具有多线程查询执行模型,跨多个节点。此外,遥测数据平台的数据模型针对Delta计数器进行了优化,以提供成本效益和可扩展的存储和更直观的速率操作的查询体验。

在其他地方,普罗米修斯和遥测数据平台之间的差异不那么明显。我们已经建立了一个指南将PromQL查询转换为NRQL,所以当Prometheus度量存储在Telemetry Data Platform时,您可以继续对它们提出相同类型的问题。

一个地方的所有遥测数据

除了普罗米修斯之外,遥测数据平台几乎可以从任何来源获取维度度量数据,这些数据可以被分析、可视化,并与事件、日志和轨迹相关联。这种灵活的无模式数据模型使您能够快速诊断和解决问题,无论系统还是应用程序。用于与遥测数据交互的语言是故障排除经验的重要组成部分——nrql提供了易于学习和熟悉的类似sql的语法。但是如果您只是想查询Prometheus度量,那么PromQL语法也可以工作。

即使你只关注普罗米修斯度量标准,组织也会与之斗争联邦Prometheus服务器,缺乏统一的存储来查询和分析系统性能。相比之下,Telemetry Data Platform允许访问位于一个地方的所有Prometheus服务器上的所有数据,无论Prometheus服务器是在分片配置中运行还是作为副本运行高可用性删除处理结果。此功能允许您对所有Prometheus实例的度量数据进行查询、可视化和警报。它也比联邦的普罗米修斯配置更容易维护。

质疑普罗米修斯在新遗迹一号和格拉瓦纳

遥测数据平台使您可以使用PromQL语法直接在New Relic One和Grafana中查询您的Prometheus指标。为了实现这一点,我们将您的PromQL查询转换为NRQL查询。

要显示数据,您有两个选项:

  1. 新遗迹一内:使用PromQL风格的模式或NRQL在图表生成器,以及仪表盘和自定义应用程序
  2. 在Grafana:将数据平台配置为Grafana的ProMetheus数据源

我们正在不断地改进我们对PromQL的支持,所以希望在未来能够支持更多的功能。如果有什么特定的东西,你想看到,联系你的帐户团队(付费帐户)或输入请求在New RelicExplorer的中心(免费)。如果你想了解更多我们支持的PromQL特性,请查看我们的文档,包括有关将PromQL翻译成NRQL