先週、とうとう Mackerel にグラフアノテーション機能がリリースされました。
この機能を使えば、「デプロイ実施」とか「ミドルウェアの設定を変更」などといったオペレーションの実施の記録に加えて、「経験値2倍キャンペーン開始」「CM放映スタート」といったビジネス施策としてのイベントの投稿もできるようになります。これらのイベントの以前・以後、といったグラフの見方がしやすくなるので、これは便利!!
"Mackerel オタク" を自称している身(参考)としてはスルーできないワクワク機能!ということで、早速自分のアプリケーションにも組み込んでみることにしました。
capistrano のデプロイタスクにグラフアノテーションの POST を組み込む
今回はとりあえずのお試しということで、capistrano のデプロイタスクのうち deploy:starting
でデプロイ開始時間のセットを行い、 deploy:finished
で終了時間の取得も含めたアノテーション情報の作成と POST の実行を行ってみた。
ありがたいことに、mackerel-client-ruby gem が既にグラフアノテーションに対応してくれているので、今回もこれを使うことにする。
Gemfile に追加して bundle install
。capistrano で扱えるよう、Capfile に require を追加する。
require 'mackerel'
Mackerel への投稿は本番ホストへのデプロイを行ったときのみ実行してほしいので、 config/deploy/production.rb
に以下のような記述を追加。
namespace :deploy do # Mackerel のグラフアノテーションのためにデプロイ開始時間を取得するだけのタスク task :starting do set :deploy_starttime, Time.now.to_i end task :finished do deploy_endtime = Time.now.to_i annotation = { service: 'home_a-know_me', role: [ 'web' ], from: fetch(:deploy_starttime), to: deploy_endtime, title: 'Application Deployed', description: 'Application deployed by capistrano' } mackerel_client = Mackerel::Client.new(mackerel_api_key: ENV['MACKEREL_APIKEY']) mackerel_client.post_graph_annotation(annotation) end end
API リクエストに必要な API キーは、何らかの手段により環境変数にセットしておくものとする。その他、だいぶ適当に書いているので、お仕事で使う場合などにはもう少し気を遣ってもらえればと思う。
上記の実行結果が↓これ。
楽勝じゃん pic.twitter.com/CsljwydJCs
— a-know (@a_know) 2017年1月29日
・・・良い!!
僕のこのリポジトリでは、master ブランチにマージしたタイミングで CircleCI からデプロイを行なうようにしている(むしろ手動では行わないようにしている)んだけど、そのタイミングでももちろんちゃんとアノテーションの投稿は行われる。
今回はアプリケーションのデプロイタイミングでのアノテーション投稿にとどまってしまったけど、Chef によるプロビジョニングも行っているのでそのタイミングでも、アノテーション投稿をするようにしたいと思う。
以下の p-r が、今回の作業を行ったものなので、よろしければ合わせてどうぞ。