# Pushgateway
:一个 Web 服务器,支持第三方推送监控数据到这里并缓存。
- GitHub (opens new window)
- Prometheus 只支持主动从 exporter 拉取数据,不支持被 exporter 推送数据。使用 Pushgateway 可以允许 exporter 推送数据到这里,再由 Prometheus 定时拉取。
- 优点:
- 解耦了 exporter 与 Prometheus ,允许它们异步工作,允许 exporter 不保持运行。
- 提供了 Web 页面,可以查看其状态。
- 缺点:
- 不能控制监控对象生成指标的间隔时间。
- 只会抓取当前时刻的数据,不会同步历史数据。并且,如果监控对象离线,依然会将最后一次抓取的数据作为当前值。
- 不能直接判断监控对象是否在线,需要根据 push_time_seconds 进行判断。
# 部署
- 用 docker-compose 部署:
version: "3" services: pushgateway: container_name: pushgateway image: prom/pushgateway:v1.4.1 restart: unless-stopped # command: # - --web.listen-address=:9091 # - --web.telemetry-path=/metrics # - --persistence.file=metrics.bak # 将指标数据备份到该文件中(默认不会备份,因此重启后会丢失) ports: - 9091:9091
# 配置
- 在 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 # TYPE test_metric gauge # HELP test_metric Just an example. test_metric{name="one"} 42 EOF
- Pushgateway 会将收到的指标按 job、instance 的值进行分组。
- 如果 URL 中不指定 job ,则会报错 404 。
- 如果 URL 中不指定 instance ,则会默认设置为 instance="" 。
- 指标中:
# TYPE <metric_name> <type>
行必须存在,用于声明该指标的类型,否则指标会被视作无类型的。# HELP <metric_name> <comment>
行不是必要的,用作该指标的注释。- 标签的值只能用双引号 " 作为定界符,不能用单引号 ' 。
- 每行末尾不能存在空格,否则会被当作最后一个字段。
- 每行末尾要有换行符,最后一行也需要换行。
- 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 # 删除某个指标