この記事は Mackerel Advent Calendar 2022 1日目の記事です。
こんにちは、id:arthur-1 です。2022年にはてなに新卒入社して、Mackerel 開発チームのアプリケーションエンジニアをやっています。また、今年の Mackerel Advent Calendar の運営を担当しております。よろしくお願いします。
今日は、そんな私が Mackerel チームに join して一番最初に実装し提供できた機能に関する話をします。
グラフ定義で選択できる単位を追加しました
今年7月頭のリリースノートで紹介されていますが、グラフ定義で使える単位に、以下の3つを追加しました:
- seconds [s]
- milliseconds [ms]
- bits/sec [bps]
単位を追加するのはパッと見簡単そうなのですが、実際には既存実装の仕組みの修正やリファクタなどが必要で、それなりにコードの差分がありました。このあたりの苦労話は社内で発表させていただきました。
さておき、時間の単位は分かりやすく便利ですね。各種クラウドインテグレーションで収集したメトリックで、単位が秒なのかミリ秒なのか分かりにくいものもありました。しかし、追加された単位をグラフ定義に設定することで、以下のように単位が分かりやすく表示されます。
before | |
---|---|
after |
bps 単位は帯域幅などで用いられ、ネットワーク監視には欠かせないものですね。
ネットのスピード監視を Mackerel で!
ということで、今回は自宅のネットのスピードをメトリックとして Mackerel に投稿し、監視していこうと思います。
え?n番煎じでは?と思った方は、もしかすると過去の Mackerel Advent Calendar をちゃんと読んでいる方かもしれませんね。
大丈夫です。令和最新版なので単位が違います。
今回は Raspberry Pi 4 の cron でプログラムを定期実行し、以下の数量をサービスメトリックとして Mackerel に投稿することにしました:
できたもの
その結果できたグラフはこちらです:
グラフを見たときに値のラベルににきちんと単位がついているのは気持ちが良いですね。
普段は気になったときに Home Network カスタムダッシュボードを眺めています。移動平均を見ると、最近は下りがちょっと速くなっているな~とかトレンドが分かっておもしろいです。
実装
実装は Go 言語を利用しました。これを作った当時は Go はじめて、という状態だったので、あんまり洗練されたコードではないです。x86_64 の Windows でコーディングしていたものを Arm64 の Linux で動かすのでクロスコンパイル面倒だなあと思っていたのですが、そのあたり Go はとても簡単で、当時感動していたのを覚えています。
ロジックとしては、外部コマンドである Ookla のスピードテスト CLI を実行して、その結果を parse して Mackerel に投稿する、という流れになっています。
go で書かれた speedtest-go というライブラリもあり、こちらを利用することも考えました。しかし、Raspberry Pi で動かすにはメモリの使い方が厳しく、upload の速度が安定しなかったので上記の方法を取りました。
そして、新たな単位が追加されたので、今回作ったアプリケーションでもそれに対応した書き方になっています!という紹介をしたかったのですが、残念ながら特記事項はありません。
このエントリ執筆当時の Mackerel にはサービスメトリックのグラフ定義生成を行う API が用意されていません。(ホストメトリックならある*1のに……) よって、bps や秒の単位に設定するのは Web コンソールからポチポチして行いました。API があればこのプログラムからグラフ定義を生成して単位を設定してあげられたのにな、と思います。
まとめ
Mackerel に新しい単位ができたのでぜひ使ってください!という宣伝でした。プラグインを自作している方や便利なライブラリを開発している方、bps, s, ms 単位に置き換えられるところがあればぜひご活用ください。
Mackerel の Advent Calendar まだまだ空きがあります。参加・閲覧どうぞよろしくお願いします!
prev: undefined
next: 2日目は id:stefafafan さんの Mackerelを振り返りやキャパシティプランニングのために毎月眺めている です