Terraform 启用 VM Insights

Terraform enable VM Insights

有人设法通过虚拟机的 terraforms Insights 启用了吗?

我可以创建 VM,启用日志记录,但不能启用洞察力..

我看过这个问题:但没有找到明确的答案.. How to enable azure vm application insights monitoring agent using terraform

这是我用于测试的完整 Terraform 脚本,我 运行 它直接在云端 shell 来自 azure。

    # Configure the Azure provider
provider "azurerm" {
    # The "feature" block is required for AzureRM provider 2.x.
    features {}
}
variable "prefix" {
  default = "tfvmex"
}

resource "azurerm_resource_group" "main" {
  name     = "${var.prefix}-resources"
  location = "West Europe"
}

resource "azurerm_virtual_network" "main" {
  name                = "${var.prefix}-network"
  address_space       = ["10.0.0.0/16"]
  location            = azurerm_resource_group.main.location
  resource_group_name = azurerm_resource_group.main.name
}

resource "azurerm_subnet" "internal" {
  name                 = "internal"
  resource_group_name  = azurerm_resource_group.main.name
  virtual_network_name = azurerm_virtual_network.main.name
  address_prefixes     = ["10.0.2.0/24"]
}

resource "azurerm_network_interface" "main" {
  name                = "${var.prefix}-nic"
  location            = azurerm_resource_group.main.location
  resource_group_name = azurerm_resource_group.main.name

  ip_configuration {
    name                          = "testconfiguration1"
    subnet_id                     = azurerm_subnet.internal.id
    private_ip_address_allocation = "Dynamic"
  }
}

resource "azurerm_virtual_machine" "main" {
  name                  = "${var.prefix}-vm"
  location              = azurerm_resource_group.main.location
  resource_group_name   = azurerm_resource_group.main.name
  network_interface_ids = [azurerm_network_interface.main.id]
  vm_size               = "Standard_DS1_v2"

  # Uncomment this line to delete the OS disk automatically when deleting the VM
  # delete_os_disk_on_termination = true

  # Uncomment this line to delete the data disks automatically when deleting the VM
  # delete_data_disks_on_termination = true

  storage_image_reference {
    publisher = "Canonical"
    offer     = "UbuntuServer"
    sku       = "16.04-LTS"
    version   = "latest"
  }
  storage_os_disk {
    name              = "myosdisk1"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "Standard_LRS"
  }
  os_profile {
    computer_name  = "hostname"
    admin_username = "testadmin"
    admin_password = "Password1234!"
  }
  os_profile_linux_config {
    disable_password_authentication = false
  }
  tags = {
    environment = "staging"
  }
}

resource "azurerm_storage_account" "main" {
  name                     = "omstesttest22"
  resource_group_name      = azurerm_resource_group.main.name
  location                 = "westus"
  account_tier             = "Standard"
  account_replication_type = "GRS"

  tags = {
    environment = "staging"
  }
}

resource "azurerm_log_analytics_workspace" "law02" {
  name                = "${var.prefix}-logAnalytics"
 location            = azurerm_resource_group.main.location
  resource_group_name = azurerm_resource_group.main.name
 sku                 = "PerGB2018"
  retention_in_days   = 30
}



resource "azurerm_log_analytics_solution" "example" {
  solution_name         = "ContainerInsights"
  location              = azurerm_resource_group.main.location
  resource_group_name   = azurerm_resource_group.main.name
  workspace_resource_id = azurerm_log_analytics_workspace.law02.id
  workspace_name        = azurerm_log_analytics_workspace.law02.name

  plan {
    publisher = "Microsoft"
    product   = "OMSGallery/ContainerInsights"
  }
}

#===================================================================
# Set Monitoring and Log Analytics Workspace
#===================================================================
resource "azurerm_virtual_machine_extension" "oms_mma02" {
  name                       = "test-OMSExtension"
virtual_machine_id         =  azurerm_virtual_machine.main.id
  publisher                  = "Microsoft.EnterpriseCloud.Monitoring"
  type                       = "OmsAgentForLinux"
  type_handler_version       = "1.12"
  auto_upgrade_minor_version = true

  settings = <<SETTINGS
    {
      "workspaceId" : "${azurerm_log_analytics_workspace.law02.workspace_id}"
    }
  SETTINGS

  protected_settings = <<PROTECTED_SETTINGS
    {
      "workspaceKey" : "${azurerm_log_analytics_workspace.law02.primary_shared_key}"
    }
  PROTECTED_SETTINGS
}

