複数バージョンにまたがる App Engine リソースをカスタムダッシュボードで横断的に閲覧可能にする

こんにちは。Mackerelチーム CREの井上(id:a-know)です。

昨日、待望の Google Cloud インテグレーションがリリースされました!今日は、Google Cloud インテグレーション・AppEngine 連携をさらに便利に活用するための tips をお届けしたいと思います。

本記事の要約

  • Google Cloud インテグレーション・AppEngine 連携を使うと、バージョンごとにホストが登録されます
  • 「カスタムダッシュボード」と「カスタマイズグラフ」を使うことで、複数ホスト(バージョン)にまたがるリソースの変遷を横断的に閲覧可能にすることができます
  • それを簡単に実現するためのテンプレートもご用意しました!ぜひご利用ください!

Google Cloud インテグレーションについて

昨日リリースした Google Cloud インテグレーションですが、現在の段階では以下の3サービスを連携対象としています。

  • Compute Engine
  • Cloud SQL
  • App Engine

「自分の会社では Google Cloud を使っている」「個人的に好きなので、プライベートでは Google Cloud でアプリを動かしてみている」、そういった方々も多いのではないかと思っています。そんな私もそのうちの一人で、Go言語で書いたWebアプリケーションを App Engine(Standard Environment)で運用しています。そのため今回の Google Cloud インテグレーション、特に App Engine 連携のリリースは私も大変嬉しく、社内限定でリリースされたタイミングであれやこれやと試してみていました。

そうしてみなさんよりも一足はやく App Engine 連携を試すことができた者として、今日はちょっとした知見を "おすそ分け" できたら、と思い、この記事を書いています。

Mackerel の Google Cloud インテグレーション・App Engine 連携の特徴

ヘルプページにも記載のとおりですが、Mackerel の Google Cloud インテグレーションを使って App Engine 連携をおこなった場合、App Engine の1つ1つのバージョンが Mackerel 側でそれぞれ独立したマイクロホストとして登録されます。「マイクロホスト」については、ヘルプページ「ホスト」とはを参照してください。

たとえば、「defaultサービス」に「バージョン 2020-09-01-01」でデプロイされている App Engine アプリケーションを、Google Cloud インテグレーションを使って Mackerel に登録すると、以下のようにホスト登録されます。

f:id:mackerelio:20200924161624p:plain

App Engine アプリケーションのバージョン戦略・使い方はチームごとで多様性があるところかとは思うのですが、仮に「アプリケーションコードの手直しの都度、バージョンをインクリメントする」といった運用だった場合、2020-09-01-01.default 2020-09-01-02.default 2020-09-01-03.default ... というように、Mackerel側にはそれぞれ対応するホスト名でどんどんホスト登録されていきます。

とはいえ、Mackerelの課金体系は「アクティブにメトリック投稿があるホストに対してのみ」「月ごとの移動平均台数」で請求がおこなわれるようになっています(該当のFAQページ)ので、その点では心配ご無用なのですが、バージョンごとにホストが細切れにはなってしまうので、「このアプリケーション全体としての負荷などの傾向が見たい」といったときには、少々不便です。

複数バージョンにまたがる App Engine リソースをカスタムダッシュボードで横断的に閲覧可能にする

このように複数バージョンにまたがって存在している負荷傾向を、横断的に眺めたい!と思った私は、Mackerel の持つ以下の機能を活用してこれに対応することができないか、試してみることにしました。

  • カスタマイズグラフ
  • カスタムダッシュボード

「カスタマイズグラフ」とは、関数を使った柔軟なグラフを表示することができる機能です。

mackerel.io

例えば、example オーガニゼーションの example サービス・db ロールに属するホストの loadavg5 メトリックの平均値と、同じメトリックの一週間前の値を重ねたグラフは、以下のように書くことでグラフ化することができます。

https://mackerel.io/orgs/example/advanced-graph
       ?query=group(alias(avg(role(example:db, loadavg5)), 'loadavg5'),
                    alias(timeShift(avg(role(example:db, loadavg5)), 1w), '1%20week%20ago'))
       &title=example:db:loadavg5

f:id:mackerelio:20200924161742p:plain

