対象者
システム運用チーム、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 担当者にもう少し話を聞いてみたい場合はこちらまで!
이 블로그에 표현된 견해는 저자의 견해이며 반드시 New Relic의 견해를 반영하는 것은 아닙니다. 저자가 제공하는 모든 솔루션은 환경에 따라 다르며 New Relic에서 제공하는 상용 솔루션이나 지원의 일부가 아닙니다. 이 블로그 게시물과 관련된 질문 및 지원이 필요한 경우 Explorers Hub(discuss.newrelic.com)에서만 참여하십시오. 이 블로그에는 타사 사이트의 콘텐츠에 대한 링크가 포함될 수 있습니다. 이러한 링크를 제공함으로써 New Relic은 해당 사이트에서 사용할 수 있는 정보, 보기 또는 제품을 채택, 보증, 승인 또는 보증하지 않습니다.