GoでAWSのBilling情報をグラフ化するmackerel-pluginを作った

公式プラグインでも利用しているGo言語でのカスタムメトリックプラグイン作成用ライブラリの

github.com/mackerelio/go-mackerel-plugin

を利用して、GoでAWSのBilling情報をMackerelダッシュボードにグラフ化するmackerel-pluginを初めて作りました。


Mackerelの公式サイト


開発環境と実行環境


  • 開発環境


    • Mac: 10.14.1


      • Golang: 1.11.2

      • Goland





  • 実行環境


    • AWS


      • EC2


        • Ubuntu16.04

        • mackerel-agent

        • IAMロール(Billingが取得できる権限をEC2に付与)








今回作ったmackerel-plugin-awsbillingのソースコードは以下


EC2のUbuntuサーバに設定



  • Macローカルでmain.goをUbuntu上で動くようにクロスコンパイルする。



    • GOOS=linux go build -o bin/mkr-plugin-aws-billing




  • このpluginを実行するにはAWSのAPIを実行できるIAMが必要です。


    • 今回はEC2インスタンスにBiliing情報を取得できるようにIAMロールを付与しました。




  • Ubuntuサーバの以下のパスに配置しました。


    • /usr/local/yhidetoshi/mackerel-plugin-aws-billing




mackerel-agentを設定



  • /etc/mackerel-agent/mackerel-agent.confを以下のように別ファイルの設定も有効にできるようにする。

apikey = "XXXXXXXXXXXXX"

include = "/etc/mackerel-agent/*"


  • /etc/mackerel-agent/get_billing

[plugin.metrics.awsbilling]

command = '/usr/local/yhidetoshi/mackerel-plugin-aws-billing -region=us-east-1'


  • mackerel-agentを再起動する


    • $ sudo systemctl restart mackerel-agent




Mackerelダッシュボードのグラフを確認

mackerel-agentに設定したホストにカスタムメトリックにグラフが追加された。

mkr-aws-billing-qiita.png


Mackerel公式のレジストリに登録する

mackerelのレジストに登録されれば、mkr plugin install プラグイン名 でインストールすることができるようになる。方法は以下のMackerel公式のブログでで説明されている。

GitHubでリリースを自動化するために、TravisCIを利用。コード等は以下でサンプルが用意されていたので利用しました。

TravisCIで自動リリースすると、以下のように、コンパイルしたものをzip化されたものが生成される。

スクリーンショット 2019-01-19 12.16.05.png

リリースまで完了したら、以下のリポジトリにPullRequestを投げる。PRを投げるときは、以下のリポジトリをForkしてからPRを作成しました。

mackerel-plugin-git.png

→ PRがMergeされて、mkr plugin install プラグイン名 でインストールすることができるようになりました。

$ sudo mkr plugin install mackerel-plugin-awsbilling

Password:
Downloading https://github.com/yhidetoshi/mackerel-plugin-awsbilling/releases/download/v0.0.3/mackerel-plugin-awsbilling_darwin_amd64.zip
/opt/mackerel-agent/plugins/bin/mackerel-plugin-awsbilling already exists. Skip installing for now
Successfully installed mackerel-plugin-awsbilling


まとめ

Goを使って、mackerel-pluginを初めてつくりました。Pluginを作ることでGoの学習になりますし、またシステムを可視化することもできます。そして、作ったプラグインをmkrのレジストリに登録するところまでやりました。今後も別のプラグインを作っていければと思います。