在Azure中启用虚拟机诊断是一件很痛苦的事情。我已经使用ARM模板、Azure PowerShell SDK和Azure CLI让它工作了。但是我已经尝试了几天,现在我已经使用Terraform和azurerm_virtual_machine_extension资源为Windows和Linux虚拟机启用虚拟机诊断。仍然没有工作,唉!
以下是我目前所做的(为了简化这篇文章,我做了一些调整,希望我的手动编辑没有破坏任何东西):
resource "azurerm_virtual_machine_extension" "vm-linux" {
count = "${local.is_windows_vm == "false" ? 1 : 0}"
depends_on = ["azurerm_virtual_machine_data_disk_attachment.vm"]
name = "LinuxDiagnostic"
location = "${var.location}"
resource_group_name = "${var.resource_group_name}"
virtual_machine_name = "${local.vm_name}"
publisher = "Microsoft.Azure.Diagnostics"
type = "LinuxDiagnostic"
type_handler_version = "3.0"
auto_upgrade_minor_version = "true"
# The JSON file referenced below was created by running "az vm diagnostics get-default-config", and adding/verifying the "__DIAGNOSTIC_STORAGE_ACCOUNT__" and "__VM_RESOURCE_ID__" placeholders.
settings = <<SETTINGS
{
"ladCfg": "${base64encode(replace(replace(file("${path.module}/.diag-settings/linux_diag_config.json"), "__DIAGNOSTIC_STORAGE_ACCOUNT__", "${module.vm_storage_account.name}"), "__VM_RESOURCE_ID__", "${local.metricsresourceid}"))}",
"storageAccount": "${module.vm_storage_account.name}"
}
SETTINGS
# SAS token below: Do not include the leading question mark, as per https://learn.microsoft.com/en-us/azure/virtual-machines/extensions/diagnostics-linux.
protected_settings = <<SETTINGS
{
"storageAccountName": "${module.vm_storage_account.name}",
"storageAccountSasToken": "${replace(data.azurerm_storage_account_sas.current.sas, "/^\\?/", "")}",
"storageAccountEndPoint": "https://core.windows.net/"
}
SETTINGS
}
resource "azurerm_virtual_machine_extension" "vm-win" {
count = "${local.is_windows_vm == "true" ? 1 : 0}"
depends_on = ["azurerm_virtual_machine_data_disk_attachment.vm"]
name = "Microsoft.Insights.VMDiagnosticsSettings"
location = "${var.location}"
resource_group_name = "${var.resource_group_name}"
virtual_machine_name = "${local.vm_name}"
publisher = "Microsoft.Azure.Diagnostics"
type = "IaaSDiagnostics"
type_handler_version = "1.9"
auto_upgrade_minor_version = "true"
# The JSON file referenced below was created by running "az vm diagnostics get-default-config --is-windows-os", and adding/verifying the "__DIAGNOSTIC_STORAGE_ACCOUNT__" and "__VM_RESOURCE_ID__" placeholders.
settings = <<SETTINGS
{
"wadCfg": "${base64encode(replace(replace(file("${path.module}/.diag-settings/windows_diag_config.json"), "__DIAGNOSTIC_STORAGE_ACCOUNT__", "${module.vm_storage_account.name}"), "__VM_RESOURCE_ID__", "${local.metricsresourceid}"))}",
"storageAccount": "${module.vm_storage_account.name}"
}
SETTINGS
protected_settings = <<SETTINGS
{
"storageAccountName": "${module.vm_storage_account.name}",
"storageAccountSasToken": "${data.azurerm_storage_account_sas.current.sas}",
"storageAccountEndPoint": "https://core.windows.net/"
}
SETTINGS
}
请注意,对于Linux和Windows,我都是根据注解从代码库中的JSON文件加载诊断详细信息的,这些是Azure提供的默认配置,因此它们应该是有效的。
当我部署这些时,Linux VM扩展部署成功,但在Azure门户中,扩展显示"在生成的mdsd配置中检测到问题"。如果我查看VM的"诊断设置",它显示"遇到错误:TypeError:对象不支持属性或方法"diagnosticMonitorConfiguration'"。Windows VM扩展完全无法部署,说明它"无法读取配置"。如果我在门户中查看扩展,它会显示以下错误:
"code": "ComponentStatus//failed/-3",
"level": "Error",
"displayStatus": "Provisioning failed",
"message": "Error starting the diagnostics extension"
如果我看看"诊断设置"窗格,它只是挂着一个永无止境的"..."动画。
但是,如果我查看两个VM扩展的"terraform apply"输出,解码后的设置看起来完全符合预期,与配置文件匹配,占位符被正确替换。
有什么建议可以让它工作吗?
先谢了!
4条答案
按热度按时间mrfwxfqh1#
到目前为止,我已经让Windows诊断程序在我们的环境中100%正常工作。看起来AzureRM API对发送的配置非常挑剔。我们一直在使用powershell来启用它,而powershell中使用的相同xmlCfg不适用于terraform。到目前为止,这对我们来说是有效的:(settings/protected_settings名称区分大小写!aka xmlCfg有效,而xmlcfg无效)
main.cf
特夫瓦尔斯
wadcfgxml.tmpl(为了简洁起见,我删除了一些Perf计数器)
我终于让Linux In-Guest Diagnostics工作了(LAD)。一些值得注意的事实,与Windows诊断不同,设置需要在json中传输,没有base64编码。此外,LAD似乎需要一个SAS令牌与存储帐户。关于AzureRM API的正常警告是挑剔的配置,以及设置是大小写敏感仍然存在。以下是我到目前为止的工作。
特夫瓦尔斯
如果不将整个内容 Package 在jsonencode.ladcfg2json.tmpl中,就无法使模板文件工作
我希望这能帮上忙。
xxb16uws2#
正如一年多前有人问过的,这是给像我这样第一次尝试这个的人的,我们只使用linux vms,所以这个建议适用于那些人:
1.受保护的设置应使用PROTECTED_SETTINGS,而不是SETTINGS(您可以在上面的@rv23答案中看到)
1.从我关注的文档www.example.com中https://learn.microsoft.com/en-gb/azure/virtual-machines/extensions/diagnostics-linux#protected-settings,您可以看到需要指定storageAccountSasToken而不是storageAccountKey:
下面是我修改过的config(用你自己的设置替换所有大写的位):
6g8kf2rb3#
我刚得到一个类似的问题:
Trying to add LinuxDiagnostic Azure VM Extension through terraform and getting errors
这包括获取SAS令牌和阅读json文件。
bwntbbo34#
我已经尝试使用下面的代码为Windows VM添加诊断日志记录。当我运行管道时,我得到错误消息:““VM报告在处理扩展”AzurePolicyforWindows“时出现故障。错误消息:“无法读取配置。"\r\n\r\nM”。对于此处可能遗漏的内容,您有何建议?
这里是main.tf
下面是诊断. json