应用服务使用 az cli

时间:2021-06-01 04:20:01

标签: azure azure-cli

我正在尝试为特定订阅中的所有应用服务启用诊断设置,但我收到此错误 ERROR: Expecting value: line 1 column 2 (char 1)。我不确定这个错误是来自 JSON 响应还是我的 shell 脚本有问题。

$webapps = az webapp list --query '[].{Name : name, ResourceGroup:resourceGroup, id: id}' | ConvertFrom-Json

$funcapps = az functionapp list --query '[].{Name : name, ResourceGroup:resourceGroup, id: id}' | ConvertFrom-Json

$logicapps = az logic workflow list --query '[].{Name:name, ResourceGroup:resourceGroup, id: id}' | ConvertFrom-Json

$apps = @($webapps,$funcapps, $logicapps)

$applist = $apps  

foreach ($alist in $applist)
{       
    foreach($i in $alist)
    {
        
        $logsettingsList = az monitor diagnostic-settings list --resource-group $i.resourceGroup --resource $i.id | ConvertFrom-Json

       if($logsettingsList.value.Length -eq 0){
           
            Write-Output "No diagnostic setting found for" $i.Name  


            Write-Output "Creating diagnostic profile for" $i.Name  

            $logs = '[
                {
                  \"category\": "\AppServiceAntivirusScanAuditLogs\",
                  \"enabled\": true,
                  "retentionPolicy": {
                    \"enabled\": false,
                    \"days\": 0
                  }
                }
              ]'


              $metrics = '[{\"category\": \"AppServiceAntivirusScanAuditLogs\",
                  \"enabled\": true,
                  \"retentionPolicy\": {
                    \"enabled\": false,
                    \"days\": 0
                  }
                }
              ]'



             $test = az monitor diagnostic-settings create --resource $i.id --name "$($i.Name)profile"  --storage-account {storageAccount} --logs $logs --metrics $metrics
                $test
                


            foreach ($ishow in $logsettingsList) {

                $logSettings = az monitor diagnostic-settings show --resource-group $i.resourceGroup --resource $i.id --name $i.name | ConvertFrom-Json
    
                $logSettings
                
            }
        
        }

        else {
        
            Write-Output "Diagnostic Profile already created for" $i.Name  


        }     
    }

}

我最初认为我发送的 JSON 负载有问题。 然后我尝试更改为 https://github.com/Azure/azure-cli/issues/5637 但它仍然给我同样的错误。 我尝试过的两个 JSON 主体

 $logs = '[
                {
                  \"category\": "\AppServiceAntivirusScanAuditLogs\",
                  \"enabled\": true,
                  "retentionPolicy": {
                    \"enabled\": false,
                    \"days\": 0
                  }
                }
              ]'


              $metrics = '[{\"category\": \"AppServiceAntivirusScanAuditLogs\",
                  \"enabled\": true,
                  \"retentionPolicy\": {
                    \"enabled\": false,
                    \"days\": 0
                  }
                }
              ]'

--logs '[
     {
       "category": "WorkflowRuntime",
       "enabled": true,
       "retentionPolicy": {
         "enabled": false,
         "days": 0
       }
     }
   ]'
   --metrics '[
     {
       "category": "WorkflowRuntime",
       "enabled": true,
       "retentionPolicy": {
         "enabled": false,
         "days": 0
       }
     }
   ]'

以上引用自这里 https://docs.microsoft.com/en-us/cli/azure/monitor/diagnostic-settings?view=azure-cli-latest#code-try-1

2 个答案:

答案 0 :(得分:0)

根据我的测试,我们需要删除空格。儿子应该像$logs='[{\"category\":\"AppServiceAntivirusScanAuditLogs\",\"retentionPolicy\":{\"days\":0,\"enabled\":false},\"enabled\":true}]'

例如(我在powershell中测试)

 $logs='[{\"category\":\"AppServiceAntivirusScanAuditLogs\",\"retentionPolicy\":{\"days\":0,\"enabled\":false},\"enabled\":true}]'
              
$metrics= '[{\"category\":\"AllMetrics\",\"retentionPolicy\":{\"days\":0,\"enabled\":false},\"enabled\":true}]'
            
$test = az monitor diagnostic-settings create --resource $i.id --name "test"  --storage-account <the resource id of storage account> --logs $logs --metrics $metrics --debug
$test

enter image description here

此外,请注意用于存储日志和指标的资源和存储帐户应在同一区域。同时,不同的资源类型具有不同的类别。您可以使用命令 az monitor diagnostic-settings categories list --resource 来检查它。详情请参阅here

答案 1 :(得分:0)

我试过了,它奏效了。您可以尝试相同的 JSON 响应,但是通过替换 (" ' " 到 ' \ " ')。因此 JSON 响应看起来像

$metricsSettingJSON = "[{'category': 'AllMetrics','enabled': true,'retentionPolicy': {'days': 0,'enabled': false},'timeGrain': null}]".Replace("'",'\"')
相关问题