対象者
システム運用チーム、SRE
効果
CICDツールやサービスの普及とともに、ソフトウェアのデプロイをより高頻度で行い、ユーザーに価値をより早く届けられるようになっています。より安全にデプロイできるようになったとしても、いつ、誰が(何のツールが)、どのような変更をデプロイしたのかをトラッキングし、その前後でのメトリクスの変化を把握するのは重要です。
例えば、デプロイと近い時間にパフォーマンス悪化が確認された場合、デプロイがトラックされていないと、どうしてもデプロイにその原因を求めてしまうでしょう。しかし、よく確認すると時間が少しだけしかし確実にずれていることや、デプロイの内容とパフォーマンス悪化の内容が関連しそうにないことが、デプロイをトラックしていることでわかります。その結果、パフォーマンス悪化はデプロイとは関係なくたまたま近い時間に発生したことがわかります。また、逆にデプロイそのものが原因だろうと言えるかもしれません。その場合は、一つ前のバージョンに切り戻す対応によりパフォーマンス悪化を止めることができるでしょう。
また、パフォーマンス改善のための変更をデプロイした場合、今度はその変更により期待通りの改善が見られたかを確認することも重要です。さらに、例えばクラウド仮想マシンのサイズの変更など、ソフトウェアの変更ではなくインフラ環境の変更もデプロイの一種としてトラッキングしたいでしょう。システムのリソース利用を踏まえて、インスタンスサイズを小さくしても影響は出ないはずだと仮定し、実際に変更した後、想定通り変化がないことを確認することで安心することができます。
一方、トラックの仕方の観点から見ると、CICDツール・サービスの普及により、様々な方法でデプロイが可能になっています。そして、もはや細かい手順を実行するのではなく、ボタンひとつ、あるいはChatOpsでコメント一つでデプロイが可能になっています。そのためデプロイのトラックはできるだけ汎用的な形で行えることが求められています。
New Relic 製品
New Relic APM
実装方法
New Relic APMではデプロイのトラックをREST APIで行うことができます。CLIでデプロイを行う場合はcurl
コマンドもしくはInvoke-WebRequest
コマンドレットで、自作のツールからデプロイを行う場合はツール内にREST APIを行う処理を挟むことでトラックを記録することができます。トラックできる内容は、一意にバージョンを識別する値、変更内容のサマリー、デプロイの説明、デプロイに紐づくユーザー、デプロイの時刻です。以下はcurlコマンドでのサンプルです。
curl -X POST "https://api.newrelic.com/v2/applications/APP_ID/deployments.json" \
-H "X-Api-Key:API_KEY" \
-i \
-H "Content-Type: application/json" \
-d \
'{
"deployment": {
"revision": "abc123",
"changelog": "PR#123",
"description": "v2 APIに対応したリソースを追加",
"user": "datanerd@example.com",
"timestamp": "2020-01-06T09:15:36Z"
}
}'
指定する内容の詳細なドキュメントデプロイメントを記録して監視を参照してください。 このようにしてトラックしたデプロイは、まずAPMのOverviewの画面などに縦線が入って表示されます。これにより、デプロイによってメトリクスに変化がないか、もしくは期待した通りの変化が得られているかを把握することが用意になります。

また、Deploymentsのページでデプロイの一覧と、詳細情報としてデプロイ前後の主要メトリクスの変化を一覧で確認できます。

例えば、最初の3件はデプロイした後にパフォーマンスが悪化し、修正デプロイをしたものの、最終的にバージョンを切り戻したという状況だったことがわかります。

また、カスタムアプリケーションを使ってデータの価値を最大限に引き出す で紹介したカスタムアプリケーションとして、New Relicがnr1-deployment-analyzerとして公開しているカスタムアプリケーションを使うとより詳細な分析も可能になります。 nr1-deployment-analyzer このようにデプロイメントをトラックすることで、デプロイメント前後でアプリケーションにどのような影響があるかをリアルタイムに、および後から分析することが可能になります。
New Relic 担当者にもう少し話を聞いてみたい場合はこちらまで!
The views expressed on this blog are those of the author and do not necessarily reflect the views of New Relic. Any solutions offered by the author are environment-specific and not part of the commercial solutions or support offered by New Relic. Please join us exclusively at the Explorers Hub (discuss.newrelic.com) for questions and support related to this blog post. This blog may contain links to content on third-party sites. By providing such links, New Relic does not adopt, guarantee, approve or endorse the information, views or products available on such sites.