0

지난 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 
+0

오류가 자원에 대한 업데이트가 이미있는 제안 (자원 이름 값이 문제였다 문자열에 슬래시가 있었다), 시도 이름을 동적으로 수정 하시겠습니까? – 4c74356b41

+0

$ resource 변수 + 고정 접미어의 일부를 사용합니다. '-name "$ ($ resource.name) -ALERT" – 4c74356b41

+0

이 작동하지 않았다. $ 리소스 배열의 리소스 ID를 픽업하려고 시도했다고 생각한다. –

답변

0

오키, 여기 내가 어떻게 그랬는가. 나는 동적으로 자원 이름을 전달했다하지만 첫 번째 슬래시 후 절단 후

#define variable for resource group name by requesting keyboard 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 resourcename,resourceid 

#loop through the array and create the alert rule for each DB 

foreach($resource in $resources){$alertname=$resource.resourcename.Substring($resource.resourcename.IndexOf('/')+1);Add-AzureRMMetricAlertRule -ResourceGroup $rg -location "centralus" -targetresourceid $resource.resourceid -Name $alertname -MetricName "dtu_consumption_percent" -Operator "GreaterThan" -Threshold 90 -WindowSize $([TimeSpan]::Parse("00:15:00")) -TimeAggregationOperator "Average" -verbose -Actions $(New-AzureRmAlertRuleEmail -SendToServiceOwners -CustomEmails "[email protected]")} 
-1

만들려고하는 정확한 DTU 경고가 this 문서에 단계별로 생성되었습니다.

+0

제가 요점을 놓치고 있다고 생각합니다. 여기에있는 질문은 하나의 db에 대해 하나의 규칙을 만드는 방법이 아니라, foreach 루프는 리소스 그룹에있는만큼의 DB에 대한 경고를 생성합니다 (제 경우에는 18 개가 있습니다). 질문의 시작 부분을주의 깊게 읽으면, 자동화하고 중요하게 생각하는 모든 사람에게 귀하의 제안대로 DB 하나뿐 아니라 자원 그룹의 DB. –

+0

다음 리소스에서 제공되는 기능을 살펴보십시오. https://www.mssqltips.com/sqlservertip/3606/automate-retrieving-sql-azure-bacpacs-with-powershell/. SQL Azure 데이터베이스 서버 당 모든 데이터베이스를 검색하는 foreach입니다. 나는 자원 그룹별로 그것을 보지 못했다. –

+0

Alberto에게 감사하지만 위의 스크립트에서 볼 수 있듯이 여기에서 그룹 재조정마다 DB 검색을 수행 할 수 있습니다 ($ resources = Get-AzureRmResource |? {$ _. ResourceGroupName -eq $ rg - and $ _. kind -eq "v12.0, user"} | select -expandpropert resourceid). 문제는 "Add-AzureRMMetricAlertRule"의 -name 매개 변수를 고유 값 (이상적으로는 DB의 자원 이름)으로 채우는 것입니다. –