Grafana + Prometheus-组合查询过滤:uri!=“” / page“ AND方法!=”“ PUT”

时间:2020-10-15 08:36:51

标签: prometheus grafana promql

我们的服务同时接收前台(网站)和后台电话。我想在grafana面板中的指标中分开这些调用。

我们知道某些网址和方法组合仅由后台使用,例如“ PUT / page / draft”和“ POST / page / publish”。但是,前台也使用了多个端点,例如“ GET / page / draft”。因此查询应结合两个标记,例如

http_server_requests({uri="/page/draft", method="PUT"}) OR ...

如何使用类型为query(或其他任何类型)的变量来过滤它们,以便在图形中可以使用http_server_requests({"$backoffice_requests"})http_server_requests({"$non_backoffice_requests"})绘制两个图形?

1 个答案:

答案 0 :(得分:0)

因此,从我看来,您有两个选择(也许有更好的选择,但我想不到)。如果不是直接在已检测服务中进行标记,则可以选择。

修改Prometheus配置,以添加一个标签,该标签基于其他标签的值来标识“前”和“后”等环境,或者在“查询时”使用Grafana模板变量和PromQL进行操作。两者都有缺点。


选项1:在抓取时间添加标签

优势:

  • 不需要更改客户端。您可能使用了一个用于检测API的小型库,但它不支持我认为的类似内容。
  • 不需要在运行时整体使用label_replace或regex选择器来做任何事情,也不需要使用Grafana特有的东西。
  • 易于实施且易于使用。
  • 您可以在任何地方使用的另一个标签,而不仅仅是Grafana。意味着记录规则,警报和Prometheus Web UI。

缺点:

  • 我认为Prometheus员工的官方立场是为此使用relabel config是一种代码味道。当不同标签值组合的数量增加时,正则表达式也会增加。尽管这可能只是很长的(a|b|c)语句。
  • 过去无法将此标签应用于系列数据。如果添加标签 now 并在Grafana中对其进行过滤,则不会显示 now 之前的所有数据。过滤掉。
  • 标签是硬编码的。如果您对定义“后勤办公室”系列的定义有意见,并且想要更改规则,则新规则将仅应用于 now 之后的数据。同样,您无法更改历史记录。

操作方法:

向Prometheus配置中的各个作业添加metric_relabel_config(请参阅here)。基本思想是可以对匹配标签进行正则表达式,如果发生匹配,则可以添加具有特定值的新标签。

这里是一个例子:

scrape_configs: 
  - job_name: 'ecs'
    file_sd_configs:
      - files:
          - /discovery/tasks.json
    metric_relabel_configs:

      - action: replace
        source_labels: [__name__]
        target_label: scope
        replacement: unknown

      - action: replace
        source_labels: [uri, method]
        target_label: scope
        separator: ';'
        regex: '(PUT;\/page\/draft|POST\/whatever|and;so_on)'
        replacement: backoffice

      - action: replace
        source_labels: [uri, method]
        target_label: scope
        separator: ';'
        regex: '(GET;\/pagedraft)'
        replacement: backoffice

这是首先将具有默认值scope的标签unknown添加到所有系列,然后继续根据其他标签的值来更改标签。


选项2:在运行时在Grafana中分离

tba