Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@
{
"type": 1,
"content": {
"json": "## 🖥️ Azure Local - Managing Updates At Scale\r\n**Version: v0.6.5** | [Check for Updates to apply by checking the latest release available on GitHub](https://github.com/NeilBird/Azure-Local/tree/main/Azure-Local-Manage-Updates-At-Scale)\r\n\r\nThis example Workbook is a community driven project, (not officially supported by Microsoft). If you encounter any issues or have feedback, please [raise an Issue on GitHub](https://github.com/NeilBird/Azure-Local/issues)."
"json": "## 🖥️ Azure Local - Managing Updates At Scale\r\n**Version: v0.6.6** | [Check for Updates to apply by checking the latest release available on GitHub](https://github.com/NeilBird/Azure-Local/tree/main/Azure-Local-Manage-Updates-At-Scale)\r\n\r\nThis example Workbook is a community driven project, (not officially supported by Microsoft). If you encounter any issues or have feedback, please [raise an Issue on GitHub](https://github.com/NeilBird/Azure-Local/issues)."
},
"name": "workbook-title-version"
},
Expand Down Expand Up @@ -2132,6 +2132,241 @@
"sortBy": []
},
"name": "Offline Arcbridges (online Azure Local) - Copy"
},
{
"type": 1,
"content": {
"json": "---\r\n## 🔔 ARB Alert Rules Configuration\r\nCreate alert rules to monitor Arc Resource Bridge health and status. Get notified when ARBs go offline or encounter issues."
},
"name": "arb-alert-header"
},
{
"type": 9,
"content": {
"version": "KqlParameterItem/1.0",
"parameters": [
{
"id": "arb-alert-toggle",
"version": "KqlParameterItem/1.0",
"name": "ShowAlertRulesSection",
"label": "Show Alert Rules Setup",
"type": 10,
"isRequired": true,
"typeSettings": {
"additionalResourceOptions": [],
"showDefault": false
},
"jsonData": "[{\"value\": \"yes\", \"label\": \"Yes - Show Alert Setup\"}, {\"value\": \"no\", \"label\": \"No - Hide Alert Setup\"}]",
"value": "no"
}
],
"style": "pills",
"queryType": 0,
"resourceType": "microsoft.operationalinsights/workspaces"
},
"name": "arb-alert-toggle-param"
},
{
"type": 12,
"content": {
"version": "NotebookGroup/1.0",
"groupType": "editable",
"items": [
{
"type": 1,
"content": {
"json": "### 📋 Prerequisites for Alert Rules\r\n\r\n1. **Action Group**: Create or use an existing [Action Group](https://portal.azure.com/#view/Microsoft_Azure_Monitoring/ActionGroupsTemplateBlade) to receive notifications (Email, SMS, Webhook, etc.)\r\n2. **Permissions**: Contributor or Monitoring Contributor role on the subscription/resource group\r\n3. **Resource Health**: Azure Resource Health alerts are supported for Arc Resource Bridge\r\n\r\n---"
},
"name": "arb-alert-prereqs"
},
{
"type": 1,
"content": {
"json": "### 🎯 Recommended Alert Rules for Arc Resource Bridge\r\n\r\n| Alert Type | Description | Recommended Severity |\r\n|------------|-------------|---------------------|\r\n| **Offline Status** | ARB appliance status is 'Offline' | Sev 1 (Critical) |\r\n| **Resource Health - Unavailable** | ARB resource health state is unavailable | Sev 1 (Critical) |\r\n| **Resource Health - Degraded** | ARB resource health state is degraded | Sev 2 (Warning) |\r\n| **Extended Offline (>14 days)** | ARB has been offline for more than 14 days | Sev 0 (Critical) |\r\n\r\n⚠️ **Important**: Arc Resource Bridge can't be offline for more than 45 days or the security key will expire.\r\n\r\n---"
},
"name": "arb-alert-types"
},
{
"type": 1,
"content": {
"json": "### 🚀 Create Alert Rules\r\n\r\nSelect the Arc Resource Bridges below to create alert rules. Click the **Create Alert Rule** link to open Azure Portal with pre-configured settings."
},
"name": "arb-alert-instructions"
},
{
"type": 3,
"content": {
"version": "KqlItem/1.0",
"query": "resources\r\n| where type == \"microsoft.resourceconnector/appliances\"\r\n| where '{ResourceGroupFilter}' == '' or resourceGroup matches regex strcat('(?i)', replace_string(replace_string('{ResourceGroupFilter}', '*', '.*'), '?', '.'))\r\n| extend status = tostring(properties.status)\r\n| extend lastModified = todatetime(systemData.lastModifiedAt)\r\n| extend daysSinceLastModifiedNum = datetime_diff('day', now(), lastModified)\r\n| extend ResourceHealthAlertLink = strcat('https://portal.azure.com/#view/Microsoft_Azure_Monitoring/CreateAlertRuleFromResourceBlade/resourceId/', url_encode(id), '/alertType/ResourceHealth')\r\n| extend ActivityLogAlertLink = strcat('https://portal.azure.com/#view/Microsoft_Azure_Monitoring/CreateAlertRuleFromResourceBlade/resourceId/', url_encode(id), '/alertType/ActivityLog')\r\n| project \r\n ARBName = name, \r\n ResourceId = id,\r\n ResourceGroup = resourceGroup,\r\n SubscriptionId = subscriptionId,\r\n Status = status,\r\n DaysOffline = iff(status == \"Running\", 0, daysSinceLastModifiedNum),\r\n ResourceHealthAlertLink,\r\n ActivityLogAlertLink\r\n| join kind=leftouter (\r\n resources\r\n | where type == \"microsoft.azurestackhci/clusters\"\r\n | where '{ClusterTagName}' == '' or ('{ClusterTagValue}' != '' and tostring(tags['{ClusterTagName}']) =~ '{ClusterTagValue}')\r\n | project ClusterName = name, resourceGroup\r\n) on $left.ResourceGroup == $right.resourceGroup\r\n| extend ClusterName = coalesce(ClusterName, 'N/A')\r\n| project ARBName, ResourceGroup, ClusterName, Status, DaysOffline, ResourceHealthAlertLink, ActivityLogAlertLink, ResourceId\r\n| order by Status desc, DaysOffline desc",
"size": 0,
"showRefreshButton": true,
"showExportToExcel": true,
"queryType": 1,
"resourceType": "microsoft.resourcegraph/resources",
"crossComponentResources": [
"{Subscriptions}"
],
"gridSettings": {
"formatters": [
{
"columnMatch": "Status",
"formatter": 18,
"formatOptions": {
"thresholdsOptions": "icons",
"thresholdsGrid": [
{
"operator": "==",
"thresholdValue": "Running",
"representation": "success",
"text": "{0}{1}"
},
{
"operator": "==",
"thresholdValue": "Offline",
"representation": "4",
"text": "{0}{1}"
},
{
"operator": "Default",
"thresholdValue": null,
"representation": "warning",
"text": "{0}{1}"
}
]
}
},
{
"columnMatch": "DaysOffline",
"formatter": 18,
"formatOptions": {
"thresholdsOptions": "colors",
"thresholdsGrid": [
{
"operator": ">",
"thresholdValue": "14",
"representation": "redBright",
"text": "{0}{1} days"
},
{
"operator": ">=",
"thresholdValue": "1",
"representation": "yellow",
"text": "{0}{1} days"
},
{
"operator": "Default",
"thresholdValue": null,
"representation": "green",
"text": "Online"
}
]
}
},
{
"columnMatch": "ResourceHealthAlertLink",
"formatter": 7,
"formatOptions": {
"linkTarget": "Url",
"linkLabel": "🔔 Resource Health Alert"
}
},
{
"columnMatch": "ActivityLogAlertLink",
"formatter": 7,
"formatOptions": {
"linkTarget": "Url",
"linkLabel": "📋 Activity Log Alert"
}
},
{
"columnMatch": "ResourceId",
"formatter": 5
}
],
"filter": true,
"labelSettings": [
{
"columnId": "ARBName",
"label": "Arc Resource Bridge"
},
{
"columnId": "ResourceGroup",
"label": "Resource Group"
},
{
"columnId": "ClusterName",
"label": "Associated Cluster"
},
{
"columnId": "DaysOffline",
"label": "Days Offline"
},
{
"columnId": "ResourceHealthAlertLink",
"label": "Resource Health Alert"
},
{
"columnId": "ActivityLogAlertLink",
"label": "Activity Log Alert"
}
]
}
},
"name": "arb-alert-rules-table"
},
{
"type": 1,
"content": {
"json": "---\r\n### 📝 Manual Alert Rule Creation Steps\r\n\r\n**Option 1: Resource Health Alert (Recommended for Offline Detection)**\r\n1. Click **Resource Health Alert** link above for the specific ARB\r\n2. Configure the alert condition:\r\n - **Current resource status**: Select `Unavailable`\r\n - **Previous resource status**: Select `Available`\r\n - **Reason type**: Select `Platform Initiated` and `User Initiated`\r\n3. Select or create an **Action Group**\r\n4. Set alert severity (Sev 1 recommended for offline)\r\n5. Name the alert rule and create\r\n\r\n**Option 2: Activity Log Alert (For status changes)**\r\n1. Click **Activity Log Alert** link above for the specific ARB\r\n2. Select signal: `All Administrative operations`\r\n3. Filter by operation: `Microsoft.ResourceConnector/appliances/write`\r\n4. Select or create an **Action Group**\r\n5. Name the alert rule and create\r\n\r\n**Option 3: Azure Resource Graph Alert (Advanced - For bulk monitoring)**\r\n1. Go to [Azure Monitor Alert Rules](https://portal.azure.com/#view/Microsoft_Azure_Monitoring/AzureMonitoringBrowseBlade/~/alertsV2)\r\n2. Create a new **Log Search Alert**\r\n3. Use the following ARG query:\r\n```kusto\r\narg(\"\").resources\r\n| where type == \"microsoft.resourceconnector/appliances\"\r\n| where properties.status == \"Offline\"\r\n| project name, resourceGroup, status = tostring(properties.status)\r\n```\r\n4. Set condition: `Number of results > 0`\r\n5. Configure frequency (e.g., every 15 minutes)\r\n6. Select Action Group and create"
},
"name": "arb-manual-alert-steps"
},
{
"type": 11,
"content": {
"version": "LinkItem/1.0",
"style": "nav",
"links": [
{
"id": "create-action-group-link",
"cellValue": "https://portal.azure.com/#view/Microsoft_Azure_Monitoring/ActionGroupsTemplateBlade",
"linkTarget": "Url",
"linkLabel": "➕ Create Action Group",
"style": "link"
},
{
"id": "view-alert-rules-link",
"cellValue": "https://portal.azure.com/#view/Microsoft_Azure_Monitoring/AzureMonitoringBrowseBlade/~/alertsV2",
"linkTarget": "Url",
"linkLabel": "📋 View Existing Alert Rules",
"style": "link"
},
{
"id": "resource-health-docs-link",
"cellValue": "https://learn.microsoft.com/azure/service-health/resource-health-alert-monitor-guide",
"linkTarget": "Url",
"linkLabel": "📚 Resource Health Alerts Docs",
"style": "link"
},
{
"id": "arb-troubleshoot-link",
"cellValue": "https://learn.microsoft.com/azure/azure-arc/resource-bridge/troubleshoot-resource-bridge",
"linkTarget": "Url",
"linkLabel": "🔧 Troubleshoot ARB",
"style": "link"
}
]
},
"name": "arb-alert-quick-links"
}
]
},
"conditionalVisibility": {
"parameterName": "ShowAlertRulesSection",
"comparison": "isEqualTo",
"value": "yes"
},
"name": "arb-alert-rules-group"
}
]
},
Expand Down
45 changes: 34 additions & 11 deletions Azure-Local-Manage-Updates-At-Scale/README.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
# Azure Local - Managing Updates At Scale Workbook

