我们有一个Prometheus、一个Grafana服务和多个出口商。这是prometheus.yaml
配置:
scrape_configs:
- job_name: app1
scrape_interval: 30s
scheme: http
static_configs:
- targets: ['x.y.z.10:7380']
- job_name: app2
scrape_interval: 30s
scheme: http
static_configs:
- targets: ['x.y.z.11:7380']
- job_name: app3
scrape_interval: 30s
scheme: http
static_configs:
- targets: ['x.y.z.12:7380']
从Grafana的角度来看,这些scrape将作为单个数据源进行访问。然而,为了为每个应用程序(app1、app2和app3(制作不同的面板,我们通过将作业过滤器{job="appX"}
附加到查询/度量中来将它们分开。
这就产生了两个问题,第一个问题是,我们必须在每个度量之后添加{job="appX"}
。第二个是,度量列表由来自另一个作业的不相关项目填充。
普罗米修斯或格拉法纳有没有任何方法可以使每个作业像数据源一样分离?其中我们不必将{job="appX"}
添加到度量中。假设我们无法在特定的仪表板中访问其他工作的指标。
不,没有简单的方法可以将作业分离到不同的数据源中。imo处理它的正确方法是为job_name创建一个可以动态抓取的仪表板变量,并有一个仪表板,您可以通过添加{job="${variable}"滤器如果您不想在所有度量之后添加标签过滤器,则可以使用<relabel_config>为所有指标添加一个pre/sufix,使其适用于ex.app1_uptimehttps://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config
一个好的做法是在度量名称前面加上应用程序名称"namespace"。例如:
appx_mycounter
appy_mycounter
appz_mycounter
这将使你能够完全忽略工作标签,Grafana中的排版会更好。
我不知道如何在Grafana中为Prometheus中存储的度量创建每个作业的数据源。但使用VictoriaMetrics可以很容易地做到这一点——只需在Grafana中每个数据源的custom query parameters
输入字段中添加extra_filters[]={job="appN"}
查询参数即可。请参阅以下附加信息:
- 如何配置Prometheus数据源以查询VictoriaMetrics
- 关于
extra_filters[]
选项的文档