지난 15 분 동안 DTU가 90 %를 초과하는 것을 모니터링하는 DTU 경고 규칙을 만들려고합니다. 자원 그룹 내의 데이터베이스. 아이디어는 작업을 자동화하고 GUI에 수십 개의 규칙을 수동으로 생성하지 않고 각 경고에 대해 하나의 스크립트를 실행하지 않도록하는 것입니다. 기본적으로 리소스 그룹에있는 많은 데이터베이스에 대해 동일한 경고를 만들어야합니다 그러나 고유 한 이름을 제공, 스크립트의 일부 "고유해야합니다"를 참조foreach 루프를 사용하여 powershell을 통해 리소스 그룹에있는 모든 DB에 대해 경고 규칙을 만드는 방법
내가 쓴 스크립트는 다음과 같습니다
#define variable for resource group name by requesting keynoard input
$rg = Read-Host 'Please, input resource group name here (exactly as it is in Azure)'
<#create the array containing databases where alerts are required. The value of v12.0,user corresponds to the kind of resource as to include only the SQL DBs and not the SQL servers#>
$resources = Get-AzureRmResource | ?{ $_.ResourceGroupName -eq $rg -and $_.kind -eq "v12.0,user" } | select -expandpropert resourceid
#loop through the array and create the alert rule for each DB
foreach($resource in $resources){Add-AzureRMMetricAlertRule -ResourceGroup $rg -location "Central US" -targetresourceid $resource -Name "THAT MUST BE UNIQUE" -MetricName "dtu_consumption_percent" -Operator "GreaterThan" -Threshold 90 -WindowSize $([TimeSpan]::Parse("00:15:00")) -TimeAggregationOperator "Average" -verbose -Actions $(New-AzureRmAlertRuleEmail -SendToServiceOwners -CustomEmails "[email protected]")}
문제는 IT는 다음과 ONLY ONE ALERT 다음 오류를 생성하는 것입니다 (계속해서 -name 값이 고유하지 않은 문제를 지적 함).
Add-AzureRMMetricAlertRule : Exception type: ErrorResponseException, Message: Can not update target resource id during
update., Code: BadRequest, Status code:BadRequest, Reason phrase: Bad Request
At C:\Users\CreateDTUalertsFORallDBv2.ps1:11 char:34
+ ... $resources){Add-AzureRMMetricAlertRule -ResourceGroup $rg -location " ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : CloseError: (:) [Add-AzureRmMetricAlertRule], PSInvalidOperationException
+ FullyQualifiedErrorId : Microsoft.Azure.Commands.Insights.Alerts.AddAzureRmMetricAlertRuleCommand
잘못된 정보를 알려주고 스크립트의 매개 변수 양식에 따라 리소스 그룹의 각 DB에 대한 DTU 메트릭을 만드는 방법은 무엇입니까? 또한 궁금해서 "-name
" 매개 변수는 위의 스크립트에서 경고가 작동 할 DB에 고유 한 것으로 (이상적으로 스크립트의 foreach 루프 바로 앞에있는 Get-AzureRmResource 명령 줄에서 제공 할 수있는 리소스 이름 값을 사용하여).
나는 아래의 스크립트를 사용하여 DB의 resourceName이 함께 -name 매개 변수를 채울하려고하면 : 이름이 고유없는 약
#define variable for resource group name by requesting keynoard input
$rg = Read-Host 'Please, input resource group name here (exactly as it is in Azure)'
#create the array containing databases where alerts are required
$resources = Get-AzureRmResource | ?{ $_.ResourceGroupName -eq $rg -and $_.kind -eq "v12.0,user" } | select -expandpropert resourceid
#loop through the array and create the alert rule for each DB
foreach($resource in $resources){$resourcename = (Get-AzureRmResource -ResourceGroupName $rg -Resourceid $resource).resourcename;Add-AzureRMMetricAlertRule -ResourceGroup $rg -location "Central US" -targetresourceid $resource -Name $resourcename -MetricName "dtu_consumption_percent" -Operator "GreaterThan" -Threshold 90 -WindowSize $([TimeSpan]::Parse("00:15:00")) -TimeAggregationOperator "Average" -verbose -Actions $(New-AzureRmAlertRuleEmail -SendToServiceOwners -CustomEmails "[email protected]")}
그것은 오류를 아래 오류를 참조하십시오
Add-AzureRmMetricAlertRule : Cannot validate argument on parameter 'Name'. The argument is null or empty. Provide an
argument that is not null or empty, and then try the command again.
At C:\Users\ttest.ps1:11 char:234
+ ... "Central US" -targetresourceid $resource -Name $resourcename -Metric ...
+ ~~~~~~~~~~~~~
+ CategoryInfo : InvalidData: (:) [Add-AzureRmMetricAlertRule], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.Insights.Alerts.AddAzureRmMetr
icAlertRuleCommand
Get-AzureRmResource : Parameter set cannot be resolved using the specified named parameters.
At C:\Users\ttest.ps1:11 char:51
+ ... urcename = (Get-AzureRmResource -ResourceGroupName $rg -Resourceid $r ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidArgument: (:) [Get-AzureRmResource], ParameterBindingException
+ FullyQualifiedErrorId : AmbiguousParameterSet,Microsoft.Azure.Commands.ResourceManager.Cmdlets.Implementation.Ge
오류가 자원에 대한 업데이트가 이미있는 제안 (자원 이름 값이 문제였다 문자열에 슬래시가 있었다), 시도 이름을 동적으로 수정 하시겠습니까? – 4c74356b41
$ resource 변수 + 고정 접미어의 일부를 사용합니다. '-name "$ ($ resource.name) -ALERT" – 4c74356b41
이 작동하지 않았다. $ 리소스 배열의 리소스 ID를 픽업하려고 시도했다고 생각한다. –