弊社の @tjinjin が作った mackerel-plugin-aws-billing は導入は簡単
だし、AWS 料金の推移が気軽に見られるので、Fastly 版を作ってみました。

Fastly は少し前から会社で使い始めています。なかなか便利で、CDN な
のに一瞬でキャッシュを消せるのもさることながら、料金含めた全てのメ
トリクスがリアルタイムで見られるのがすごいですね。今のところ、超安
定稼働しています。

さて、今回作った mackerel-plugin-fastly-billing は Fastly の
Billing API
を叩いて、その月の現在の料金を取ってくるシンプルな
plugin です。curl 的には例えば以下になります。

$ curl -s -H "Fastly-Key: <Fastly API Key>" \
  https://api.fastly.com/billing/year/2016/month/10 | jq .total.cost

先日、mackerel-plugin-delayed-job-count も作ったのですが、

Go で Mackerel の delayed_job plugin を作った|feedforce Engineers’ blog

今回は少しパワーアップしております。delayed_job も追随しよう…。

書き方を少し変えた

main() を先頭に書きました。持論ですが、コードは上から下に流れるよ
うに書くと読みやすいと思います。

最初の会社で C を書いていた頃は、特にそのようにしていましたが、LL
だとそう書けないことがあるので、最近は自重していました。Go はコン
パイル型言語で C にも似ているので、以前の書き方にしてみました。

外部変数を使うのも止めました。

PluginWithPrefix interface で実装した

以前の Plugin interface と違う点は MetricKeyPrefix() が増えた こと
です。7/6 に実装されている ので、むしろなぜ前回使わなかったのか、
という話もあります…。

MetricKeyPrefix() は mackerel-agent.conf でメトリクス名のコンフリ
クトを避けるために、CLI オプション -metric-key-prefix とともに実装
が奨励されています。

詳しくは README.md や以下の PR をどうぞ。

https://github.com/mackerelio/go-mackerel-plugin-helper/pull/15
※ この時の名前はまだ GetMetricKeyPrefix() です。

テストを書いた

おかげで少し堅牢な実装にすることが出来ました。CI も始めました。

Makefile を作った

何年ぶりだろう…?

現在は GitHub へのリリースの手間軽減のために、linux/amd64 用のバイ
ナリをビルドして、sha256 checksum を出力するだけです。まだ(?)自動
化はしていません。

終わりに

Mackerel plugin は Go の素振りをするのにちょうどよいサイズで、大変
気に入っています。なにかネタがあれば、積極的に作っていく予定です。