我们的服务同时接收前台(网站)和后台电话。我想在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"})
绘制两个图形?
答案 0 :(得分:0)
因此,从我看来,您有两个选择(也许有更好的选择,但我想不到)。如果不是直接在已检测服务中进行标记,则可以选择。
修改Prometheus配置,以添加一个标签,该标签基于其他标签的值来标识“前”和“后”等环境,或者在“查询时”使用Grafana模板变量和PromQL进行操作。两者都有缺点。
优势:
label_replace
或regex选择器来做任何事情,也不需要使用Grafana特有的东西。缺点:
(a|b|c)
语句。操作方法:
向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
添加到所有系列,然后继续根据其他标签的值来更改标签。
tba