リリースと作業項目の分析情報は、ソフトウェア開発ライフサイクルを最適化するために不可欠です。 アプリケーションが進化するにつれて、各リリースとその作業項目を注意深く監視することが重要です。 これらの分析情報は、パフォーマンスのボトルネックを強調し、チームが先を見越して問題に対処できるようにして、スムーズなデプロイとユーザー エクスペリエンスを確保します。 開発者と利害関係者が意思決定を行い、プロセスを調整し、高品質のソフトウェアを提供できるようにします。
Azure Pipelines と Application Insights を統合すると、ソフトウェア開発ライフ サイクル全体を通して、Azure DevOps リリース パイプラインを継続的に監視できます。
継続的な監視により、リリース パイプラインに Application Insights などの Azure リソースから監視データを組み込むことができます。 リリース パイプラインで Application Insights アラートが検出されると、アラートが解決されるまで、パイプラインによってデプロイがゲート処理またはロールバックされる可能性があります。 すべてのチェックが成功すると、展開はテストから実稼働まですべて自動で進められます。手動による介入は必要ありません。
Azure DevOps で、組織とプロジェクトを選択します。
プロジェクト ページの左側のメニューで、 [パイプライン]>[リリース] を選択します。
[新規] の横にあるドロップダウンの矢印を選択し、[新しいリリース パイプライン] を選択します。 また、まだパイプラインがない場合は、表示されるページで [新しいパイプライン] を選択します。
[テンプレートの選択] ウィンドウで [継続的監視を使用した Azure App Service の配置] を探して選択し、 [適用] を選択します。
[ステージ 1] ボックスで、 [ステージ タスクを表示します] のハイパーリンクを選択します。
[ステージ 1] 構成ペインで、次のフィールドを入力します。
パラメーター |
値 |
ステージ名 |
ステージ名を指定するか、[ステージ 1] のままにします。 |
Azure サブスクリプション |
ドロップダウンの矢印を選択し、使用するリンクされた Azure サブスクリプションを選択します。 |
アプリの種類 |
ドロップダウンの矢印を選択し、アプリの種類を選択します。 |
App Service の名前 |
Azure App Service の名前を入力します。 |
Application Insights 用のリソース グループ名 |
ドロップダウンの矢印を選択し、使用するリソース グループを選択します。 |
Application Insights のリソース名 |
ドロップダウンの矢印を選択し、選択したリソース グループの Application Insights リソースを選択します。 |
既定のアラート ルール設定でパイプラインを保存するには、Azure DevOps ウィンドウの右上隅にある [保存] を選択します。 わかりやすいコメントを入力し、[OK] を選択します。
アラート ルールを変更する
継続的監視を使用した Azure App Service の配置テンプレートには、既定で、可用性、失敗した要求、サーバー応答時間、サーバー例外の 4 つのアラート ルールがあります。 サービス レベルのニーズに合わせて、ルールを追加したり、ルール設定を変更したりすることができます。
アラート ルール設定を変更するには:
リリース パイプライン ページの左側のウィンドウで、 [Configure Application Insights Alerts](Application Insights アラートの構成) を選択します。
インライン スクリプトによって 4 つの既定のアラート ルールが作成されます。
$subscription = az account show --query "id";$subscription.Trim("`"");$resource="/subscriptions/$subscription/resourcegroups/"+"$(Parameters.AppInsightsResourceGroupName)"+"/providers/microsoft.insights/components/" + "$(Parameters.ApplicationInsightsResourceName)";
az monitor metrics alert create -n 'Availability_$(Release.DefinitionName)' -g $(Parameters.AppInsightsResourceGroupName) --scopes $resource --condition 'avg availabilityResults/availabilityPercentage < 99' --description "created from Azure DevOps";
az monitor metrics alert create -n 'FailedRequests_$(Release.DefinitionName)' -g $(Parameters.AppInsightsResourceGroupName) --scopes $resource --condition 'count requests/failed > 5' --description "created from Azure DevOps";
az monitor metrics alert create -n 'ServerResponseTime_$(Release.DefinitionName)' -g $(Parameters.AppInsightsResourceGroupName) --scopes $resource --condition 'avg requests/duration > 5' --description "created from Azure DevOps";
az monitor metrics alert create -n 'ServerExceptions_$(Release.DefinitionName)' -g $(Parameters.AppInsightsResourceGroupName) --scopes $resource --condition 'count exceptions/server > 5' --description "created from Azure DevOps";
スクリプトに変更を加え、アラート ルールをさらに追加できます。 アラート条件に変更を加えることもできます。 また、配置の目的に適さないアラート ルールを削除することもできます。
展開の条件を追加する
リリース パイプラインに配置ゲートを追加すると、設定したしきい値を超えるアラートによって、不要なリリース プロモーションが防止されます。 アラートを解決すると、配置は自動的に進められます。
配置ゲートを追加するには:
メイン パイプライン ページの [ステージ] で、どのステージで連続監視ゲートが必要かに応じて、 [配置前条件] または [配置後の条件] シンボルを選択します。
[配置前条件] 構成ウィンドウで、 [ゲート] を [有効] に設定します。
[ゲートの配置] の横にある [追加] を選択します。
ドロップダウン メニューから [Azure Monitor アラートのクエリ] を選択します。 このオプションを使用すると、Azure Monitor と Application Insights の両方のアラートにアクセスできます。
[評価のオプション] で、 [ゲートの再評価までの時間] や [ゲートが失敗するまでのタイムアウト] など、設定に必要な値を入力します。
リリース ログを表示する
リリース ログで、配置ゲートの動作やその他のリリース手順を確認できます。 ログを開くには:
パイプライン ページの左側のメニューから [リリース] を選択します。
任意のリリースを選択します。
[ステージ] で、ステージを選択してリリースの概要を表示します。
ログを表示するには、リリースの概要で [ログの表示] を選択するか、任意のステージで [成功] または [失敗] のハイパーリンクを選択するか、任意のステージにカーソルを合わせて [ログ] を選択します。
注釈は、新しいビルドのデプロイ先やその他の重要なイベントを示します。 注釈により、変更内容がアプリケーションのパフォーマンスに影響を与えたかどうかを簡単に把握できます。 それらは、Azure Pipelines ビルド システムで自動的に作成できます。 PowerShell から作成することにより、任意のイベントにフラグを設定する注釈を作成することもできます。
Azure Pipelines ビルドでのリリース注釈
リリース注釈は、Azure DevOps のクラウド ベースの Azure Pipelines サービスの機能です。
次のすべての条件が満たされた場合、デプロイ タスクによってリリース注釈が自動的に作成されます。
デプロイ先のリソースは、APPINSIGHTS_INSTRUMENTATIONKEY
アプリ設定を通じて Application Insights にリンクされている。
Application Insights リソースは、デプロイ先のリソースと同じサブスクリプション内にある。
次の Azure DevOps パイプライン タスクのいずれかを使用している。
タスク コード |
タスク名 |
バージョン |
AzureAppServiceSettings |
Azure App Service の設定 |
Any |
AzureRmWebAppDeployment |
Azure App Service のデプロイ |
V3 以上 |
AzureFunctionApp |
Azure Functions |
Any |
AzureFunctionAppContainer |
コンテナー用の Azure Functions |
Any |
AzureWebAppContainer |
Azure Web App for Containers |
Any |
AzureWebApp |
Azure Web アプリ |
Any |
Note
引き続き Application Insights 注釈のデプロイ タスクを使用している場合は、それを削除する必要があります。
前のセクションのデプロイ タスクのいずれかを使用できない場合は、デプロイ パイプラインにインライン スクリプト タスクを追加する必要があります。
新規または既存のパイプラインに移動し、タスクを選択します。
新しいタスクを追加し、 [Azure CLI] を選択します。
関連する Azure サブスクリプションを指定します。 [スクリプトの種類] を [PowerShell] に、[スクリプトの場所] を [インライン] に変更します。
次のセクションの手順 2 の PowerShell スクリプトを [インライン スクリプト] に追加します。
次の引数を追加します。 山かっこで囲まれたプレースホルダーをスクリプト引数の値に置き換えます。 -releaseProperties
は省略可能です。
-aiResourceId "<aiResourceId>" `
-releaseName "<releaseName>" `
-releaseProperties @{"ReleaseDescription"="<a description>";
"TriggerBy"="<Your name>" }
次の例は、build および release 変数を使用してオプションの releaseProperties
引数に設定できるメタデータを示しています。
-releaseProperties @{
"BuildNumber"="$(Build.BuildNumber)";
"BuildRepositoryName"="$(Build.Repository.Name)";
"BuildRepositoryProvider"="$(Build.Repository.Provider)";
"ReleaseDefinitionName"="$(Build.DefinitionName)";
"ReleaseDescription"="Triggered by $(Build.DefinitionName) $(Build.BuildNumber)";
"ReleaseEnvironmentName"="$(Release.EnvironmentName)";
"ReleaseId"="$(Release.ReleaseId)";
"ReleaseName"="$(Release.ReleaseName)";
"ReleaseRequestedFor"="$(Release.RequestedFor)";
"ReleaseWebUrl"="$(Release.ReleaseWebUrl)";
"SourceBranch"="$(Build.SourceBranch)";
"TeamFoundationCollectionUri"="$(System.TeamFoundationCollectionUri)" }
[保存] を選択します。
Azure CLI を使用してリリース注釈を作成する
Azure DevOps を使わずに、CreateReleaseAnnotation
PowerShell スクリプトを使って、任意のプロセスから注釈を作成できます。
Azure CLI にサインインします。
次のスクリプトのローカル コピーを作成し、CreateReleaseAnnotation.ps1
と名前を付けます。
param(
[parameter(Mandatory = $true)][string]$aiResourceId,
[parameter(Mandatory = $true)][string]$releaseName,
[parameter(Mandatory = $false)]$releaseProperties = @()
)
# Function to ensure all Unicode characters in a JSON string are properly escaped
function Convert-UnicodeToEscapeHex {
param (
[parameter(Mandatory = $true)][string]$JsonString
)
$JsonObject = ConvertFrom-Json -InputObject $JsonString
foreach ($property in $JsonObject.PSObject.Properties) {
$name = $property.Name
$value = $property.Value
if ($value -is [string]) {
$value = [regex]::Unescape($value)
$OutputString = ""
foreach ($char in $value.ToCharArray()) {
$dec = [int]$char
if ($dec -gt 127) {
$hex = [convert]::ToString($dec, 16)
$hex = $hex.PadLeft(4, '0')
$OutputString += "\u$hex"
}
else {
$OutputString += $char
}
}
$JsonObject.$name = $OutputString
}
}
return ConvertTo-Json -InputObject $JsonObject -Compress
}
$annotation = @{
Id = [GUID]::NewGuid();
AnnotationName = $releaseName;
EventTime = (Get-Date).ToUniversalTime().GetDateTimeFormats("s")[0];
Category = "Deployment"; #Application Insights only displays annotations from the "Deployment" Category
Properties = ConvertTo-Json $releaseProperties -Compress
}
$annotation = ConvertTo-Json $annotation -Compress
$annotation = Convert-UnicodeToEscapeHex -JsonString $annotation
$accessToken = (az account get-access-token | ConvertFrom-Json).accessToken
$headers = @{
"Authorization" = "Bearer $accessToken"
"Accept" = "application/json"
"Content-Type" = "application/json"
}
$params = @{
Headers = $headers
Method = "Put"
Uri = "https://management.azure.com$($aiResourceId)/Annotations?api-version=2015-05-01"
Body = $annotation
}
Invoke-RestMethod @params
Note
- Azure portal に表示するには、注釈で Category に Deployment を設定する必要があります。
- "要求にエンティティの本文はありますが、Content-Type ヘッダーがありません" というエラーが表示された場合は、次の行で replace パラメーターを削除してみてください。
$body = (ConvertTo-Json $annotation -Compress)
次のコードを使用して PowerShell スクリプトを呼び出します。 山かっこで囲まれたプレースホルダーを実際の値に置き換えます。 -releaseProperties
は省略可能です。
.\CreateReleaseAnnotation.ps1 `
-aiResourceId "<aiResourceId>" `
-releaseName "<releaseName>" `
-releaseProperties @{"ReleaseDescription"="<a description>";
"TriggerBy"="<Your name>" }
引数 |
定義 |
Note |
aiResourceId |
ターゲットの Application Insights リソースへのリソース ID。 |
例: /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/MyRGName/providers/microsoft.insights/components/MyResourceName |
releaseName |
作成したリリース注釈に付ける名前。 |
|
releaseProperties |
カスタム メタデータを注釈にアタッチするために使用されます。 |
オプション |
注釈を表示する
Note
リリース注釈は、Application Insights の [メトリクス] ペインでは現在使用できません。
このリリース テンプレートを使用して新しいリリースをデプロイするたびに、注釈が Application Insights に送信されます。 注釈は、次の場所で表示できます。
ブックの注釈を有効にするには、 [詳細設定] に移動して [コメントを表示する] を選択します。
注釈マーカーを選択すると、要求元、ソース管理のブランチ、リリース パイプライン、環境を含む、リリースに関する詳細が表示されます。
API キーを使用したリリース注釈
リリース注釈は、Azure DevOps のクラウド ベースの Azure Pipelines サービスの機能です。
重要
API キーを使用した注釈は非推奨になりました。 代わりに Azure CLI を使用することをお勧めします。
注釈拡張機能をインストールする (1 回限り)
リリース注釈を作するには、Visual Studio Marketplace で入手可能な Azure DevOps 拡張機能のいずれかをインストールします。
Azure DevOps プロジェクトにサインインします。
Visual Studio Marketplace のリリース注釈拡張機能のページで、Azure DevOps 組織を選択します。 [インストール] を選択して、拡張機能を Azure DevOps 組織に追加します。
Azure DevOps 組織に拡張機能をインストールする必要があるのは一度だけです。 これで、組織内の任意のプロジェクトに対してリリース注釈を構成できるようになります。
Azure Pipelines のリリース テンプレートごとに個別の API キーを作成します。
Azure portal にサインインし、アプリケーションを監視する Application Insights リソースを開きます。 または、まだない場合は、新しい Application Insights リソースを作成します。
[API アクセス] タブを開き、 [Application Insights ID] をコピーします。
別のブラウザー ウィンドウで、Azure Pipelines のデプロイを管理するリリース テンプレートを開くか、作成します。
[タスクの追加] を選択した後、メニューから [Application Insights Release Annotation](Application Insights リリース注釈) タスクを選択します。
Note
[リリース注釈] タスクは現在、Windows ベースのエージェントのみをサポートしています。 Linux、macOS、またはその他の種類のエージェントでは実行できません。
[アプリケーション ID] に、 [API アクセス] タブからコピーした Application Insights ID を貼り付けます。
Application Insights の [API アクセス] ウィンドウに戻り、 [API キーの作成] を選択します。
[API キーの作成] ウィンドウで説明を入力し、[コメントを書く] を選択して、[キーの生成] を選択します。 新しいキーをコピーします。
リリース テンプレート ウィンドウの [変数] タブで、 [追加] を選択して新しい API キーの変数定義を作成します。
[名前] の下に、「ApiKey」と入力します。 [値] の下に、[API アクセス] タブからコピーした API キーを貼り付けます。
メイン リリース テンプレート ウィンドウで [保存] 選択して、テンプレートを保存します。
新しいリリース注釈に切り替える
新しいリリース注釈を使用するには:
- リリース注釈拡張機能を削除します。
- Azure Pipelines デプロイの Application Insights リリース注釈タスクを削除します。
- Azure Pipelines または Azure CLI を使用して、新しいリリース注釈を作成します。
作業項目の統合機能を使用すると、関連する Application Insights データが埋め込まれている作業項目を GitHub または Azure DevOps で簡単に作成できます。
新しい作業項目の統合では、クラシックを介して次の機能が提供されます。
- 担当者、プロジェクト、マイルストーンなどの高度なフィールド。
- リポジトリ アイコンを使用した、GitHub & Azure DevOps ブックの区別。
- 任意の数のリポジトリまたは作業項目に対する複数の構成。
- Azure Resource Manager テンプレートによるデプロイ。
- 事前定義された、カスタマイズ可能なキーワード クエリ言語 (KQL) クエリを使用して、作業項目に Application Insights データを追加します。
- カスタマイズ可能なブック テンプレート。
作業項目テンプレートを作成するには、Application Insights リソースに移動し、左側の [構成] の下にある [作業項目] を選択してから、上部にある [テンプレートの新規作成] を選択します。
現在テンプレートが存在しない場合は、[end-to-end transaction details (エンド ツー エンド トランザクションの詳細)] タブから作業項目テンプレートを作成することもできます。 イベントを選択し、右側の [作業項目を作成する] 、 [ブック テンプレートから始める] の順に選択します。
[テンプレートの新規作成] を選択した後、追跡システムを選択し、ブックに名前を設定し、選択した追跡システムにリンクして、このテンプレートを格納するリージョンを選択できます (既定は Application Insights リソースがあるリージョンです)。 URL パラメーターは、 https://github.com/myusername/reponame
や https://dev.azure.com/{org}/{project}
など、リポジトリの既定の URL です。
テンプレート自体から、特定の作業項目のプロパティを直接設定できます。 これには、バージョン コントロール プロバイダーに基づき、担当者、イテレーション パス、プロジェクトなどが含まれます。
作業項目の作成
[Performance](パフォーマンス)、[Failures](障害)、[Availability](可用性)、その他のタブからアクセスできる [エンド ツー エンド トランザクションの詳細] で新しいテンプレートにアクセスできます。
作業項目を作成するには、[エンドツーエンドのトランザクションの詳細] に移動してイベントを選択し、 [作業項目の作成] を選択して、作業項目テンプレートを選択します。
ブラウザーで新しいタブが開き、選択した追跡システムが表示されます。 Azure DevOps では、バグまたはタスクを作成できます。GitHub では、リポジトリに新しい問題を作成できます。 Application Insights によって提供されるコンテキスト情報を使用して、新しい作業項目が自動的に作成されます。
テンプレートの編集
テンプレートを編集するには、 [構成] の下にある [作業項目] タブにアクセスし、更新するブックの横にある鉛筆アイコンを選択します。
上部ツール バーの [編集] を選択します。
複数の作業項目構成を作成し、各シナリオに合わせてカスタム ブックを作成できます。 また、環境全体で標準の実装を実現する Azure Resource Manager によって、ブックをデプロイすることもできます。
クラシック作業項目の統合
[構成] の下の Application Insights リソースで、 [作業項目] を選択します。
[Switch to Classic (クラシックに切り替え)] を選択し、フィールドに情報を入力して承認します。
[end-to-end transaction details (エンドツーエンドのトランザクションの詳細)] からイベントを選択し、 [Create work item (Classic) (作業項目の作成 (クラシック))] を選択して作業項目を作成します。
新しい作業項目の統合への移行
移行するには、従来の作業項目の構成を削除し、統合を再作成するために作業項目テンプレートを作成し構成します。
削除するには、Application Insights リソースの [構成] で [作業項目] を選択し、上部にある [Switch to Classic (クラシックに切り替え)] と、*[削除する] を選択します。