博客/工程

Grafana 9的新功能:Prometheus查询构建器使编写PromQL查询更容易

2022年7月18日9分钟

Grafana开始2014年,它的主要目标是为Graphite提供一个出色的仪表盘解决方案。大约在同一时间,普罗米修斯项目开始获得动力,但不清楚是否应该把它添加到Grafana。毕竟,Grafana是石墨的前身,在当时,普罗米修斯是否会流行起来是不确定的,而且它会占用资源,偏离创建Grafana的核心目的。

快进到今天,我们现在知道把普罗米修斯纳入其中是一个关键的决定Grafana因为它已经成为度量的行业标准和Grafana及其用户使用最多的数据源。但直到最近,在Grafana中与普罗米修斯交互的唯一方法是使用文本输入。是的,我们添加了许多不错的特性来改善用户体验——语法高亮显示、自动完成和度量浏览器。但主要的操作方式是编写PromQL代码对很多人来说,这不是最直接的语言。这与我们提供代码输入和可视化查询构建器的Graphite或SQL数据源形成鲜明对比,后者允许用户在不知道确切语法的情况下创建查询。

然而,终于随着Grafana 9GrafanaCONline 2022Prometheus查询构建器的引入。

就像我们在Grafana实验室发布的许多很棒的特性一样,Prometheus查询构建器最初是作为一个bob电竞频道bob电竞频道Grafana实验室黑客马拉松项目,它为Prometheus查询构建器构建了基础。在一个令人惊叹的演示之后,Grafana实验室的每个人都立刻爱上了它,在Probob电竞频道metheus查询构建器为Grafana 9准备好生产前又花了6个月的时间。这是一个很好的例子,说明了Grafana实验室的创新可以由任何人启动,也说明了我们不会让好bob电竞频道的想法在Git分支上枯萎。让我们看看Prometheus查询构建器是如何实际工作的。

Grafana Prometheus查询构建器如何帮助编写查询

公制和标签过滤器

与Prometheus查询的常见实践一样,我们从选择度量和标签过滤器开始。您可以从下拉列表中选择所需的指标,该下拉列表中动态填充了来自Prometheus实例的现有指标。在任何时候,您都可以通过将鼠标停留在指标名称上来访问指标的帮助文本。

要选择一个标签,只需单击标签选择器.标签选择器包含搜索功能,因此您还可以键入正在查找的标签,并且可以从Prometheus动态检索这些标签。同样也适用于指标。选择标签后,可以继续查看值。在值下拉,您将只看到所选标签的可用值。如果希望选择多个值,可以将完全相等操作符(=)更改为正则表达式匹配(=~)。另一方面,如果您想省略某些值,可以使用not equal(!=)或regex does not match(!~)标签匹配操作符。

要添加更多的标签-值组合,可以使用+按钮

操作

选择指标和标签已经构建了有效的Prometheus查询,但是还可以使用操作创建更复杂的查询。

使用+操作按钮添加操作

Prometheus查询构建器支持所有功能而且运营商的PromQL调用它们操作。要选择其中的任何一个(或全部),可以单击+操作或者浏览不同的操作类别,或者使用搜索来查找您想要使用的操作。

注意:Prometheus查询构建器支持简单的二进制操作,如倍数或除以标量。甚至可以对嵌套查询表达式进行二进制操作。

每个可用的操作都有一个用例和查询语法的工具提示。只需点击信息按钮在操作名称旁边。

此外,如果单击操作名称旁边的箭头,就会得到同一类别中可供选择的可选操作列表。

使用查询模式添加操作

不是每个人都知道所有的Prometheus函数以及如何使用它们(包括我自己!),在这种情况下,查询模式将是新的查询编辑器中非常有用的特性。查询模式提供了一组有用的操作模式,可用于向查询快速添加多个操作,以实现特定的目标。当您知道您想要实现什么,但不确定哪些操作将使您达到目标时,这可能是有用的。要选择图案,只需单击查询模式按钮看看可能的选择。它包括常用的模式,你可能会使用普罗米修斯。

如果您找到了想要使用的模式,请单击它。为了演示使用查询模式构建查询有多快,让我们来创建一个查询以获得度量的95%。虽然这可能不是最复杂的查询,但使用查询模式可以更快地完成此操作。

