如何使用 PowerShell 将 Azure 数据工厂诊断设置更改为 "Resource specific" table

How to change Azure Data Factory Diagnostics Setting to "Resource specific" table using PowerShell

在 Azure 数据工厂中,我想使用 PowerShell 将诊断设置更改为“资源特定”目标 table。我有将日志发送到“Azure Diagnostics”tables 的现有设置。我想使用 PowerShell 更改此默认设置并避免再次部署完整的诊断设置。

您可以使用下面的命令,在我的示例中,joyfactory 是我的数据工厂名称,joyfactorydia 是诊断设置名称,将它们替换为 <subscription-id><group-name> 在命令中。

还要确保你的Az.Accounts powershell模块不是太旧,至少有新命令Invoke-AzRestMethod,如果是旧的,你可以使用Update-Module -Name Az.Accounts更新它。

Invoke-AzRestMethod -Method PUT -Path "/subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.DataFactory/factories/joyfactory/providers/microsoft.insights/diagnosticSettings/joyfactorydia?api-version=2017-05-01-preview" `
 -Payload '{
    "id": "/subscriptions/<subscription-id>/resourceGroups/<group-name>/providers/Microsoft.DataFactory/factories/joyfactory/providers/microsoft.insights/diagnosticSettings/joyfactorydia",
    "name": "joyfactorydia",
    "properties": {
        "logs": [{
            "category": "ActivityRuns",
            "enabled": true,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "PipelineRuns",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "TriggerRuns",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "SSISPackageEventMessages",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "SSISPackageExecutableStatistics",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "SSISPackageEventMessageContext",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "SSISPackageExecutionComponentPhases",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "SSISPackageExecutionDataStatistics",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }, {
            "category": "SSISIntegrationRuntimeLogs",
            "enabled": false,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            }
        }],
        "metrics": [{
            "enabled": true,
            "retentionPolicy": {
                "days": 0,
                "enabled": false
            },
            "category": "AllMetrics"
        }],
        "workspaceId": "/subscriptions/<subscription-id>/resourcegroups/<group-name>/providers/microsoft.operationalinsights/workspaces/joylogana",
        "logAnalyticsDestinationType": "Dedicated"
    }
}'

Payload 中,"logAnalyticsDestinationType": "Dedicated"就是你想要的,它把Destination table改成了Resource specific。其他值可以参考下面命令的结果,然后按照上面Payload中的格式修复。

$id = (Get-AzDataFactoryV2 -ResourceGroupName <group-name> -Name joyfactory).DataFactoryId
Get-AzDiagnosticSetting -Name joyfactorydia -ResourceId $id 

除了,我也试过Set-AzDiagnosticSettingSet-AzResource,都不行,可能有一些bug,这里就不详细写了。

如果您可以接受使用 Azure CLI,最简单的方法是:

$id = (Get-AzDataFactoryV2 -ResourceGroupName <group-name> -Name joyfactory).DataFactoryId
$dia = Get-AzDiagnosticSetting -Name joyfactorydia -ResourceId $id 
az resource update --ids $dia.Id --api-version '2017-05-01-preview' --set properties.logAnalyticsDestinationType=Dedicated