前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Prometheus监控实战》第11章 推送指标和Pushgateway

《Prometheus监控实战》第11章 推送指标和Pushgateway

作者头像
yeedomliu
发布2019-12-19 16:36:55
4.5K0
发布2019-12-19 16:36:55
举报
文章被收录于专栏:yeedomliuyeedomliu

第11章 推送指标和Pushgateway

  • 在某些情况下,没有可以从中抓取指标的目标。造成这种情况的原因有很多
  1. 安全性或连接性问题,使你无法访问目标资源。这是一种非常常见的情况,比如服务或应用程序仅允许特定端口或路径访问
  2. 目标资源的生命周期太短,例如容器的启动、执行和停止。在这种情况下,Prometheus作业将会发现目标已完成执行并且不再可以被抓取
  3. 目标资源没有可以抓取的端点,例如批处理作业。批处理作业不太可能具有可被抓取的HTTP服务,即使假设作业运行的时间足够长
  • 在这些情况下,我们需要将时间序列传递或推送到Prometheus服务器(https://github.com/prometheus/pushgateway)

11.1 Pushgateway

  • Pushgateway是一个独立服务,它在HTTP REST API上接收Prometheus指标。Pushgateway位于发送指标的应用程序和Prometheus服务器之间。Pushgateway接收指标,然后作为目标被抓取,以将指标提供给Prometheus服务器

11.1.1 Pushgateway使用场景

  • 网关(gateway)不是一个完美的解决方案,只能用作有限的解决方案使用,特别是用于监控其他无法访问的资源
  • 可能还会希望避免使网关成为单点故障或性能瓶颈,因为Pushgateway肯定不会像Prometheus服务器那样可扩展
  • 与功能齐全的推送监控工具相比,网关更接近于代理,因此,使用它将丢失Prometheus服务器提供的很多有用功能,这包括通过up指标和指标过期进行实例状态监控。默认情况下,它是静态代理,会记住发送给它的每个指标并暴露它们,只要它正在运行(并且指标不会保留)或者直到它们被删除。这意味着不再存在的实例的指标可能仍保存在网关中
  • 应该将网关的重点放在监控短生命周期的资源(如作业),或者无法访问的资源的短期监控上,然后安装Prometheus服务器以长期监控可访问的资源
  • 提示:PushPox是监控这些不可访问资源的一个工具,旨在抓取通过NAT连接的指标(https://github.com/robustperception/pushprox)
代码语言:javascript
复制
go get github.com/robustperception/pushprox/{client,proxy}
cd ${GOPATH-$HOME/go}/src/github.com/robustperception/pushprox/client
go build
cd ${GOPATH-$HOME/go}/src/github.com/robustperception/pushprox/proxy
go build

# 运行的Prometheus所在服务器
./proxy

# client
./client --proxy-url=http://proxy:8080/

# Prometheus
scrape_configs:
- job_name: node
  proxy_url: http://proxy:8080/
  static_configs:
    - targets: ['client:9100']  # Presuming the FQDN of the client is "client".

11.1.2 安装Pushgateway

  • 地址
代码语言:javascript
复制
https://prometheus.io/download/#pushgateway
https://github.com/prometheus/pushgateway/releases
  • 运行
代码语言:javascript
复制
docker pull prom/pushgateway
docker run -d -p 9091:9091 prom/pushgateway

11.1.3 配置和运行Pushgateway

  • Pushgateway不需要任何配置,开箱即用
  • 代码清单:在所有接口上运行Pushgateway
代码语言:javascript
复制
pushgateway --web.listen-address="0.0.0.0:9091"
  • 默认情况下,网关将所有指标存储在内存中。这意味着如果网关停止或重新启动,那么你将丢失内存中所有指标。可以通过指定--persistence.file参数将指标持久存储于磁盘路径
  • 代码清单:持久化指标
代码语言:javascript
复制
pushgateway --persistence.file="/tmp/pushgateway_persist"
  • 默认情况下,文件每五分钟持久化写入一次,但你可以使用--persistence.interval参数覆盖它

11.1.4 向Pushgateway发送指标

  • 最简单的方法是使用curl等命令行工具发送指标
代码语言:javascript
复制
echo 'batchjob1_user_counter 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob1
  • 将指标推送到路径/metrics。URL使用标签组成,这里/metrics/job/ ,其中batchjob1是我们的作业标签
  • 代码清单:Pushgateway指标路径
代码语言:javascript
复制
/metrics/job/<jobname>{/<label>/<label>}
  • 让我们在URL中为指标添加一个instance标签
  • 代码清单:向网关发送指标
代码语言:javascript
复制
echo 'batchjob1_user_counter 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob1/instance/sidekiq_server
  • 由于网关是缓存而不是聚合器,因此指标组将保持运行,直到网关停止或删除它们为止
  • 代码清单:为推送的指标添加标签
代码语言:javascript
复制
echo 'batchjob1_user_counter{job_id="123ABC"} 2' | curl --data-binary @- http://localhost:9091/metrics/job/batchjob1/instance/sidekiq_server
  • 可以通过在推送中传递TYPE和HELP语句来向指标添加类型
  • 代码清单:传递类型和描述
代码语言:javascript
复制
cat <<<EOF | curl --data-binary @- http://localhost:9091/metrics/job/batchjob1/instance/sidekiq_server
# TYPE batchjob1_user_counter counter
# HELP batchjob1_user_counter A metric from BatchJob1.
batchjob1_user_counter{job_id="123ABC"} 2
EOF
  • 代码清单:传递类型和描述(添加更多指标)
代码语言:javascript
复制
cat <<<EOF | curl --data-binary @- http://localhost:9091/metrics/job/batchjob1/instance/sidekiq_server
# TYPE batchjob1_avg_latency gauge
# HELP batchjob1_avg_latency Another metric from BatchJob1
batchjob1_avg_latency{job_id="123ABC"} 74.5
# TYPE batchjob1_sales_counter counter
# HELP batchjob1_sales_counter A third metric from BatchJob1
batchjob1_sales_counter{job_id="123ABC"} 1
EOF

11.1.5 在Pushgateway上查看指标

  • 代码清单:通过curl查看网关指标
  • 可以看到batchjob1指标,job标签已被设置为batchjob1,并且instance标签被设置为sidekiq_server
  • 对于batchjob1_user_counter,可以看到指标值 是2,即使我们向网关发送了三次推送。这是因为网关不是聚合器,例如StatsD或其他类似工具
  • 这里还会看到另一个指标:push_time_seconds。这是每个作业都有的指标,指示最后一次推送发生的时间

11.1.6 删除Pushgateway中的指标

  • 指标保存在网关中(假设未设置持久性),走到网关重启或者指标被删除。我们可以使用Pushgateway API删除指标,这里再次使用curl作为示例
  • 代码清单:删除Pushgateway所有指标
  • 代码清单:选择删除Pushgateway指标

11.1.7 从客户端发送指标

  • 我们可以使用Prometheus客户端将指标推送到网关。
  • 代码清单:MetricsPush模块
  • 注意:除了PrometheusClient::Push上的add方法之外,还有replace和delete方法,用来替换或删除网关上的指标

11.2 抓取Pushgateway

  • Pushgateway只是指标的临时停靠站。我们将它们放入Prometheus服务器。为此,需要创建一个作业
  • 代码清单:pushgateway作业
代码语言:javascript
复制
- job_name: pushgateway
  honor_labels: true
  file_sd_configs:
    - files:
      - targets/pushgateway/*.json
      refresh_interval: 5m
  • 代码清单:Pushgateway目标(targets/pushgateway/mwp-pushgateway.json)
代码语言:javascript
复制
[{
    "targets": ["pg1.example.com"]
}]
  • honor_labels选项并将其设置为false。当Prometheus抓取目标时,它将附加抓取作业的名称(此处为pushgateway),以及填充了目标的主机或IP地址的instance标签
  • 如果honor_labels设置为true,那么Prometheus将使用Pushgateway上的job和instance标签。如果设置为false,那么它将重命名这些值,在它们前面加上exported_前缀,并在服务器上为这些标签附加新值
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yeedomliu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第11章 推送指标和Pushgateway
    • 11.1 Pushgateway
      • 11.1.1 Pushgateway使用场景
      • 11.1.2 安装Pushgateway
      • 11.1.3 配置和运行Pushgateway
      • 11.1.4 向Pushgateway发送指标
      • 11.1.5 在Pushgateway上查看指标
      • 11.1.6 删除Pushgateway中的指标
      • 11.1.7 从客户端发送指标
    • 11.2 抓取Pushgateway
    相关产品与服务
    命令行工具
    腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档