Pushgateway是一个独立服务,它在HTTP REST API上接收Prometheus指标。Pushgateway位于发送指标的应用程序和Prometheus服务器之间。Pushgateway接收指标,然后作为目标被抓取,以将指标提供给Prometheus服务器。你可以将其视为代理服务,或者说与黑盒exporter的行为相反:它接收指标而不是探测指标。
使用场景
Pushgateway本质上是一种用于监控Prometheus服务器无法抓取的资源的解决方案。网关(gateway)不是一个完美的解决方案,只能用作有限的解决方案使用,特别是用于监控其他无法访问的资源。
与功能齐全的推送监控工具相比,网关更接近于代理,因此,使用它将丢失Prometheus服务器提供的很多有用功能,这包括通过up指标和指标过期进行实例状态监控。默认情况下,它是静态代理,会记住发送给它的每个指标并暴露它们,只要它正在运行(并且指标不会保留)或者直到它们被删除。这意味着不再存在的实例的指标可能仍保存在网关中。
应该将网关的重点放在监控短生命周期的资源(如作业),或者无法访问的资源的短期监控上,然后安装Prometheus服务器以长期监控可访问的资源。
安装(略)
配置
Pushgateway不需要任何的配置,开箱即用,可以通过在运行pushgateway二进制文件时于命令行上设置参数来对它进行配置。网关默认在端口9091上运行,可以使用—web.listen-address参数来覆盖地址和端口。
pushgateway --web.listen-address="0.0.0.0:9091"
默认情况下,网关将所有指标存储在内存中。这意味着如果网关停止或重新启动,那么你将丢失内存中的所有指标。可以通过指定—persistence.file参数将指标持久存储于磁盘路径。
pushgateway --web.listen-address="0.0.0.0:9091" --persistence.file="/tmp/pushgateway"
默认情况下,文件每五分钟持久化写入一次,但你可以使用—persistence.interval参数覆盖它.
pushgateway --web.listen-address="0.0.0.0:9091" --persistence.file="/tmp/pushgateway" --persistence.interval="10m"
向pushgateway发送指标
一旦Pushgateway运行,你就可以开始发送指标。大多数Prometheus客户端库都支持向Pushgateway发送指标,以及暴露它们以进行抓取。
比如:
echo 'batchjob_user_counter 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob
我们将指标推送到路径/metrics。URL使用标签组成,这里是/metrics/job/
/metrics/job/<jobname>{/<label>/<label>}
我们还可以在URL中为指标添加一个instance标签:
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。指标组是指标的集合,你可以在分组中添加和删除指标,甚至可以删除整个组。由于网关是缓存而不是聚合器,因此指标组将保持运行,直到网关停止或删除它们为止。
我们还可以通过将标签括在{}中来为推送的指标添加标签:
echo 'batchjob_user_counter{id="123456"} 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob/instance/gateway_server
目前,该指标上传后没有类型,网关不知道它是计数型、计量型还是任何其他指标类型。你可以通过在推送中传递TYPE和HELP语句来向指标添加类型。
cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/batchjob/instance/gateway_server
# TYPE batchjob_user_counter counter
# HELP batchjob_user_counter A metrics from batchjob
batchjob_user_counter{id="123456"} 2
EOF
当然还可以添加更多的标签。
在pushgateway查看指标
们可以通过在/metrics路径上使用curl(或通过浏览http://localhost:9091上的Pushgateway仪表板)来查看推送到网关的指标。
删除Pushgateway中的指标
指标保存在网关中(假设未设置持久性),直到网关重启或者指标被删除。我们可以使用Pushgateway API删除指标,这里再次使用curl作为示例。
curl -x DELETE localhost:9091/metrics/job/batchjob
这将删除作业batchjob1的所有指标。你可以使用更精细的路径来进一步限制选择,例如,仅删除特定实例中的那些指标。
curl -x DELETE localhost:9091/metrics/job/batchjob/instance/gateway_server
Prometheus中抓取Gateway
在prometheus的配置文件中配置如下:
scrape_configs:
- job_name: pushgateway
honor_labels: true
static_configs:
- targets: ['localhost:9091']
如果honorlabels设置为true,那么Prometheus将使用Pushgateway上的job和instance标签。如果设置为false,那么它将重命名这些值,在它们前面加上exported前缀,并在服务器上为这些标签附加新值。