ユニファ開発者ブログ

ユニファ株式会社プロダクトデベロップメント本部メンバーによるブログです。

さくっとGrafana on Heroku

f:id:unifa_tech:20201208001556p:plain

みなさん、メリークリスマス!!

こんにちは、サーバーサイドエンジニアの柿本です。
この記事は、ユニファ Advent Calender 2020の10日目の記事になります。

今年のクリスマス、みなさんはサンタさんに何をお願いしましたか?

私は「自分専用のダッシュボードをください!」とお願いしたのですが、「フォッフォッフォ。それは自分でなんとかしたまえ!byサンタ」とのことだったので、自分で構築することにします。

とはいえ自分へのプレゼントにお金をかけたくないので、無料で入手できるものを探しました。

いくつかの無料や OSS のダッシュボードツールを比較してみて、Grafanaがクリスマスにはもってこいだったのでそれにします!

24時間動かし続けるわけではないので、 Heroku の Free Dyno を使えば間に合いそうです。

Grafana を Heroku にデプロイする bolierplate はいくつか GitHub にありますが、対象のバージョンが古かったり手順が多かったり sqlite を使っていたり*1したので自分で作ることにしました。

Grafana は docker image を提供しているので、それを使います。

tl;dr

1クリックで Heroku にデプロイすることができます。

Deploy

コマンドをパチパチ打つのがお好きな方は README.md をご参照ください。

github.com

工夫したところ

ポートのバインドに失敗する(らしい)

Grafana の docker image を普通に Heroku にデプロイするとポートのバインドに失敗する、という事前情報があったので、 Stack OVerflow の回答をそのまま参考にさせていただきました。

やっていることは単純でカスタムの設定ファイル( grafana.ini )にプレイスホルダーをおいておいて、デプロイの直前に sed で置換処理を差し込みます。

// grafana.ini

[server]
http_port = <HTTP_PORT>
// heroku-run.sh

sed -i -e 's|<HTTP_PORT>|'$PORT'|' /etc/grafana/grafana.ini

stackoverflow.com

DB の接続情報を同様にセット

Heroku は Postgres の Add-on を追加すると同時に DATABASE_URL という環境変数をセットしてくれます。

ありがたいことに grafana.ini に database の url をそのままセットすることができるので、上と同じ方法で設定します。

// grafana.ini

[database]
url = <DATABASE_URL>
// heroku-run.sh

sed -i -e 's|<DATABASE_URL>|'$DATABASE_URL'|' /etc/grafana/grafana.ini

最後に

サンタさんにお願い事をしても断られることがあるんだな、と大人になって初めて知りましたが、こういう困難を乗り越えて人は成長するんだなと学びの多い年末になりそうです。

来年のクリスマスは何をお願いしようかなぁ。

それではみなさんハッピーホリデー!!

ユニファでは サンタさんに断られた 保育をハックするエンジニアを募集中です。 一緒にスマート保育園を実現しましょう!

unifa-e.com

*1:Heroku では sqlite は24時間ごとに削除されます!涙