Set-AzVMDiagnosticsExtension 无法跨订阅按预期工作

Set-AzVMDiagnosticsExtension doesn't work work as expected across subscriptions

我正在尝试的是启用 VM 诊断扩展以将事件日志(应用程序 [1,2,3]、安全性 [all]、系统 [1,2,3])发送到一个统一的存储帐户(让我们称之为日志存储)应该在其中创建 WADWindowsEventLogsTable。

我尝试实现的不同场景:

  1. 虚拟机与日志存储在同一个资源组中。

    结果:有效

  2. VM 位于日志存储所在的不同资源组中。

    结果:有效

  3. VM 在不同的订阅中

    结果: 扩展将被启用。但是,当转到代理选项卡时,我会在存储帐户部分收到错误消息“值不能为空” agent tab, storage account section error


环境

Windows

Powershell 7.0.2


DiagnosticsConfiguration.json

{
"PublicConfig": {
    "WadCfg": {
        "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": 5120,
            "WindowsEventLog": {
                "scheduledTransferPeriod": "PT1M",
                    "DataSource": [
                    {
                        "name": "Application!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]"
                    },
                    {
                        "name": "Security!*"
                    },
                    {
                        "name": "System!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]"
                    }
                ]
            }
        }
    },
    "StorageAccount": "logsstorage",
    "StorageType": "TableAndBlob"
},
"PrivateConfig": {
    "storageAccountName": "logsstorage",
    "storageAccountKey": "xxxxxxx",
    "storageAccountEndPoint": "https://logsstorage.blob.core.windows.net"
}
}

Powershell 命令:

Set-AzVMDiagnosticsExtension -ResourceGroupName "myvmresourcegroup" -VMName "myvm"  -DiagnosticsConfigurationPath "DiagnosticsConfiguration.json"

我什至尝试将帐户名和密钥明确指定为:

$storage_key = "xxxxxx"
Set-AzVMDiagnosticsExtension -ResourceGroupName "myvmresourcegroup" -VMName "myvm"  -DiagnosticsConfigurationPath "DiagnosticsConfiguration.json" -StorageAccountName "logsstroage" -StorageAccountKey $storage_key

我花了很多时间试图在没有运气的情况下找出问题。



这里真正的问题是扩展没有创建预期的 table WADWindowsEventLogsTable(如果它已经存在则写入它)

根据官方文档我应该可以做到这一点,示例3: https://docs.microsoft.com/en-us/powershell/module/az.compute/set-azvmdiagnosticsextension?view=azps-4.3.0

我已经在 GitHub 上向团队提交了一个问题并提供了更多详细信息,但仍在等待他们的意见

https://github.com/Azure/azure-powershell/issues/12259

这是因为您指定的存储帐户“logsstorage”在另一个订阅中。

您应该选择不同的订阅来启用 VM 诊断扩展。因此,您还需要修改 DiagnosticsConfiguration.json 文件并指定当前订阅中的存储帐户。

在 Microsoft 工程师的帮助下,我设法解决了这个问题。

我已经在这个 GitHub 问题中详细说明了答案:

Set-AzVMDiagnosticsExtension doesn't seem working properly across subscriptions


答案 :

我设法完成了这项工作,感谢来自 Microsoft 支持的@prernavashistha 的帮助,结果发现文档中存在一些不一致之处。

根据此处的文档:

https://docs.microsoft.com/en-us/azure/azure-monitor/platform/diagnostics-extension-windows-install#powershell-deployment

PrivateConfig 中,我应该将存储 URI 传递给“storageAccountEndPoint”键:

"PrivateConfig": {
"storageAccountEndPoint": "https://logsstorage.blob.core.windows.net"}

但是,根据另一个文档参考:

https://docs.microsoft.com/en-us/azure/azure-monitor/platform/diagnostics-extension-schema-windows#json

我应该传递 Azure 存储端点:

"PrivateConfig": {
"storageAccountEndPoint": "https://core.windows.net"}


我可以确认使用 Azure 存储端点解决了问题,我可以跨订阅启用扩展,我可以看到日志按预期写入正确的 table。

谢谢