希望已经清楚了。 谢谢!

这里有几篇关于这个话题的文章,或许你可以参考:

来自document,VM insights 需要在每个要监视的虚拟机上安装以下两个代理。

  • Log Analytics 代理。从虚拟机或虚拟机规模集中收集事件和性能数据,并将其传送到 Log Analytics 工作区。 Azure 资源上 Log Analytics 代理的部署方法使用 Windows 和 Linux.
  • 的 VM 扩展
  • 依赖代理。收集有关虚拟机上的进程 运行 和外部进程依赖项的已发现数据,这些数据由 VM 洞察力中的映射功能使用。依赖代理依赖 Log Analytics 代理将其数据传送到 Azure Monitor。 Azure 资源上依赖代理的部署方法使用 Windows 和 Linux.
  • 的 VM 扩展

经过我的验证,您可以将 DependencyAgent 扩展添加到您现有的代码中。

resource "azurerm_virtual_machine_extension" "da" {
  name                       = "DAExtension"
  virtual_machine_id         =  azurerm_virtual_machine.main.id
  publisher                  = "Microsoft.Azure.Monitoring.DependencyAgent"
  type                       = "DependencyAgentLinux"
  type_handler_version       = "9.5"
  auto_upgrade_minor_version = true

}

有关详细信息,请阅读 Configure Log Analytics workspace for VM insights and Enable VM insights guest health (preview)

请使用产品“OMSGallery/VMInsights”(而不是“OMSGallery/ContainerInsights”)

resource "azurerm_log_analytics_solution" "..." {
  solution_name         = "..."
  location              = ...
  resource_group_name   = ...
  workspace_resource_id = ...
  workspace_name        = ...

  plan {
    publisher = "Microsoft"
    product   = "OMSGallery/VMInsights"
 }
}

要使用 Terraform 部署它:

部署一个日志分析工作区和一个与该工作区关联的 VMInsights 解决方案。

resource "azurerm_log_analytics_workspace" "law" {
  name                      = "LogAnalyticsWorkspace"
  location                  = "Your location"
  resource_group_name       = "Your resource group"
  sku                       = "PerGB2018"
  retention_in_days         = "your retention in days"
  internet_ingestion_enabled= true
  internet_query_enabled    = false
  tags                      = "Your tags"
}

resource "azurerm_log_analytics_solution" "vminsights" {
  solution_name         = "VMInsights"
  location              = "Your location"
  resource_group_name   = "Your resource group"
  workspace_resource_id = azurerm_log_analytics_workspace.law.id
  workspace_name        = azurerm_log_analytics_workspace.law.name
  tags                  = "Your tags"

  plan {
    publisher = "Microsoft"
    product   = "OMSGallery/VMInsights"
  }
}

像往常一样使用 OMSAgent 和 DependencyAgentWindows 扩展部署 VM:

resource "azurerm_windows_virtual_machine" "vm" {
   ......
   ......
}

Windows 的 OMS: https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/oms-windows

resource "azurerm_virtual_machine_extension" "omsext" {
  name                  = "OMSExtension" 
  virtual_machine_id    = azurerm_windows_virtual_machine.vm.id
  publisher             = "Microsoft.EnterpriseCloud.Monitoring"
  type                  = "MicrosoftMonitoringAgent"
  type_handler_version  = "1.0"
  auto_upgrade_minor_version = true

  settings = <<SETTINGS
    {
        "workspaceId": "${azurerm_log_analytics_workspace.law.id}"
    }
  SETTINGS
  protected_settings = <<PROTECTED_SETTINGS
    {
      "workspaceKey": "${azurerm_log_analytics_workspace.law.primary_shared_key}"
    }
  PROTECTED_SETTINGS  

  tags                       = "Your tags"
}

Windows 的 DA 代理: https://docs.microsoft.com/en-us/azure/virtual-machines/extensions/agent-dependency-windows

resource "azurerm_virtual_machine_extension" "DAAgent" {
  name                       = "DAAgentExtension"
  virtual_machine_id         = azurerm_windows_virtual_machine.vm.id
  publisher                  = "Microsoft.Azure.Monitoring.DependencyAgent"
  type                       = "DependencyAgentWindows"
  type_handler_version       = "9.10"
  auto_upgrade_minor_version = true
  tags                       = "Your tags"
}