kakakakakku blog

Weekly Tech Blog: Keep on Learning!

New Relic の "Deployment Tracking" でデプロイ前後のパフォーマンスを比較すると便利

New Relic APM で PRO 契約をすると "Deployment Tracking" という機能が使えるようになる(最近契約した).

  • デプロイ情報(タイムスタンプ/変更点など)を New Relic に登録できる
  • デプロイ前後のパフォーマンス比較(Apdex Score/Responce Time など)を確認できる

アプリケーションのパフォーマンスが良くなったり,悪くなったりしたときに,判断基準として「どのデプロイがトリガーになったか?」をすぐに知ることができれば,デプロイ対象となったプルリクエストを中心に一次調査ができるし,運用上のメリットは大きいと思う.New Relic APM PRO を使ってるなら "Deployment Tracking" を使わないと損!

デプロイ一覧

検証用に3回登録してみた.

f:id:kakku22:20161123010354p:plain

パフォーマンス比較

グラフ上に縦棒(デプロイしたタイミング)がプロットされて前後の差を確認できる.

f:id:kakku22:20161123010813p:plain

(プライベート情報が多いため Deployments page | New Relic Documentation から引用した)

デプロイ情報の登録

大きく2種類の登録方法がある.

  • REST API
  • Agent

docs.newrelic.com

1. REST API

今回はお手軽に使える REST API を使うことにした.前提として "Admin's API key" を発行しておく必要がある."Admin's API key" と "REST API key" は異なるので注意すること.

docs.newrelic.com

エンドポイントは3種類ある.

  • GET : List
  • POST : Create
  • DELETE : Delete

以下のパラメータは変数のままにしてある.

  • {application_id}
  • {api_key}
  • {id}

1-1. List

$ curl -X GET 'https://api.newrelic.com/v2/applications/{application_id}/deployments.json' \
       -H 'X-Api-Key:{api_key}' -i

1-2. Create

送信するパラメータは全て任意の文字列を登録することができる.

revision は必須パラメータで,ドキュメントには "such as a git SHA" と書いてあってコミットハッシュを登録するようだった.その他の changelogdescriptionuser は必須ではなく,必要に応じて使うことになる.user はデフォルトでアカウント名(企業名)が入っていた.

$ curl -X POST 'https://api.newrelic.com/v2/applications/{application_id}/deployments.json' \
       -H 'X-Api-Key:{api_key}' -i \
       -H 'Content-Type: application/json' \
       -d \
'{
  "deployment": {
    "revision": "string",
    "changelog": "string",
    "description": "string",
    "user": "string"
  }
}' 

今回は revision にタイムスタンプを含めるようにした.コマンドは以下の通り.

$ curl -X POST 'https://api.newrelic.com/v2/applications/{application_id}/deployments.json' \
       -H 'X-Api-Key:{api_key}' -i \
       -H 'Content-Type: application/json' \
       -d @<(cat <<EOF
{
  "deployment": {
    "revision": "$(date +%Y%m%d_%H%M)"
  }
}
EOF
)

1-3. Delete

$ curl -X DELETE 'https://api.newrelic.com/v2/applications/{application_id}/deployments/{id}.json' \
       -H 'X-Api-Key:{api_key}' -i

2. Agent

今回は試していないけど,言語ごとの Agent に機能が含まれている.

Rails の場合は Capistrano の deploy.rb に以下のタスクを追加するだけで良く,より簡単に使えるようになっている.

after "deploy:updated", "newrelic:notice_deployment"

API Explore

REST API を試すときは API Explore を使うと便利だった.Swagger をベースに作られたドキュメントで,API 仕様を読みながら実際に API をコールすることができる.

f:id:kakku22:20161123012814p:plain

デプロイ情報は現在時刻で登録される点に注意

"Deployment Tracking" の制約として,デプロイ情報は現在時刻で登録されることになる.よって,過去のデプロイ情報をまとめて登録することはできなかった.

Note that the time of your deployment will be recorded as the current time in UTC.