# Pushgateway
:一个 Web 服务器,支持第三方程序推送 metrics 到这里并缓存。
- GitHub (opens new window)
- Prometheus 只支持主动从 exporter 拉取数据,不支持被 exporter 推送数据。而使用 Pushgateway ,可允许第三方程序推送 metrics 到 Pushgateway ,再由 Prometheus 定时从 Pushgateway 拉取。
- 优点:
- 解耦了第三方程序与 Prometheus ,允许它们异步工作。
- 缺点:
- 原本 Prometheus 采集 exporter 时,才会触发一次 metrics 生成。而使用 Pushgateway ,不能控制第三方程序生成 metrics 的间隔时间。
- 如果第三方程序离线,则 Pushgateway 会一直记录最后一次推送的 metrics ,导致 Prometheus 采集到的 metrics 是过时的。需要根据 push_time_seconds 进行判断。
# 部署
- 用 docker-compose 部署:
version: "3" services: pushgateway: container_name: pushgateway image: prom/pushgateway:v1.4.1 restart: unless-stopped command: - --web.config.file=web.yml # - --web.listen-address=:9091 # - --web.telemetry-path=/metrics - --persistence.file=metrics.bak # 将 metrics 备份到该文件中(默认不会备份,因此重启后会丢失) ports: - 9091:9091 volumes: - .:/pushgateway
# 配置
- 在 Prometheus 的配置文件中加入如下配置,使其抓取 Pushgateway :
scrape_configs: - job_name: pushgateway honor_labels: true static_configs: - targets: - 10.0.0.1:9091
# 用法
例:推送指标到 Pushgateway
cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/pushgateway/instance/10.0.0.1 # HELP test_metric Just an example. # TYPE test_metric gauge test_metric{name="one"} 42 EOF
- Pushgateway 会将收到的指标按 job、instance 的值进行分组。
- 如果 URL 中不指定 job ,则会报错 404 。
- 如果 URL 中不指定 instance ,则会默认设置为 instance="" 。
- Pushgateway 会将收到的指标按 job、instance 的值进行分组。
推送之后,Pushgateway 会记录以下指标:
test_metric{job="pushgateway", instance="10.0.0.1", name="one"} 42 # 该 metric 最后一次推送的值 push_failure_time_seconds{job="pushgateway", instance="10.0.0.1"} 0 # 该组 metric 最后一次失败推送的时间戳 push_time_seconds{job="pushgateway", instance="10.0.0.1"} 1.5909774528190377e+09 # 该组 metric 最后一次成功推送的时间戳
重复推送 test_metric 指标时,只会更新这三个指标的值,不会保留旧值。
# HTTP API
curl -X DELETE http://localhost:9091/metrics/job/pushgateway/instance/10.0.0.1 # 删除某个指标