在此过程中,您可以使用操作工具提示来了解关于每个操作的更多信息。或者使用备选操作列表更新所需的操作。

Prometheus查询构建器如何帮助理解查询

Prometheus查询构建器以两种不同的方式帮助理解查询。

原始PromQL的一个缺点是函数是嵌套的,这意味着您从内到外读取查询,函数的参数可能远离函数名。在Grafana中的Prometheus查询构建器中,我们在管道中从左向右布局操作,这意味着它可以更自然地读取,参数就在操作名称旁边。

其次,它为参数提供了名称,这使它更容易理解其含义,也有助于理解操作的含义。

虽然每个操作的工具提示确实有助于理解查询,但它只提供关于特定操作的信息。要从整体上了解查询的更多信息,还有解释模式,其中逐步说明了所有查询部分和操作。这将帮助您了解您的查询,或者您不熟悉的队友的查询。

在代码、构建器和解释模式之间随时切换

Grafana 9出色的用户体验之一是,您可以随时在Code、Builder和Explain模式之间切换,同时保持查询的完整性。因此,如果您陷入Code模式,不确定如何完成或扩展查询,只需切换到Builder并添加您需要的操作,或者如果您对原始PromQL更有信心,可以返回到Code。

Prometheus查询构建器背后的技术设计

如果您对底层内容不感兴趣,可以跳过这一节,直接使用Grafana 9享受新的体验。开始学习Grafana最简单的方法是Grafana云,它为每个用例提供了慷慨的免费层和计划。(注册一个免费帐户今天!)

但如果你很好奇,就往下读吧!或者如果你很好奇,但想自己探索,你可以去GitHub和直接进入代码

起初,这是一个为Prometheus构建可视化编辑器的项目,但很明显,这种选择器+操作的模式适用于更多的数据源。Grafana洛基这是一个明显的例子吗LogQLLoki中的查询语言,一开始的设计目标是尽可能接近PromQL。但其他数据源也有类似的模式。

所以其中一个目标是在其他工具中轻松地重新利用这个功能,你可以在代码.所有操作都是用通用对象定义的,该对象没有绑定到特定的数据源或查询语言。该模型的主要部分是参数和一个渲染器函数,该函数定义该操作如何转换为查询的实际文本。这允许我们为Loki定义不同的操作来覆盖LogQL,我们(几乎)就完成了。

对我们来说,另一个重要的部分是我们不希望Builder模式感觉像是一个完全独立的体验。我们希望所有模式——code、Builder和Explain——都能简单地显示同一查询的不同视图。所以我们需要在Code和Builder模式之间进行双向同步(我没有提到Explain模式,因为您不能在那里编辑查询)。为了实现这一点,我们使用PromQL(或LogQL)解析器,首先获取查询的AST,然后遍历它并转换它到我们自己用于查询生成器的数据结构中。因此,在一个方向上,我们有解析和转换,而在另一个方向上,我们有可视化查询模型的对象将它们呈现为文本查询

帮助我们改进Prometheus查询构建器

我们坚信这只是Prometheus查询构建器的开始。我们的目标是确保所有Prometheus用户在Grafana中处理查询时都有最好的体验。如果您对如何使Prometheus查询构建器更适合您有任何想法、想法或反馈,请在GitHub的讨论,或者你可以加入我们的bob电竞频道Grafana实验室社区Slack

另外,如果你想全职从事Prometheus查询构建器和Grafana中的其他出色特性的工作,我们正在招聘

如果您有兴趣观看Prometheus和Grafana Loki查询生成器的工作,请加入我们Grafana社区呼吁在7月21日16:00 UTC,在此期间格拉弗娜的观察小组将引导讨论这些查询构建器和其他特性。最后但并非最不重要的是,如果您想参与关于Prometheus查询构建器的用户研究,您可以这样做联系我们的团队

为了演示所有的Grafana 9的最新功能,包括Grafana Loki查询生成器,新的命令面板、增强搜索和导航功能,并得到改善基于角色的访问控制(RBAC)功能,看“深入Grafana 9”会议来自GrafanaCONline 2022。

Grafana云是开始使用度量、日志、跟踪和仪表板的最简单方法。我们对每个用例都有一个慷慨的免费永久层bob体育手机二维码和计划。现在就免费注册