每个 Prometheus 作业都作为 Grafana 中的数据源

Posted

技术标签:

【中文标题】每个 Prometheus 作业都作为 Grafana 中的数据源【英文标题】:Every Prometheus job as a data source in Grafana 【发布时间】:2021-07-07 11:32:51 【问题描述】:

我们有一个 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 的角度来看,这些抓取将作为单个数据源进行访问。但是,为了为每个应用程序(app1、app2 和 app3)制作不同的仪表板,我们通过将作业过滤器 job="appX" 附加到查询/指标来分隔它们。

这产生了两个问题,第一个是,我们必须在每个度量后添加job="appX"。第二个是,指标列表由来自其他工作的不相关项填充。

Prometheus 或 Grafana 中是否有任何方法可以将每个作业作为数据源分开?我们不必将job="appX" 添加到指标中。假设我们无权访问特定仪表板中其他作业的指标。

【问题讨论】:

所以问题是每次要查看应用程序时都必须添加特定的job="appX"?我的意思是,如果您想检查 app3 指标,然后在 app2 之后,您需要对查询进行更改? @rcarba:实际上,问题是当有人想写一个查询时,他应该把它放在每个指标之后,应用程序的指标也混合在一起,很难确定哪个属于一个应用程序 【参考方案1】:

不,没有简单的方法可以将作业分成不同的数据源。 imo您可以处理它的正确方法是为可以动态抓取的job_name创建一个仪表板变量,并拥有1个仪表板,您可以通过添加 job="$variable" 过滤器来选择显示任一作业的指标。 如果您不想在所有指标之后添加标签过滤器,您可以使用 为所有指标添加前缀/后缀以使其成为 ex。 app1_uptime https://prometheus.io/docs/prometheus/latest/configuration/configuration/#relabel_config

【讨论】:

【参考方案2】:

一个好的做法是将应用程序名称作为“命名空间”作为指标名称的前缀。例如:

appx_mycounter
appy_mycounter
appz_mycounter

这将使您能够完全忽略工作标签,并且 Grafana 中的预输入会更好地工作。

【讨论】:

以上是关于每个 Prometheus 作业都作为 Grafana 中的数据源的主要内容,如果未能解决你的问题,请参考以下文章

MySQL: 9 为数据库部署Prometheus+Grafana监控系统

Prometheus-pushgateway

一篇文章搞定Prometheus普罗米修斯监控系统的部署

云原生(三十五) | Prometheus入门和安装

Spring 批处理作业状态配置为使用 prometheus 发出警报

Prometheus:每个用户的标签 VS 每个用户的指标