如何通过Terraform启用Azure虚拟机来宾级监控并配置磁盘告警?
解决Terraform配置Azure Monitor Agent磁盘空间告警问题
你的配置存在几个关键问题,导致无法正确收集磁盘可用空间并触发告警,以下是修正方案:
核心问题分析
- 数据收集规则(DCR)未指定磁盘计数器:原配置使用
\VmInsights\DetailedMetrics仅启用VmInsights预定义指标,但未明确收集磁盘空闲空间的具体计数器,且Linux和Windows的计数器格式不同。 - 告警规则指标信息错误:指标命名空间和名称与实际来宾指标不匹配,且资源组硬编码为固定值。
- 身份权限不足:用户分配的托管身份缺少向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
相关产品推荐
相关产品推荐

