弊社の @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 の素振りをするのにちょうどよいサイズで、大変
気に入っています。なにかネタがあれば、積極的に作っていく予定です。