Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

何もしてないのに壊れた時にApplication Change Analysisが便利

絶対何かしてますよね?

Azure Moniter機能の一つとして「Application Change Analysis」というものを最近見つけて、こりゃ便利だと思った次第です。

f:id:hawa9:20210324220703p:plain

ライブ サイトの問題や機能停止が発生した場合は、根本的な原因を迅速に特定することが重要です。 標準的な監視ソリューションでは、問題が警告される場合があります。 障害が発生しているコンポーネントが示される場合もあります。 ただし、この警告が障害の原因を直接的に説明しているとは限りません。 サイトは 5 分前には機能していたことがわかっています。そして今は機能していません。 この 5 分間でどのような変更があったのでしょうか。 これは、Azure Monitor でアプリケーション変更分析から回答が得られるように設計されている問題です。

変更分析は、Azure Resource Graph を基にして構築されており、Azure アプリケーションの変更に関する分析情報を提供し、可観測性を高めて MTTR (平均修理時間) を短縮します。

Azure Monitor でアプリケーション変更分析を使用して Web アプリの問題を見つける - Azure Monitor | Microsoft Docs

Application Change Analysisは「リソースの何を変更したか?」の変更履歴を見つけやすしてくれる機能です。「何もしてないのに壊れた」時に何したの?が追いやすくなります。正常時でも、どのような変更をしたか、複数人で作業してるとき、など変更を確認したい用途に使えます。

Let's Try

Application Change Analysisに対応しているリソースとしてAzure Web Appsで試してみます。適当にAzure Web Appsを作成します。

az group create -n rg-alteraadojo-changeanalysis -l japaneast
az appservice plan create -g rg-alteraadojo-changeanalysis -n plan-alteraadojo-changeanalysis --sku p1v3
az webapp create -g rg-alteraadojo-changeanalysis -p plan-alteraadojo-changeanalysis -n app-alteraadojo-changeanalysis --runtime "dotnet|5.0"

Azure PortalでApplication Change Analysisを開きます。

f:id:hawa9:20210324213453p:plain

Web AppsでApplication SettingsなどApp内(ゲスト)の変更履歴を有効にする場合は「Enable file and configuration change tracking(バナーの箇所)」の案内に従います(もしくはConfigureから)。

f:id:hawa9:20210324213552p:plain

有効にします。

f:id:hawa9:20210324213622p:plain

Azure CLIで設定するには tag hidden-related:diagnostics/changeAnalysisScanEnabled=true を追加します。

f:id:hawa9:20210324214041p:plain

Azure Portalからポチポチするのは手間なので、サブスクリプション内でまとめて有効にするAzure PowerShell版はあったので、Azure CLIを使ったスクリプトを書きました。複数サブスクリプションを扱っている場合はaz account setで対象サブシクリプションを切り替えてください。

az provider register -n "Microsoft.ChangeAnalysis"

ids=$(az appservice plan list --query "[].id" -o tsv)

echo "$ids" | while read line
do
    az tag update --resource-id $line --operation Replace --tags "hidden-related:diagnostics/changeAnalysisScanEnabled=true"

    # az tag update --resource-id $line --operation delete --tags "hidden-related:diagnostics/changeAnalysisScanEnabled=true"
done

適当にリソース変更をしてみます。

az webapp update -n app-alteraadojo-changeanalysis -g rg-alteraadojo-changeanalysis --https-only
az webapp config appsettings set -n app-alteraadojo-changeanalysis -g rg-alteraadojo-changeanalysis --settings ENV=aadojo

f:id:hawa9:20210324214235p:plain

f:id:hawa9:20210324214247p:plain

変更箇所の確認ができました。

なお、Web Appsは「問題の診断と解決」の「Availability and Performance」からも確認できます。

f:id:hawa9:20210324214347p:plain

f:id:hawa9:20210324214402p:plain

f:id:hawa9:20210324214419p:plain

Application Change Analysisの利用には料金が発生しません。Web Appsで有効にすることによるパフォーマンス影響も無視して良いレベルとのこと。

アプリケーション変更分析は無料のサービスであり、これが有効になっているサブスクリプションに対する課金コストは発生しません。 また、Azure リソース プロパティの変更をスキャンしても、サービスのパフォーマンスに影響はありません。 Web アプリのゲスト内のファイル変更に対して変更分析を有効にすると (あるいは、問題の診断と解決ツールを有効にすると)、Web アプリのパフォーマンスに影響が出ますが、それは無視しても構わない程度であり、また、課金コストは発生しません。

https://docs.microsoft.com/ja-jp/azure/azure-monitor/app/change-analysis#cost

Application Change Analysisで何かあった時に備えると良さそうですね。