利用可能な関数の一覧はヘルプページに記載の通りなのですが、この中に role 関数というものがあります。これを使えば、あるロールに所属しているホストのメトリックをグラフ化することができるので、今回はこれを活用することにします。

これを活用するには、Mackerel に連携されたホスト(App Engine の各バージョンに対応するホストですね)が全て同一ロールに属している必要がありますが、これは Google Cloud インテグレーション設定の「デフォルトロール」を設定しておくことで自動的に設定されますので、これを活用します。

f:id:mackerelio:20200924161809p:plain

そしてもうひとつの活用機能、「カスタムダッシュボード」ですが、こちらもヘルプページがあります。

mackerel.io

「カスタムダッシュボード」とは、Mackerel にデフォルトで用意されている各種ダッシュボードに追加する形で、ユーザー自身で独自にカスタマイズしたダッシュボードを作成できる機能です。

このカスタムダッシュボードは、グラフだけではなく数値や Markdown テキストなどを独立したウィジェットとして、好きなように配置することができます。上で紹介した「カスタマイズグラフ」も、例外ではありません。つまり、「あるロールに所属している歴代のバージョンのホスト情報を、カスタマイズグラフを用いてひとつのグラフに集約する」「そのグラフをカスタムダッシュボード機能を使って "いいかんじ" に配置する」ことで、複数バージョンにまたがる App Engine リソースをカスタムダッシュボードで横断的に閲覧可能にしてみよう、というのがこの記事の主旨になります。

そして、それを実際にやってみた様子が、以下になります。

f:id:mackerelio:20200924161840p:plain

各ウィジェットのサイズや配置などは私のセンスが出てしまうところですので、そこはぜひ大目に見ていただければと思うのですが(笑)、一時的にバージョンを(トラフィックの割り当てを)切り替えたときの様子が、グラフの線の色の違いで表されているのがおわかりいただけるのではないかと思います。

f:id:mackerelio:20200924161916p:plain

今回私が用意したダッシュボードをテンプレートとして利用する

このように、完璧ではないかもしれませんが利用していただく価値は多少あるのではないかと思われるこのダッシュボード、実は比較的簡単にみなさんがご利用の Mackerel オーガニゼーションにも取り込んでいただくことが可能です。以降、その手順をご紹介します。

まずは以下の GitHub Gist に置いてあるコード(json)を、ローカルファイルとして保存してください。

template json for Mackerel Custom Dashboard · GitHub

その後、ファイル内の SERVICE_NAME ROLE_NAME となっているところを、それぞれ、Google Cloud インテグレーションで設定したデフォルトロールに対応するものに置換して保存しなおします。

そして、以下のように Mackerel のダッシュボードAPIをリクエストします。

curl "https://mackerel.io/api/v0/dashboards" -H "X-Api-Key: APIキー" -H "Content-Type: application/json" -X POST -d @template.json

APIキーはWebコンソールから確認できます。@template.json のところは、ローカルに保存したjsonファイルを指定してください。

APIリクエストに対して、大きなjson形式のレスポンスが得られれば、おそらく成功しています。Mackerel のWebコンソールを開いて、「AppEngine Dashboard」というカスタムダッシュボードが新たに生成されていることを確認してみましょう。

f:id:mackerelio:20200924162011p:plain

生成されていますね!

注意点など

Google Cloud 側で削除してしまったバージョンやトラフィックを全く流していないバージョンについては、そのバージョンに対応する Mackerel 側のホストのグラフも更新されなくなりますが、今回私が用意したダッシュボードを活用されたい場合には退役はせず、そのままにしておきましょう。これは、退役をしてしまうと、一定期間経過した後に過去のメトリックデータが削除されてしまうためです。

とはいえ、それだとホスト一覧画面の視認性が気になる......という方もおられるかと思います。そうした場合には、過去存在していたホストのステータスを「Power off」に変更した上で、

f:id:mackerelio:20200924162201p:plain

ホスト一覧画面の上部にあるフィルタリング機能を有効活用しましょう。

f:id:mackerelio:20200924162213p:plain

退役をしてもメトリックデータが残るようになると便利ですよね。今後の Mackerel のアップデートに、ぜひご期待ください!