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



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

我们知道某些url和方法组合只由后台使用,比如";PUT/页面/草稿";以及";POST/页面/发布";。但是有几个端点也被前台使用,比如";获取/页面/草稿";。所以查询应该组合两个标签,比如

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

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

因此,从我所看到的情况来看,您有两个选项(也许有更好的选项,但我想不出任何选项(如果直接在插入指令的服务中进行标记不是一个选项。

修改普罗米修斯配置以添加标识环境的标签;前面的";以及";背面";基于其它标签的值或在"0"处进行;查询时间";使用Grafana模板变量和PromQL。两者都有优点和缺点。


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

优点:

  • 不需要更改客户端。您可能使用了一个小型库来实现API,但我认为它不支持这样的东西
  • 不需要在运行时使用label_replace或regex选择器,也不需要使用Grafana特有的东西
  • 易于实施和使用
  • 这只是另一个你可以在任何地方使用的标签,而不仅仅是Grafana。意思是记录规则,警报,普罗米修斯的网络用户界面

缺点:

  • 我认为普罗米修斯人的官方观点是,为此使用relabel配置是一种代码气味。当不同标签值组合的数量时,正则表达式也会增加。尽管这可能只是一个很长的(a|b|c)语句
  • 过去不可能将此标签应用于序列数据。如果您现在添加标签并在Grafana中对其进行筛选,则现在之前的所有数据将不会显示。过滤掉
  • 标签是硬编码的。如果你改变了对";后台";如果要更改规则,则新规则将仅应用于现在开始的数据。同样,您无法更改历史记录

如何操作:

metric_relabel_config(请参见此处(添加到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

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


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

tba

最新更新