deployparam.yaml (145 lines of code) (raw):
subscriptionId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" # Replace the value for subscriptionId below with your Azure subscription ID
bicepParam:
parDeploymentPrefix: "asrdemo" # Set the preferred value for Prefix for all resources
sourceLocation: "uksouth" # Set the preferred value for Location of the source VMs
targetLocation: "ukwest" # Set the preferred value for Location of the target VMs
vmAdminPassword: "P@ssw0rd1234" # Set the preferred value for Password for the VMs
hubVnetConfig:
addressSpace:
addressPrefixes:
- "10.0.0.0/16"
subnets:
- name: "default"
addressPrefix: "10.0.0.0/24"
- name: "AzureBastionSubnet"
addressPrefix: "10.0.1.0/24"
sourceVnetConfig:
addressSpace:
addressPrefixes:
- "10.1.0.0/16"
subnets:
- name: "default"
addressPrefix: "10.1.0.0/24"
targetVnetConfig:
addressSpace:
addressPrefixes:
- "10.2.0.0/16"
subnets:
- name: "default"
addressPrefix: "10.2.0.0/24"
testVnetConfig:
addressSpace:
addressPrefixes:
- "10.3.0.0/16"
subnets:
- name: "default"
addressPrefix: "10.3.0.0/24"
vmConfigs:
- purpose: "web" # web, sql, linux
deploy: true
nameSuffix: "web1" #unique suffix for this VM
vmSize: "Standard_D2as_v5"
osDiskSize: 127
dataDiskSize: 0
osType: "Windows"
imagePublisher: "MicrosoftWindowsServer"
imageOffer: "WindowsServer"
imageSku: "2019-Datacenter"
imageVersion: "latest"
publicIp: false
- purpose: "web"
deploy: true
nameSuffix: "web2"
vmSize: "Standard_D2as_v5"
osDiskSize: 127
dataDiskSize: 0
osType: "Windows"
imagePublisher: "MicrosoftWindowsServer"
imageOffer: "WindowsServer"
imageSku: "2019-Datacenter"
imageVersion: "latest"
publicIp: false
- purpose: "sql"
deploy: true
nameSuffix: "sql"
vmSize: "Standard_D4as_v5"
osDiskSize: 127
dataDiskSize: 1024
osType: "Windows"
imagePublisher: "MicrosoftSQLServer"
imageOffer: "SQL2019-WS2019"
imageSku: "Standard"
imageVersion: "latest"
publicIp: false
- purpose: "linux"
deploy: true
nameSuffix: "linux"
vmSize: "Standard_D2as_v5"
osDiskSize: 127
dataDiskSize: 1024
osType: "Linux"
imagePublisher: "Canonical"
imageOffer: "UbuntuServer"
imageSku: "18.04-LTS"
imageVersion: "latest"
publicIp: false
monitorConfigs:
asrqueries:
- queryName: "ASRReplicationHealth"
displayName: "ASR Replication Health"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, replicationHealth_s | summarize count() by replicationHealth_s | render piechart'
- queryName: "ASRMobilityServiceVersion"
displayName: "ASR Mobility Service Version"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, agentVersion_s | summarize count() by agentVersion_s | render piechart'
- queryName: "ASRQueryRPOTime"
displayName: "ASR RPO Time"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, rpoTime_s | summarize avg(rpoTime_s) by name_s | render barchart'
- queryName: "ASRSiteRecoveryJobs"
displayName: "ASR Site Recovery Jobs"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, jobType_s | summarize count() by jobType_s | render piechart'
- queryName: "ASRSiteRecoveryEvents"
displayName: "ASR Site Recovery Events"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, eventName_s | summarize count() by eventName_s | render piechart'
- queryName: "ASRTestFailoverState1"
displayName: "ASR Test Failover State 1"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, testFailoverState_s | summarize count() by testFailoverState_s | render piechart'
- queryName: "ASRTestFailoverState2"
displayName: "ASR Test Failover State 2"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, testFailoverState_s | summarize count() by testFailoverState_s | render piechart'
- queryName: "ASRQueryMachineRPO"
displayName: "ASR Machine RPO"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, machineRPO_s | summarize avg(machineRPO_s) by name_s | render barchart'
- queryName: "ASRDataChangeUploadRateforAzVM"
displayName: "ASR Data Change Upload Rate for Az VM"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, dataChangeUploadRate_s | summarize avg(dataChangeUploadRate_s) by name_s | render barchart'
- queryName: "ASRDataChangeUploadRateforVMware"
displayName: "ASR Data Change Upload Rate for VMware"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A" | where replicationHealth_s == "Critical" | where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | summarize count()'
- queryName: "ASRDisasterRecoverySummaryA2A"
displayName: "ASR Disaster Recovery Summary A2A"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, disasterRecoverySummary_s | summarize count() by disasterRecoverySummary_s | render piechart'
- queryName: "ASRDisasterRecoverySummaryVMW2A"
displayName: "ASR Disaster Recovery Summary VMW2A"
query: 'AzureDiagnostics | where replicationProviderName_s == "VMW2A" | where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s, disasterRecoverySummary_s | summarize count() by disasterRecoverySummary_s | render piechart'
asralerts:
- alertName: "MultipleMachinesInCriticalState"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A"| where replicationHealth_s == "Critical" | where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | summarize count()'
threshold: 2
- alertName: "SingleMachineInCriticalState"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A" | where replicationHealth_s == "Critical" | where name_s == "ContosoVM123" | where isnotempty(name_s) and isnotnull(name_s) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | summarize count()'
threshold: 1
- alertName: "MultipleMachinesExceedRPO"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A" | where isnotempty(name_s) and isnotnull(name_s) | where rpoInSeconds_d > 1800 | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s , rpoInSeconds_d | summarize count()'
threshold: 2
- alertName: "SingleMachineExceedRPO"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A" | where isnotempty(name_s) and isnotnull(name_s) | where name_s == "ContosoVM123" | where rpoInSeconds_d > 1800 | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | project name_s , rpoInSeconds_d | summarize count()'
threshold: 1
- alertName: "TestFailoverForMultipleMachinesExceeds90Days"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A" | where Category == "AzureSiteRecoveryReplicatedItems" | where isnotempty(name_s) and isnotnull(name_s) | where lastSuccessfulTestFailoverTime_t <= ago(90d) | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | summarize count()'
threshold: 1
- alertName: "TestFailoverForSingleMachinesExceeds90Days"
query: 'AzureDiagnostics | where replicationProviderName_s == "A2A" | where Category == "AzureSiteRecoveryReplicatedItems" | where isnotempty(name_s) and isnotnull(name_s) | where lastSuccessfulTestFailoverTime_t <= ago(90d) | where name_s == "ContosoVM123" | summarize hint.strategy=partitioned arg_max(TimeGenerated, *) by name_s | summarize count()'
threshold: 1
- alertName: "SiteRecoveryJobFails"
query: 'AzureDiagnostics | where Category == "AzureSiteRecoveryJobs" | where OperationName == "Reprotect" | where ResultType == "Failed" | summarize count()'
threshold: 1