えいのうにっき

a-knowの日記です

capistrano によるデプロイ時に Mackerel へのグラフアノテーション投稿も同時に行なう

先週、とうとう Mackerel にグラフアノテーション機能がリリースされました。

mackerel.io

この機能を使えば、「デプロイ実施」とか「ミドルウェアの設定を変更」などといったオペレーションの実施の記録に加えて、「経験値2倍キャンペーン開始」「CM放映スタート」といったビジネス施策としてのイベントの投稿もできるようになります。これらのイベントの以前・以後、といったグラフの見方がしやすくなるので、これは便利!!

"Mackerel オタク" を自称している身(参考)としてはスルーできないワクワク機能!ということで、早速自分のアプリケーションにも組み込んでみることにしました。

capistrano のデプロイタスクにグラフアノテーションの POST を組み込む

今回はとりあえずのお試しということで、capistrano のデプロイタスクのうち deploy:starting でデプロイ開始時間のセットを行い、 deploy:finished で終了時間の取得も含めたアノテーション情報の作成と POST の実行を行ってみた。

ありがたいことに、mackerel-client-ruby gem が既にグラフアノテーションに対応してくれているので、今回もこれを使うことにする。

github.com

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 キーは、何らかの手段により環境変数にセットしておくものとする。その他、だいぶ適当に書いているので、お仕事で使う場合などにはもう少し気を遣ってもらえればと思う。

上記の実行結果が↓これ。

・・・良い!!

僕のこのリポジトリでは、master ブランチにマージしたタイミングで CircleCI からデプロイを行なうようにしている(むしろ手動では行わないようにしている)んだけど、そのタイミングでももちろんちゃんとアノテーションの投稿は行われる。

今回はアプリケーションのデプロイタイミングでのアノテーション投稿にとどまってしまったけど、Chef によるプロビジョニングも行っているのでそのタイミングでも、アノテーション投稿をするようにしたいと思う。

以下の p-r が、今回の作業を行ったものなので、よろしければ合わせてどうぞ。

github.com