Pushgateway是一个独立服务,它在HTTP REST API上接收Prometheus指标。Pushgateway位于发送指标的应用程序和Prometheus服务器之间。Pushgateway接收指标,然后作为目标被抓取,以将指标提供给Prometheus服务器。你可以将其视为代理服务,或者说与黑盒exporter的行为相反:它接收指标而不是探测指标。

使用场景

Pushgateway本质上是一种用于监控Prometheus服务器无法抓取的资源的解决方案。网关(gateway)不是一个完美的解决方案,只能用作有限的解决方案使用,特别是用于监控其他无法访问的资源。

与功能齐全的推送监控工具相比,网关更接近于代理,因此,使用它将丢失Prometheus服务器提供的很多有用功能,这包括通过up指标和指标过期进行实例状态监控。默认情况下,它是静态代理,会记住发送给它的每个指标并暴露它们,只要它正在运行(并且指标不会保留)或者直到它们被删除。这意味着不再存在的实例的指标可能仍保存在网关中。

应该将网关的重点放在监控短生命周期的资源(如作业),或者无法访问的资源的短期监控上,然后安装Prometheus服务器以长期监控可访问的资源。

安装(略)

配置

Pushgateway不需要任何的配置,开箱即用,可以通过在运行pushgateway二进制文件时于命令行上设置参数来对它进行配置。网关默认在端口9091上运行,可以使用—web.listen-address参数来覆盖地址和端口。

  1. pushgateway --web.listen-address="0.0.0.0:9091"

默认情况下,网关将所有指标存储在内存中。这意味着如果网关停止或重新启动,那么你将丢失内存中的所有指标。可以通过指定—persistence.file参数将指标持久存储于磁盘路径。

  1. pushgateway --web.listen-address="0.0.0.0:9091" --persistence.file="/tmp/pushgateway"

默认情况下,文件每五分钟持久化写入一次,但你可以使用—persistence.interval参数覆盖它.

  1. pushgateway --web.listen-address="0.0.0.0:9091" --persistence.file="/tmp/pushgateway" --persistence.interval="10m"

向pushgateway发送指标

一旦Pushgateway运行,你就可以开始发送指标。大多数Prometheus客户端库都支持向Pushgateway发送指标,以及暴露它们以进行抓取。
比如:

  1. echo 'batchjob_user_counter 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob

我们将指标推送到路径/metrics。URL使用标签组成,这里是/metrics/job/,其中batchjob1是我们的作业标签。带有标签的完整指标路径如下:

  1. /metrics/job/<jobname>{/<label>/<label>}

将用作job标签的值,然后是其他指定的标签。路径中指定的标签将覆盖指标本身指定的标签。
我们还可以在URL中为指标添加一个instance标签:

  1. echo 'batchjob_user_counter 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob/instance/gateway_server

说明:你不能将/作为标签值或作业名称的一部分使用,即使是转义

在上面的示例中,我们通过echo将指标batchjob_user_counter 2从作业batchjob发送到网关。这将为作业batchjob创建一个新的指标组,其instance标签为gateway_server。指标组是指标的集合,你可以在分组中添加和删除指标,甚至可以删除整个组。由于网关是缓存而不是聚合器,因此指标组将保持运行,直到网关停止或删除它们为止。

我们还可以通过将标签括在{}中来为推送的指标添加标签:

  1. echo 'batchjob_user_counter{id="123456"} 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob/instance/gateway_server

目前,该指标上传后没有类型,网关不知道它是计数型、计量型还是任何其他指标类型。你可以通过在推送中传递TYPE和HELP语句来向指标添加类型。

  1. cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/batchjob/instance/gateway_server
  2. # TYPE batchjob_user_counter counter
  3. # HELP batchjob_user_counter A metrics from batchjob
  4. batchjob_user_counter{id="123456"} 2
  5. EOF

当然还可以添加更多的标签。

在pushgateway查看指标

们可以通过在/metrics路径上使用curl(或通过浏览http://localhost:9091上的Pushgateway仪表板)来查看推送到网关的指标。

删除Pushgateway中的指标

指标保存在网关中(假设未设置持久性),直到网关重启或者指标被删除。我们可以使用Pushgateway API删除指标,这里再次使用curl作为示例。

  1. curl -x DELETE localhost:9091/metrics/job/batchjob

这将删除作业batchjob1的所有指标。你可以使用更精细的路径来进一步限制选择,例如,仅删除特定实例中的那些指标。

  1. curl -x DELETE localhost:9091/metrics/job/batchjob/instance/gateway_server

Prometheus中抓取Gateway

在prometheus的配置文件中配置如下:

  1. scrape_configs:
  2. - job_name: pushgateway
  3. honor_labels: true
  4. static_configs:
  5. - targets: ['localhost:9091']

如果honorlabels设置为true,那么Prometheus将使用Pushgateway上的job和instance标签。如果设置为false,那么它将重命名这些值,在它们前面加上exported前缀,并在服务器上为这些标签附加新值。