## Latest Version: v0.6.5
## Latest Version: v0.6.6

📥 **[Copy / Paste (or download) the latest Workbook JSON](https://raw.githubusercontent.com/NeilBird/Azure-Local/refs/heads/main/Azure-Local-Manage-Updates-At-Scale/Azure-Workbook_AzLocal-Managing-Updates-At-Scale.json)**

An Azure Monitor Workbook for monitoring and managing Azure Local (formerly Azure Stack HCI) clusters at scale. This workbook provides comprehensive visibility into cluster health, update readiness, and workload status across your entire Azure Local fleet.

**Important:** This is a community driven project, (not officially supported by Microsoft), for any issues, requests or feedback, please [raise an Issue](https://github.com/NeilBird/Azure-Local/issues) (note: no time scales or guarantees can be provided for responses to issues.)

## Recent Changes (v0.6.5)

- **Clusters Currently Updating**:
- Added **Update Run** column with "View Progress" link to open the update history details page in Azure Portal

- **All Azure Resource Bridges (ARB) appliances**:
- Updated **Days Since Last Modified** column color coding:
- 🟢 Green: "Connected" for Running ARBs
- 🟡 Yellow: 1-45 days since last modified
- 🔴 Red: More than 45 days since last modified
## Recent Changes (v0.6.6)

- **ARB Alert Rules Configuration** (new section in ARB Status tab):
- Added toggle to show/hide Alert Rules setup panel
- **ARB Alert Rules Table** listing all Arc Resource Bridges with:
- Current status with visual indicators (Running/Offline)
- Days offline tracking with color coding (🟢 Online, 🟡 <14 days, 🔴 >14 days)
- Direct links to create **Resource Health** alerts in Azure Portal
- Direct links to create **Activity Log** alerts in Azure Portal
- **Prerequisites documentation**: Action Groups, permissions, Resource Health support
- **Recommended alert types** with severity guidance:
- Offline Status (Sev 1)
- Resource Health - Unavailable (Sev 1)
- Resource Health - Degraded (Sev 2)
- Extended Offline >14 days (Sev 0)
- **Manual alert rule creation steps** including sample ARG query for bulk monitoring
- **Quick Links**: Create Action Group, View Alert Rules, Resource Health docs, ARB troubleshooting

> See [Appendix: Previous Version Changes](#appendix-previous-version-changes) for older release notes.

Expand Down Expand Up @@ -191,6 +198,11 @@ Monitor the status of Azure Resource Bridge appliances:
- All ARB appliances table with filters for ARB Status and Cluster Name
- Shows "Connected" (green) for Running ARBs or days since last modified (yellow) for Offline ARBs
- Direct links to open ARB and cluster resources in the Azure portal
- **ARB Alert Rules Configuration** (toggle to show/hide):
- Table with direct links to create Resource Health and Activity Log alerts for each ARB
- Recommended alert types with severity guidance
- Step-by-step instructions for manual alert creation
- Quick links to Action Groups, Alert Rules, and documentation

![Azure Resource Bridges Status](images/arb-offline-screenshot.png)

Expand Down Expand Up @@ -293,6 +305,17 @@ See the repository's LICENSE file for details.

## Appendix: Previous Version Changes

### v0.6.5

- **Clusters Currently Updating**:
- Added **Update Run** column with "View Progress" link to open the update history details page in Azure Portal

- **All Azure Resource Bridges (ARB) appliances**:
- Updated **Days Since Last Modified** column color coding:
- 🟢 Green: "Connected" for Running ARBs
- 🟡 Yellow: 1-45 days since last modified
- 🔴 Red: More than 45 days since last modified

### v0.6.4

- **Network Adapter Details Improvements**:
Expand Down