このエントリはMackerel Advent Calendar 2025 3日目の記事です。まだ空き枠がありますので、ご利用のみなさまぜひご参加ください。
こんにちは、Mackerel開発チームサブディレクター・テックリードの
id:arthur-1です。
Mackerelにはカスタムダッシュボードおまかせ生成機能というものがあります。従来カスタムダッシュボードを作成するには、ユーザーが1つ1つウィジェットを設定して並べていく必要がありました。おまかせ生成機能では、パラメータとして指定したロールのホストで使われているプラグインやインテグレーションを検出して、いい感じのダッシュボードを生成することができます。

id:arthur-1は当時この機能の企画やPoC開発を担当していました。このエントリでは、Mackerelカスタムダッシュボードおまかせ生成機能が生まれるに至った裏側をご紹介します。
Mackerelは、ちょっとしたスクリプトでmackerel-agentを入れるだけですぐにホストページやサービスページでいい感じの表示ができるところに良さを感じていただいている方が多い監視サービスです。その体験と比較して、カスタムダッシュボード機能は自力でグラフやマークダウンといったウィジェットを1つ1つ配置して作成する必要があり、構築やメンテナンスが大変というユーザーの声を聞いていました。
カスタムダッシュボードを自分で構築するのが面倒というユーザーの課題を解決するために、まずはカスタムダッシュボードのテンプレートという概念があると捗ると考えました。参照したいホストやロールをパラメータとして指定し、テンプレートを元にカスタムダッシュボードの定義を出力するようなツールがあれば良いと思ったのです。
そこで、MackerelのWebコンソールからアクセスできるものとして作るより前に、テンプレートからカスタムダッシュボードを作るようなCLIツールを開発しました。テンプレートにパラメータを注入してカスタムダッシュボードの定義を得るメインの機能とは別に、以下の2つの要件が求められると考えました:
- 条件を評価し、ウィジェットをダッシュボードに載せるか載せないかを分岐できること
- ウィジェットの配置を絶対指定することなくHTMLのように半自動で配置できること
1つ目の「条件を評価し、ウィジェットをダッシュボードに載せるか載せないかを分岐できること」は、ユーザーの利用環境の違いをテンプレートである程度吸収できるようにすることが目的です。システムメトリックを表示するだけでも、mackerel-agentを利用している場合とクラウドインテグレーションを利用している場合では表示するグラフが変わってきます。こうしたバリアントが増えるたびにテンプレートを増やしていては組合せ爆発を起こしてしまいますから、テンプレートとしてちょっとした違いを吸収できる表現力が必要と考えました。
これを言い換えれば、ダッシュボードに載せたいグラフの数やレイアウトはユーザーが指定したパラメータや利用状況によって変化するということです。しかし、ここでMackerelのAPIにおけるダッシュボード定義において絶対的な座標指定を求められることが障害になります。そこで2つ目の「ウィジェットの配置を絶対指定することなくHTMLのように半自動で配置できること」が機能要件として上がってくるわけです。

これを実現するようなCLIツールをGo言語でサクッと作って動作イメージを確認し、有用そうであることを確認しました。その後、MackerelのWebコンソールでアクセスできる機能として再度設計し直し開発を進めました。また、メインのユースケースとしてWebサービスをシンプルに提供する3層構造のシステムを想定し、テンプレートも作り込みました。その結果完成したのがこの「カスタムダッシュボードおまかせ生成機能」です。
現在は私たちが用意した3層構造のWebサービスに特化したテンプレートからのおまかせ生成しかできませんが、その他のシステム向けのテンプレートが欲しいとか、ユーザーが独自にテンプレートを定義したい、といったケースもあるでしょう。ぜひお近くのMackerelの中の人に要望を伝えてみてください。



