patorashのブログ

方向性はまだない

DBのテーブル数、カラム数、コメント数をMackerelに登録するrake task作った

先日のOSO2020で、はてなの吉田さん(id:syou6162)がカラムのコメント数をMackerelのサービスメトリックとして登録して可視化したという話をして感銘を受けたので早速rake taskを作ってみた。

なお、先日の記事。

patorash.hatenablog.com

言及されていたのは、スライドのここ。一番下に書いてありますね。

ところで私はMackerel初心者です

会社ではMackerel使っているし、私自身も一応恩恵は受けているのですが、Herokuを使っているから外形監視くらいなもんで、じゃあどうやって可視化したらええねん?っていうところで、早速家にあるMackerelサーバ監視入門を引っ張り出したわけです。1回は読んだんですよ!なかなか使う機会がないだけで!

Mackerel サーバ監視[実践]入門

Mackerel サーバ監視[実践]入門

これによると、サービスメトリックを登録すればいいということがわかったのだけれど、実際にグラフを作る方法がいまいちよくわからなかったので、本にあるcurlのサンプルを見ながら、RubyMineのhttp clientでサービスメトリックを登録するAPIに投げてみました。

POST https://mackerel.io/api/v0/services/<サービス名>/tsdb
Content-Type: application/json
X-Api-Key: <MackerelのAPI Key>

[{"name": "Sample.bar", "time": {{$timestamp}}, "value": 30}]

すると、グラフができました。なるほど。時間をおいて、値を変えながら投げてみました。

f:id:patorash:20210216171207p:plain

とりあえず登録してしまえば、グラフができるっていうことですね。

rake taskを作る

グラフの作り方はわかったので、さっきのグラフは削除しておいて、あとはrake taskでデータを投げるだけです。 gistでコードを公開しておきます。

2021-02-17 追記

(追記ここから)

Viewのことを考慮できていなかったため、Viewも追加しました。gistのほうも修正済みです。 PostgreSQLが使っているシステムビューは除外しています。

(追記ここまで)

環境変数を設定した上で、 bin/rake mackerel:service_metric:database:post を実行すると、

  • テーブル数 + ビュー数
  • カラム数
  • コメント数

がグラフになります。

また、development環境でmigration系のタスクが実行されたら自動で実行されるようにしておきました。

Post custom metrics(table count, column count, an…

苦労した点は、db:migrateが行われたら自動で実行されるようにしたのですが、テストを流すとdb:migrateがないと言われて落ちました。db:migrate後に実行されるgem のannotateはどうしてるんだ?と思って調べてみたら、id:onk さんが出しているPRが出てきて、対応方法がわかったので丸々拝借しました。

参考にしたコードはこれ。

annotate_models/annotate_models_migrate.rake at 516ed58e5662e32fca5114c6dbe20be93a4e5507 · ctran/annotate_models · GitHub

結果

こんな感じでグラフが出るようになりました!ちなみにコメントは0です。こ、これから追加していくぞ!😇

f:id:patorash:20210216172105p:plain

2021-02-18 追記

楽にコメントを追加したかったので、I18nを利用して追加する方法を記事にしました。

patorash.hatenablog.com