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

使用Terraform为Log Analytics工作区添加虚拟机性能计数器

使用Terraform为Log Analytics工作区添加Windows/Linux性能计数器

问题背景

需要通过Terraform给现有Log Analytics工作区添加虚拟机性能计数器,Windows有原生支持,但Linux没有,因此尝试用azapi provider实现。最初执行terraform apply成功后未添加任何计数器,还遇到了parent_id无效的错误。

尝试过程与问题

  1. 首次尝试用azapi_update_resource更新工作区资源,使用类型Microsoft.OperationalInsights/workspaces@2020-08-01,执行后无效果:
resource "azapi_update_resource" "this" {
  type        = "Microsoft.OperationalInsights/workspaces@2020-08-01"
  resource_id = azurerm_log_analytics_workspace.this.id
  body = jsonencode({
    properties = {
      instanceName      = "*"
      intervalInSeconds = 60
      objectName        = "Memory"
      counterName       = "% Committed Bytes In Use"
    }
  })
}
  1. 改用azapi_resource,指定类型为Microsoft.OperationalInsights/workspaces/dataSources@2020-08-01,但错误将parent_id设置为资源组ID,触发错误:

parent_id is invalid: expect ID of Microsoft.OperationalInsights/workspaces

对应错误代码:

resource "azapi_resource" "windows_committed_bytes" {
  type      = "Microsoft.OperationalInsights/workspaces/dataSources@2020-08-01"
  name      = "WindowsCommittedBytes"
  parent_id = azurerm_resource_group.this.id

  body = jsonencode({
    kind = "WindowsPerformanceCounter"
    properties = {
      "objectName" : "Memory",
      "instanceName" : "*",
      "intervalSeconds" : 60,
      "counterName" : "% Committed Bytes in Use"
    }
  })
}

最终解决方案

核心修正:将azapi_resource的parent_id设置为Log Analytics工作区的ID,而非资源组ID;同时针对Windows和Linux性能计数器,分别配置正确的kind字段和属性结构。

完整配置

先配置所需provider:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "3.67.0"
    }
    azapi = {
      source  = "Azure/azapi"
      version = "1.8.0"
    }
  }
}

provider "azurerm" {
  features {
  }
}
provider "azapi" {
}

再定义资源(包含工作区、Windows和Linux性能计数器):

resource "azurerm_resource_group" "this" {
  name     = "rg-eus2-law"
  location = "East US 2"
}

resource "azurerm_log_analytics_workspace" "this" {
  name                = "law-eus2"
  resource_group_name = azurerm_resource_group.this.name
  location            = azurerm_resource_group.this.location
  sku                 = "PerGB2018"
  depends_on          = [azurerm_resource_group.this]
}

# Windows内存提交字节使用率计数器
resource "azapi_resource" "windows_committed_bytes" {
  type      = "Microsoft.OperationalInsights/workspaces/dataSources@2020-08-01"
  name      = "WindowsCommittedBytes"
  parent_id = azurerm_log_analytics_workspace.this.id

  body = jsonencode(
    {
      kind = "WindowsPerformanceCounter"
      properties = {
        "objectName" : "Memory",
        "instanceName" : "*",
        "intervalSeconds" : 60,
        "counterName" : "% Committed Bytes in Use"
      }
    }
  )
}

# Windows处理器时间计数器
resource "azapi_resource" "windows_processor_time" {
  type      = "Microsoft.OperationalInsights/workspaces/dataSources@2020-08-01"
  name      = "WindowsProcessorTime"
  parent_id = azurerm_log_analytics_workspace.this.id

  body = jsonencode(
    {
      kind = "WindowsPerformanceCounter"
      properties = {
        "objectName" : "Processor",
        "instanceName" : "*",
        "intervalSeconds" : 60,
        "counterName" : "% Processor Time"
      }
    }
  )
}

# Linux处理器时间计数器
resource "azapi_resource" "linux_processor_time" {
  type      = "Microsoft.OperationalInsights/workspaces/dataSources@2020-08-01"
  name      = "LinuxProcessorTime"
  parent_id = azurerm_log_analytics_workspace.this.id

  body = jsonencode(
    {
      kind = "LinuxPerformanceObject"
      properties = {
        "objectName" : "Processor",
        "instanceName" : "*",
        "intervalSeconds" : 60,
        "performanceCounters" : [
          {
            "counterName" : "% Processor Time"
          }
        ]
      }
    }
  )
}

# Linux内存使用率计数器
resource "azapi_resource" "linux_used_memory" {
  type      = "Microsoft.OperationalInsights/workspaces/dataSources@2020-08-01"
  name      = "LinuxUsedMemory"
  parent_id = azurerm_log_analytics_workspace.this.id

  body = jsonencode(
    {
      kind = "LinuxPerformanceObject"
      properties = {
        "objectName" : "Memory",
        "instanceName" : "*",
        "intervalSeconds" : 60,
        "performanceCounters" : [
          {
            "counterName" : "% Used Memory"
          }
        ]
      }
    }
  )
}

关键说明

  • Windows计数器:kind设为WindowsPerformanceCounter,直接在properties中指定counterName等属性
  • Linux计数器:kind设为LinuxPerformanceObject,通过performanceCounters数组定义计数器
  • parent_id设置:必须指向Log Analytics工作区的ID,而非资源组ID,这是解决之前错误的核心

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:41:07