如何从应用程序中识别heroku dyno号码?

ex-*_*erd 12 heroku

有没有办法从应用程序中识别heroku dyno名称(例如web.1,web.2)?我希望能够生成一个唯一的请求ID(例如,跟踪web和worker dynos之间的请求,以便整合请求堆栈的整合记录),在我看来,dyno标识符将成为一个不错的起点.

如果无法做到这一点,是否有人有后备建议?

Tom*_*Tom 17

最近Heroku团队解决了这个问题.

到了极致Manager会DYNO保存你的赛道例如标识的环境变量web.1,web.2,foo.1等.然而,变量仍处于试验阶段,并随时更改或删除.

我需要该值(实际上是像1,2等实例索引)来初始化实例启动时的flake id生成器,这个变量对我来说非常好.

您可以在本地环境变量上阅读有关变量的更多信息.


ex-*_*erd 6

我问过Heroku支持这个问题,因为这里有其他人问过我的类似问题,我想我应该分享一下.Heroku工作人员JD回复了以下内容:

不,从dyno里面看不到这些信息是不可能的.我们之前已经审查过这个功能请求,并且选择不实现它,因为这会引入一个Heroku特定的变量,我们的目标是避免在我们的堆栈中.因此,我们没有计划实施此功能.

您可以在dyno启动时为您的环境生成/添加唯一标识符(例如UUID)以实现类似的结果,并且您可以通过在此时将其打印到您的日志来将其与您的应用程序的dynos相关联.如果您以后需要找到它,您可以检查该行的日志(当然,您需要使用Papertrail,Loggly等耗尽您的日志,或者您自己的服务器).

不幸的是,对于我的场景,UUID太长了(如果我想要这么大的数据,我会首先使用UUID来跟踪事物).但是得到官方答案仍然很好.

  • 这已经过时了,根据http://stackoverflow.com/a/16381078,现在有一个$ DYNO环境变量 (7认同)
  • Pfft,这是不可接受的,因为我捕获指标,并且每次源(UUID)更改时都无法重新配置我的仪表板.我会再次提出请求:-) (4认同)