You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Prometheus监控Heroku多dynos应用?如何获取所有dynos的IP?

Hey,我之前在Heroku上维护多dyno应用的时候,正好踩过这个监控的坑,给你分享几个实战过的方案,分两部分来拆解你的问题:

一、用Prometheus监控Heroku多Dyno应用的可行方案

1. 优先选Heroku官方Prometheus集成(最省心)

这是我最推荐的方案,完全不用折腾IP的事儿——Heroku官方提供的Prometheus Add-on已经帮你解决了多dyno的服务发现问题,会自动识别并拉取所有运行中dyno的监控指标。

操作步骤很简单:

  • 启用Prometheus add-on:在终端运行对应命令,免费版用hobby规格就行
    heroku addons:create prometheus:hobby --app your-app-name
    
  • 确保你的应用暴露了Prometheus metrics端点(比如/metrics),用对应语言的客户端库(Python的prometheus-client、Go的prometheus包之类的)生成指标
  • 之后直接通过heroku addons:open prometheus打开监控面板,就能看到所有dyno的指标数据了

这个方案省掉了所有动态IP维护、服务发现的麻烦,和Heroku生态整合得非常丝滑。

2. 自定义Prometheus部署+动态服务发现(适合需自主控制的场景)

如果因为公司现有监控体系的要求,必须自己部署Prometheus实例,那核心就是解决dyno动态IP的服务发现问题,这就得先搞定怎么自动获取所有dyno的IP(也就是你的第二个问题)。

二、如何获取Heroku所有Dynos的IP地址

Heroku dyno的IP是动态变化的(重启、缩放都会变),所以不能静态配置,得用动态方式获取:

1. 临时查看:用Heroku CLI快速获取

要是你只是临时查一下当前的dyno IP,一条命令就能搞定:

heroku ps:info --app your-app-name

输出里每个dyno条目下的IP字段,就是该dyno的公网IP。

2. 自动化获取:调用Heroku API

要实现动态服务发现,就得通过API定期拉取dyno列表和IP,步骤如下:

  • 生成Heroku API令牌:在Heroku账户设置里创建一个带view权限的API token,或者用命令生成:
    heroku authorizations:create --description "Prometheus service discovery"
    
  • 调用API获取dyno信息:用curl或者脚本发起请求,返回的JSON里包含所有dyno的IP:
    curl -H "Authorization: Bearer YOUR_HEROKU_API_TOKEN" \
         -H "Accept: application/vnd.heroku+json; version=3" \
         https://api.heroku.com/apps/your-app-name/dynos
    
    其中ip是公网IP,private_ip是私网IP(如果你的Prometheus部署在Heroku内部或能访问Heroku私网,用私网IP更稳定)

3. 集成到Prometheus动态服务发现

拿到dyno IP后,写个简单的脚本(Python/Shell都行),定期调用API并生成Prometheus的file_sd格式JSON文件(比如heroku_dynos_targets.json),格式示例:

[
  {
    "targets": ["dyno-1-ip:9090", "dyno-2-ip:9090"],
    "labels": {
      "app": "your-app-name",
      "env": "production"
    }
  }
]

然后在Prometheus配置里添加file_sd配置,让它自动刷新targets:

scrape_configs:
  - job_name: 'heroku-app'
    file_sd_configs:
      - files:
          - '/path/to/heroku_dynos_targets.json'
        refresh_interval: 1m

这样Prometheus会每隔1分钟自动更新目标列表,适配dyno的动态变化。

最后再啰嗦一句

如果没有特殊需求,真的优先用官方的Prometheus add-on,省掉太多维护成本;要是必须自己搭,API+file_sd的方案是实战中最靠谱的动态服务发现方式。

内容的提问来源于stack exchange,提问作者Zdeněk Hásek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:43:52