You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Terraform启用Azure虚拟机来宾级监控并配置磁盘告警?

解决Terraform配置Azure Monitor Agent磁盘空间告警问题

你的配置存在几个关键问题,导致无法正确收集磁盘可用空间并触发告警,以下是修正方案:

核心问题分析

  1. 数据收集规则(DCR)未指定磁盘计数器:原配置使用\VmInsights\DetailedMetrics仅启用VmInsights预定义指标,但未明确收集磁盘空闲空间的具体计数器,且Linux和Windows的计数器格式不同。
  2. 告警规则指标信息错误:指标命名空间和名称与实际来宾指标不匹配,且资源组硬编码为固定值。
  3. 身份权限不足:用户分配的托管身份缺少向Log Analytics工作区写入指标的权限。

修正后的完整配置片段

1. 修正数据收集规则(DCR)

根据虚拟机操作系统类型,配置对应的磁盘性能计数器:

Linux虚拟机DCR配置

resource "azurerm_monitor_data_collection_rule" "linux_dcr" {
  name                = "${var.resource_prefix}-linux-dcr"
  location            = azurerm_resource_group.rg-test.location
  resource_group_name = azurerm_resource_group.rg-test.name

  destinations {
    log_analytics {
      workspace_resource_id = azurerm_log_analytics_workspace.workspace.id
      name                  = "test-destination-log"
    }

    azure_monitor_metrics {
      name = "test-destination-metrics"
    }
  } 

  data_flow {
    streams      = ["Microsoft-InsightsMetrics"]
    destinations = ["test-destination-log", "test-destination-metrics"]
  }

  data_sources {
    performance_counter {
      streams                       = ["Microsoft-InsightsMetrics"]
      sampling_frequency_in_seconds = 60
      counter_specifiers            = ["/Logical Disk/% Free Space"]
      name                          = "LinuxDiskFreeSpace"
    }
  }
}

Windows虚拟机DCR配置

resource "azurerm_monitor_data_collection_rule" "windows_dcr" {
  name                = "${var.resource_prefix}-windows-dcr"
  location            = azurerm_resource_group.rg-test.location
  resource_group_name = azurerm_resource_group.rg-test.name

  destinations {
    log_analytics {
      workspace_resource_id = azurerm_log_analytics_workspace.workspace.id
      name                  = "test-destination-log"
    }

    azure_monitor_metrics {
      name = "test-destination-metrics"
    }
  } 

  data_flow {
    streams      = ["Microsoft-InsightsMetrics"]
    destinations = ["test-destination-log", "test-destination-metrics"]
  }

  data_sources {
    performance_counter {
      streams                       = ["Microsoft-InsightsMetrics"]
      sampling_frequency_in_seconds = 60
      counter_specifiers            = ["\\LogicalDisk(*)\\% Free Space"]
      name                          = "WindowsDiskFreeSpace"
    }
  }
}

2. 修正身份权限

添加托管身份对Log Analytics工作区的指标发布权限:

resource "azurerm_role_assignment" "mi-law-publisher" {
  scope                = azurerm_log_analytics_workspace.workspace.id
  role_definition_name = "Monitoring Metrics Publisher"
  principal_id         = azurerm_user_assigned_identity.mi.principal_id
}

3. 修正磁盘告警规则

Linux磁盘告警规则

resource "azurerm_monitor_metric_alert" "linux_disk_alert" {
  name                     = "${var.resource_prefix}-linux-disk-alert"
  frequency                = "PT5M"
  window_size              = "PT5M"
  resource_group_name      = azurerm_resource_group.rg-test.name
  scopes                   = [azurerm_linux_virtual_machine.vm.id]
  severity                 = 3
  tags                     = var.tags
  target_resource_location = azurerm_resource_group.rg-test.location
  target_resource_type     = "Microsoft.Compute/virtualMachines"

  action {
    action_group_id    = azurerm_monitor_action_group.action-group.id
    webhook_properties = {}
  }

  criteria {
    aggregation            = "Average"
    metric_name            = "LogicalDisk.% Free Space"
    metric_namespace       = "azure.vm.linux.guestmetrics"
    operator               = "LessThan"
    skip_metric_validation = true
    threshold              = 5
  }

  auto_mitigate = true
  enabled       = true
}

Windows磁盘告警规则

resource "azurerm_monitor_metric_alert" "windows_disk_alert" {
  name                     = "${var.resource_prefix}-windows-disk-alert"
  frequency                = "PT5M"
  window_size              = "PT5M"
  resource_group_name      = azurerm_resource_group.rg-test.name
  scopes                   = [azurerm_windows_virtual_machine.vm.id]
  severity                 = 3
  tags                     = var.tags
  target_resource_location = azurerm_resource_group.rg-test.location
  target_resource_type     = "Microsoft.Compute/virtualMachines"

  action {
    action_group_id    = azurerm_monitor_action_group.action-group.id
    webhook_properties = {}
  }

  criteria {
    aggregation            = "Average"
    metric_name            = "LogicalDisk.% Free Space"
    metric_namespace       = "azure.vm.windows.guestmetrics"
    operator               = "LessThan"
    skip_metric_validation = true
    threshold              = 5
  }

  auto_mitigate = true
  enabled       = true
}

4. 关联虚拟机与DCR

确保虚拟机扩展和DCR关联正确:

# Linux虚拟机关联DCR
resource "azurerm_monitor_data_collection_rule_association" "linux_dcra" {
  name                    = "${var.resource_prefix}-linux-dcra"
  target_resource_id      = azurerm_linux_virtual_machine.vm.id
  data_collection_rule_id = azurerm_monitor_data_collection_rule.linux_dcr.id
  description             = "Associate Linux VM with disk metrics DCR"
}

# Windows虚拟机关联DCR
resource "azurerm_monitor_data_collection_rule_association" "windows_dcra" {
  name                    = "${var.resource_prefix}-windows-dcra"
  target_resource_id      = azurerm_windows_virtual_machine.vm.id
  data_collection_rule_id = azurerm_monitor_data_collection_rule.windows_dcr.id
  description             = "Associate Windows VM with disk metrics DCR"
}

关键说明

  • 调整了告警的frequency和window_size为5分钟,避免过于频繁的告警,可根据需求修改。
  • 启用skip_metric_validation是为了绕过Terraform对指标存在性的校验,确保计数器在收集后能正常触发告警。
  • 确保Azure Monitor Agent扩展已正确安装在虚拟机上,Linux使用AzureMonitorLinuxAgent,Windows使用AzureMonitorWindowsAgent。

内容的提问来源于stack exchange,提问作者Hadrien

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:37:03