SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

Azure Local で更新プログラムの適用準備が完了したら Azure Monitor で通知する

leave a comment

Azure Local は新しい更新プログラムが提供され、適用準備が完了している場合、Azlure Local クラスターのブレードに未適用の更新プログラムが存在していること示すメッセージが表示されます。

image

この仕組みを使用して、Azure Local クラスターで未適用の更新プログラムが存在し、適用準備ができている環境があった場合に、Azure Monitor からアラートを通知することができるかを検証した際の内容となります。

Azure Local のクラスターのシステムアラートの「UpdateAvailable」の警告としても、未適用のアップデートは検知されているようですので、Azure Monitor のルールを手動で作成しての通知 / 分析情報を取得しアラート処理ルールを使用して通知の 2 種類の方法で通知ができそうでした。

Azure Monitor を使用した通知

前述のとおり、未適用の更新プログラムが存在している場合、Azure Local クラスターのブレードを開いた際に表示が行われます。

この時の情報ですが、Azure Resource Graph の ExtensibilityResources の情報から取得が行われているようです。

Azure Resource Graph Explorer から次のクエリを実行すると、Azure Local クラスターの更新プログラムの適用情報のサマリーを取得し、更新プログラムの適用準備ができているクラスターの取得ができます。

ExtensibilityResources 
| where type =~ 'microsoft.azurestackhci/clusters/updateSummaries'
| where properties.state =~'UpdateAvailable'

 

この情報を Azure Monitor ログで取得することで、更新プログラムの適用準備ができたタイミングで通知を行うことができます。

Azure Resource Graph と Log Analytics を使用してアラートを作成する 等でサンプルが公開されていますが、Azure Monitor ログから Resource Graph にアクセスする際には「arg("")」を使用することでアクセスができます。

これを使用して、次のクエリを使用してアラートを作成することで、Azure Local に適用可能な更新プログラムの準備ができたタイミングで、通知を行うことができます。

arg("").ExtensibilityResources
| where type =~ 'microsoft.azurestackhci/clusters/updateSummaries'
| where properties.state =~'UpdateAvailable'
| project resourceGroup, cluster=extract(@"/clusters/([^/]+)", 1, id), properties.state, properties.currentVersion, systemData.CreatedAt,systemData.LastModifiedAt

 

image

properties.state を調整すれば、任意の状態になった場合に通知することも可能ですので、基本形が把握できていればいろいろと活用できるのではないでしょうか。

頻繁にアラートが飛ぶのを抑制する場合には、測定 / アラートロジックの間隔を調整し、

image

アラートのミュート期間を調整することで、1 日の中で何度もアラートが送信されてくるのを抑制することができます。

image

 

 

分析情報の有効化によるアラートの通知

Azure Local の 分析情報 (Insights) を有効化することで、未適用の更新プログラムの検知を行うこともできそうです。

分析情報の「正常性」でも UpdateAvailable の検知が行われていました。

image

これは次のようなクエリで情報の参照が行われているようです。

Event
| where EventLog =~ "Microsoft-Windows-Health/Operational"
| extend description = parse_json(RenderedDescription)
| extend CorrelationId = tostring(description.CorrelationId)
| where CorrelationId =~ 'a24502f4-f511-4fe3-94ee-f7064d242393'
| where tostring(description.Fault.RootObjectType) == 'Microsoft.Health.EntityType.Cluster'
| extend Fault = description.Fault
| extend ShortDescription = split(tostring(Fault.Type), '.')[-1]
| extend Severity = toint(Fault.Severity)
| extend FaultingResourceType = split(tostring(Fault.ObjectType), '.')[-1]
| extend FaultingResourceId = tostring(Fault.ObjectId)
| extend ReportedTime = datetime_add('Microsecond', tolong(Fault.Timestamp) / 10, make_datetime(1601, 1, 1))
| extend Detail = pack(
                      "Severity",
                      iff(Severity == 0, "Healthy", iff(Severity == 1, "Warning", iff(Severity == 2, "Critical", "Unknown"))),
                      "Faulting Resource ID",
                      FaultingResourceId,
                      "Faulting Resource Type",
                      FaultingResourceType,
                      "Reported Time",
                      ReportedTime,
                      "Short Description",
                      ShortDescription,
                      "Description",
                      tostring(Fault.Description),
                      "Remediation",
                      tostring(Fault.Remediation)
                  )
| sort by ReportedTime asc
| project
    ShortDescription,
    Detail,
    FaultingResourceType,
    FaultingResourceId,
    Severity,
    ReportedTime

 

分析情報を有効にすると、Azure Local の 「Microsoft-Windows-Health/Operational」のイベントが データ収取ルール で取得が行われます。

アラート処理ルール として、Azure Local のリソースまたはリソースグループに対して処理ルールを設定しておくことで検知されたアラートを通知することができます。

個別にアラートを設定するよりは、分析情報経由でアラート処理ルールを使用したほうが汎用性がありそうですね。

Share

Written by Masayuki.Ozawa

7月 6th, 2025 at 8:54 pm

Posted in Azure Local

Tagged with

Leave a Reply