API 方式 Push 数据到 PushGateway

Pushgateway 简介


Pushgateway 是 Prometheus 生态中一个重要工具,使用它的原因主要是:

Prometheus 采用 pull 模式,可能由于不在一个子网或者防火墙原因,导致 Prometheus 无法直接拉取各个 target 数据。
在监控业务数据的时候,需要将不同数据汇总, 由 Prometheus 统一收集。
由于以上原因,不得不使用 pushgateway,但在使用之前,有必要了解一下它的一些弊端:

将多个节点数据汇总到 pushgateway, 如果 pushgateway 挂了,受影响比多个 target 大。
Prometheus 拉取状态 up 只针对 pushgateway, 无法做到对每个节点有效。
Pushgateway 可以持久化推送给它的所有监控数据。
因此,即使你的监控已经下线,prometheus 还会拉取到旧的监控数据,需要手动清理 pushgateway 不要的数据。

通过 API 来管理 prometheus数据


push单条数据

Push 数据到 PushGateway 向 {job=“test_job”} 添加单条数据:

echo "test_metric 12345"|curl --data-binary @- http://192.168.80.144:9091/metrics/job/test_job
 --data-binary  #表示发送二进制数据,注意:它是使用POST方式发送的!

执行完毕,刷新一下 PushGateway UI 页面,此时就能看到刚添加的 test_metric 指标数据了。

不过我们会发现,除了 test_metric 外,同时还新增了 push_time_seconds 和 push_failure_time_seconds 两个指标,这两个是 PushGateway 系统自动生成的相关指标。此时,我们在 Prometheus UI 页面上 Graph 页面可以查询的到该指标了。

这里要着重提一下的是,上图中 test_metric 我们查询出来的结果为 test_metric{exported_job=“test_job”,instance=“pushgateway”,job=“pushgateway”} ,眼尖的会发现这里头好像不太对劲,刚刚提交的指标所属 job 名称为 test_job ,为啥显示的为 exported_job=“test_job” ,而 job 显示为 job=“pushgateway” ,这显然不太正确,那这是因为啥?其实是因为 Prometheus 配置中的一个参数 honor_labels (默认为 false)决定的,我们不妨再 Push 一个数据,来演示下添加 honor_labels: true 参数前后的变化。

Push 一个复杂指标

下面,我们 Push 一个复杂一些的,一次写入多个指标,而且每个指标添加 TYPE 及 HELP 说明。

[root@NEWCWS-AS03 data]# cat <<EOF | curl --data-binary @- http://192.168.80.144:9091/metrics/job/test_job/instance/test_instance
> # TYPE test_metrics counter
> test_metrics{label="app1",name="demo"} 100.00
> # TYPE another_test_metrics gauge
> # HELP another_test_metrics Just an example.
> another_test_metrics 123.45
> EOF

添加完毕,再刷新一下 PushGateway UI 页面,可以看到添加的数据了。

从上图可以看出,/metrics/job/test_job 和 metrics/job/test_job/instance/test_instance 虽然它们都属于 test_job,但是它们属于两个指标值,因为 instance 对二者做了区分。此时我们访问 Prometheus UI 页面上 Graph 页面查询该指标。

honor_labels配置的意义

依旧有问题,那么修改一下 prometheus.yaml,增加 honor_labels: true 参数配置如下:

  - job_name: 'pushgateway'
    honor_labels: true
    static_configs:
    - targets: ['192.168.80.144:9091']
      labels:
        instance: pushgateway

重启 Prometheus,稍等一会,等到 Prometheus 采集到数据后,我们再访问 Prometheus UI 页面上 Graph 页面查询该指标。

此时,可以看到能够正确匹配到 Push 的指标值对应到 job 和 instance 上了。这里说明一下 honor_labels 的作用:因为 Prometheus 配置 PushGateway 的时候,也会指定 job 和 instance,但是它只表示 PushGateway 实例本身,不能真正表达收集数据的含义。所以配置 PushGateway 需要添加 honor_labels:true 参数,避免收集数据本身的 job 和 instance 被覆盖。

删除某一个指标


如果要删除某一个指标,同样可以通过 API 方式触发删除。例如删除 job=“test_job” 组下的所有指标值,可以执行如下命令:

curl -X DELETE http://192.168.80.144:9091/metrics/job/test_job

注意:删除 job=“test_job” 组下的所有指标值,不包括 {job=“test_job”, instance=“test_instance”} 中的指标值,虽然它们的 job 名称都为 test_job。如果想删除该指标值,那么需要执行如下命令:

curl -X DELETE http://192.168.80.144:9091/metrics/job/test_job/instance/test_instance

同样,我们也可以在 PushGateway UI 页面指定指标记录后边,点击 Delete Group 按钮来删除,这里就不在演示了。

版权声明:本文为作者原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原创文章,作者:老C,如若转载,请注明出处:https://www.code404.icu/542.html

发表评论

登录后才能评论