octocovのコードメトリクスをMackerelで可視化する

この記事はMackerel Advent Calendar 2022の5日目の記事です。3年ぶりのMackerel Advent Calendarへの参加です。

4日目は id:buty4649 さんで、サーバの温度を監視するmackerel-plugin-thermalを作った - ぶていのログでぶログでした。自宅サーバ、私にはまだ未知の領域です。自宅にサーバがあるということは自宅がDCになるわけで、温度管理も必要ということか...。


octocovとは

github.com

octocovはOSSのコードメトリクス計測ツールです。

コードメトリクス(コードカバレッジやCode To Test Ratio、テスト実行時間など)を計測するだけでなく、取得したメトリクスをPull Requestへのレポートしたり、サポートしている任意のデータストアにメトリクスを送信したりすることができます。

私が所属するGMOペパボではデータストアとしてBigQueryを選択し各リポジトリで計測したコードメトリクスを集約しています。 さらに独自のダッシュボードを作成して、集約したコードメトリクスを可視化できるようにしています。

詳しくは以下のエントリをご覧ください。

tech.pepabo.com

データストアとしてMackerelをサポート

octocovにおけるデータストアとは取得したコードメトリクスを保存したり取得する先を指します。

サポートしているデータストアとしては次のようなものがあります。

そして、今回(コードメトリクスの保存先として)Mackerelにも対応しました。

具体的には次のようにMackerelのサービスメトリクスとして、各リポジトリのコードメトリクスを可視化することができます。

リポジトリのコードメトリクスがMackerelで確認できています。

test-execution-timeのグラフはグラフ定義をsecondsにするとわかりやすいです。

blog.arthur1.dev

設定方法

設定方法は2パターンあります。

今回は例として、 octocov という名前のサービスにコードメトリクスを送信することにします。

1. 各リポジトリから直接Mackerelにメトリクスを送信するパターン

一番単純な方法です。

MackerelのAPIキーは環境変数 MACKEREL_API_KEY もしくは OCTOCOV_MACKEREL_API_KEY で読める必要があります。 事前にリポジトリのSecretsに登録しておきます。

octocov-actionを呼び出す際に環境変数を設定します。

-
    uses: k1LoW/octocov-action@v0
    env:
      MACKEREL_API_KEY: ${{ secrets.MACKEREL_API_KEY }}

今回は octocov というサービスにメトリクスを登録するので、.octocov.yml の設定には report.datastores:mackerel://octocov を追加します。

report:
  datastores:
    - mackerel://octocov

これで終わりです。

2. Central repoで一旦各リポジトリのメトリクスを収集して、まとめてMackerelに送信するパターン

パターン1は、各リポジトリMACKEREL_API_KEY を設置する必要があります。

これを解決するのが、Central repoからまとめてMackerelに送信するパターンです。

Central repo、Central modeについては次のエントリをご覧ください。

k1low.hatenablog.com

Central modeで収集したメトリクスをまとめて別のデータストアに送信する方法として、central.reReport: を使います。

具体的には私のOSSのCentral repoである k1LoW/octocovs に設定があります。

github.com

github.com

定期的に各リポジトリGithub Actions Artifactsに保存されているコードメトリクスレポートをpullして収集した後、各最新のコードメトリクスをまとめてMackerelに送信しています。

これで終わりです。

メトリクス情報の値だけを送信して可視化するのは便利そう

octocovとMackerelを連携させるアイデアは半年以上前からアドベントカレンダーネタとして構想していたのですが、これ、実は便利ですね。

時系列にみるデータはカジュアルにそれの可視化が得意なところに渡してしまうのが便利なのかー。

勉強になりました。


明日6日目は @tomotomobooksさんです