PushGateway 数据上报采集

安装

docker run -d \
--restart always \
-p 9091:9091\
-v /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime \
-v /tmp/prometheus-data:/prometheus-data/ \
--name prometheus_pushgateway \
prom/pushgateway:latest

Prometheus配置

scrape_configs:
  - job_name: 'pushgateway'
    honor_labels: true # 避免收集数据本身的 job 和 instance 被覆盖
    static_configs:
    - targets: ['10.11.19.141:9091']
      labels:
        instance: pushgateway

PushGateway 数据上报采集

  • API 方式 Push 数据到 PushGateway

  • 默认 API URL 地址为: http://:9091/metrics/job/{/<LABEL_NAME>/<LABEL_VALUE>},

    • 其中 是必填项,为 job 标签值,后边可以跟任意数量的标签对,

    • 一般我们会添加一个 instance/<INSTANCE_NAME> 实例名称标签,来方便区分各个指标。

简单指标数据

echo "java_status{env=\"test_env\", name=\"test_demo\"} 1" | curl --data-binary @- http://10.11.19.141:9091/metrics/job/app/instance/app-8.8.8.8

少量指标数据

每个指标添加 TYPE 及 HELP 说明。

大量指标数据

# vim pgdata.txt

# TYPE http_request_total counter
# HELP http_request_total get interface request count with different code.
http_request_total{env="test_env", name="test_demo", code="200",interface="/v1/save"} 276
http_request_total{env="test_env", name="test_demo", code="404",interface="/v1/delete"} 0
http_request_total{env="test_env", name="test_demo", code="500",interface="/v1/save"} 1

# TYPE http_request_time gauge
# HELP http_request_time get core interface http request time.
http_request_time{env="test_env",code="200",interface="/v1/core"} 0.122
curl -XPOST --data-binary @pgdata.txt http://10.11.19.141:9091/metrics/job/app/instance/app-8.8.8.8

用 Client SDK Push 数据到 Pushgateway 示例

使用 PushGateway 注意事项

  • 指标值只能是数字类型,非数字类型报错。

  • 指标值支持最大长度为 16 位,超过16 位后默认置为 0

PushGateway 数据持久化操作

默认 PushGateway 不做数据持久化操作,当 PushGateway 重启或者异常挂掉,导致数据的丢失,我们可以通过启动时添加 -persistence.file 和 -persistence.interval 参数来持久化数据。-persistence.file 表示本地持久化的文件,将 Push 的指标数据持久化保存到指定文件,-persistence.interval 表示本地持久化的指标数据保留时间,若设置为 5m,则表示 5 分钟后将删除存储的指标数据。

docker run -d -p 9091:9091 prom/pushgateway "-persistence.file=pg_file –persistence.interval=5m"

PushGateway 推送及 Prometheus 拉取时间设置

Prometheus 每次从 PushGateway 拉取的数据,并不是拉取周期内用户推送上来的所有数据,而是最后一次 Push 到 PushGateway 上的数据,所以推荐设置推送时间小于或等于 Prometheus 拉取的时间,这样保证每次拉取的数据是最新 Push 上来的。

Last updated