【问题标题】:Grafana + Prometheus - combined query filtering: uri != "/page" AND method != "PUT"Grafana + Prometheus - 组合查询过滤:uri != "/page" AND method != "PUT"
【发布时间】:2020-10-15 08:36:51
【问题描述】:

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

我们知道某些 url 和方法组合仅供后台使用,例如“PUT /page/draft”和“POST /page/publish”。但是前台也使用了几个端点,例如“GET /page/draft”。所以查询应该结合两个标签,比如

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

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

【问题讨论】:

  • 您可以访问prometheus.yml 并且可以更改它吗?我问的原因是添加一个标签来显示是否与前/后相关比使用 grafana 模板变量更干净
  • 是的,我有。我可以对那个文件做什么?我们有一个用于所有服务的集中式服务器,但我认为我可以在那里进行更改

标签: prometheus grafana promql


【解决方案1】:

因此,据我所知,如果不能直接在检测服务中进行标记,那么您有两个选择(也许有更好的选择,但我想不出任何选择)。

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


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

优点:

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

缺点:

  • 我认为 Prometheus 人的官方观点是,为此使用 relabel 配置是一种代码味道。当不同标签值组合的数量增加时,正则表达式也会增加。虽然这可能只是一个很长的(a|b|c) 声明。
  • 过去无法将此标签应用于系列数据。如果在 Grafana 中添加标签 now 并对其进行过滤,则不会显示 now 之前的所有数据。被过滤掉了。
  • 标签是硬编码的。如果您改变对“后台”系列定义的看法并且想要更改规则,则新规则将仅适用于现在以后的数据。同样,您无法更改历史记录。

怎么做:

metric_relabel_config(参见here)添加到 Prometheus 配置中的相应作业。基本思想是,您可以正则表达式匹配标签,并在匹配发生时添加具有特定值的新标签。

这是一个例子:

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 中运行时分离

待定

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 2021-03-20
    • 2019-10-15
    • 2020-02-25
    • 2022-01-24
    • 2019-05-06
    • 2021-10-12
    相关资源
    最近更新 更多