shibatch's journey

日々考えていることをつらつら書くだけです

DatadogでHerokuのホストの数をアプリ名 x Dyno毎でまとめる術

HerokuにDatadogのagentを入れてAPMを行っているのだけれども、最近そのHost数がどうも過大にになっているという事象に気づいた。Dyno数は14ほどなのにDatadog上でカウントされているHost数は40ほどもある。

DatadogのHost数はコストに直結する(APMは1Hostあたり$30ほどかかる)のでみてみると、Dynoはノード間をよく動いてそのたびにHost名が変わり、短命なHostがぽこぽこ作られる性質があるため、Host数が多く計上されることがあるらしかった。

これは公式ドキュメントにも記載されていて、回避方法も書かれている。Dynoごと(web.1とかweb.2とか)にまとめる方法は環境変数

DD_DYNO_HOST = true

を設定せよとのこと。

ただこれは既に設定済みで、それでも短命なDyno Hostでぽこぽこ作られている状態だった。

そこでDD_HOSTNAME 変数に値を設定することでDynoごとにまとめることにした。datadog-agent起動前に実行されるprerun.shスクリプトに以下の1行を入れた。

DD_HOSTNAME="${HEROKU_APP_NAME}-dyno-${DYNO}"

$HEROKU_APP_NAMEをProduction / Stagingのように環境ごとに分けている運用をしているので、これで環境毎 x Dyno毎 に取得することができる。

ちなみにこの$DD_HOSTNAMEでのHerokuでのホスト名指定はかなり強力に上書きされる性質があるようで、たとえば固定値にすると、ひとつだけのホスト名で取得されるようになる。

Dynoごとに集計する必要はないな〜という場合は固定値にしてまとめてしまえばホストの課金を少なくすることができる。

自分の場合は上記の設定でAPM Hostが40->14に減り、26Host分減らすことができてめでたしめでたし。$DD_DYNO_HOST の設定だけではうまくいかない場合は試してみる価値があるという情報共有でした。