Enviar métricas de SO invitado al almacén de métricas de Azure Monitor con una plantilla de ARM para una máquina virtual de Windows

Los datos de rendimiento del sistema operativo invitado de las máquinas virtuales de Azure no se recopilan automáticamente como otras métricas de la plataforma. Instale la Extensión de diagnóstico de Azure Monitor para recopilar métricas del sistema operativo invitado en la base de datos de métricas para que se pueda usar con todas las características de las métricas de Azure Monitor. Estas características incluyen la generación de alertas casi en tiempo real, la creación de gráficos, el enrutamiento y el acceso desde una API de REST. En este artículo se describe el proceso de envío de métricas de rendimiento del SO invitado para una máquina virtual Windows a la base de datos de métricas mediante una plantilla de Azure Resource Manager.

Nota

Para obtener más información sobre la configuración de la extensión de diagnósticos para recopilar métricas del SO invitado mediante Azure Portal, consulte Instalación y configuración de la extensión de Azure Diagnostics para Windows (WAD).

Si no está familiarizado con las plantillas de ARM, obtenga información sobre las implementaciones de plantilla y su estructura y sintaxis.

Prerrequisitos

Configuración de Azure Monitor como receptor de datos

La extensión Azure Diagnostics usa una característica denominada receptores de datos para enrutar las métricas y los registros a distintas ubicaciones. En los pasos siguientes se muestra cómo usar una plantilla de ARM y PowerShell para implementar una VM con el nuevo receptor de datos Azure Monitor.

Plantilla ARM

En este ejemplo, puede usar una plantilla de ejemplo disponible públicamente. Las plantillas de inicio están en GitHub.

  • Azuredeploy.json: una plantilla de ARM configurada previamente para la implementación de una máquina virtual.
  • Azuredeploy.Parameters.json: un archivo de parámetros que almacena información como el nombre de usuario y la contraseña que quiere establecer para la VM. Durante la implementación, la plantilla ARM usa los parámetros establecidos en este archivo.

Descargue y guarde ambos archivos localmente.

Modificación de azuredeploy.parameters.json

  1. Abra el archivo azuredeploy.parameters.json.

  2. Especifique los valores de adminUsername y adminPassword para la VM. Estos parámetros se utilizan para el acceso remoto a la VM. Para evitar el secuestro de la VM, no use los valores de esta plantilla. Los bots buscan por Internet los nombres de usuario y las contraseñas en repositorios públicos de GitHub. Es probable que sean VM de prueba con estos valores predeterminados.

  3. Cree un dnsname único para la VM.

Modificación de azuredeploy.json

  1. Abra el archivo azuredeploy.json.

  2. Agregue un identificador de cuenta de almacenamiento a la sección variables de la plantilla después de la entrada para storageAccountName.

    // Find these lines.
    "variables": {
        "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'sawinvm')]",
    
    // Add this line directly below.
        "accountid": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
    
  3. Agregue esta extensión de Managed Service Identity (MSI) a la plantilla en la parte superior de la sección resources. La extensión garantiza que Azure Monitor acepte las métricas que se emiten.

    //Find this code.
    "resources": [
    // Add this code directly below.
        {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "name": "[concat(variables('vmName'), '/', 'WADExtensionSetup')]",
            "apiVersion": "2017-12-01",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" ],
            "properties": {
                "publisher": "Microsoft.ManagedIdentity",
                "type": "ManagedIdentityExtensionForWindows",
                "typeHandlerVersion": "1.0",
                "autoUpgradeMinorVersion": true,
                "settings": {
                    "port": 50342
                }
            }
        },
    
  4. Agregue la configuración de identity en el recurso de VM para asegurarse de que Azure asigne a la extensión MSI una identidad del sistema. Este paso garantiza que la VM pueda emitir métricas de invitado sobre sí misma a Azure Monitor.

    // Find this section
                    "subnet": {
                "id": "[variables('subnetRef')]"
                }
            }
            }
        ]
        }
    },
    {
        "apiVersion": "2017-03-30",
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[variables('vmName')]",
        "location": "[resourceGroup().location]",
        // add these 3 lines below
        "identity": {
        "type": "SystemAssigned"
        },
        //end of added lines
        "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
        ],
        "properties": {
        "hardwareProfile": {
        ...
    
  5. Agregue la siguiente configuración para habilitar la extensión de diagnóstico en una máquina virtual Windows. En una máquina virtual sencilla basada en el Administrador de recursos, puede agregar la configuración de extensión a la matriz de recursos de la máquina virtual. La línea "sinks": "AzMonSink" y la correspondiente "SinksConfig" más adelante en la sección permiten que la extensión emita métricas directamente a Azure Monitor. No dude en agregar o quitar contadores de rendimiento según sea necesario.

            "networkProfile": {
                "networkInterfaces": [
                {
                    "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                }
                ]
            },
    "diagnosticsProfile": {
        "bootDiagnostics": {
        "enabled": true,
        "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob]"
        }
    }
    },
    //Start of section to add
    "resources": [
    {
                "type": "Microsoft.Compute/virtualMachines/extensions",
                "name": "[concat(variables('vmName'), '/', 'Microsoft.Insights.VMDiagnosticsSettings')]",
                "apiVersion": "2017-12-01",
                "location": "[resourceGroup().location]",
                "dependsOn": [
                "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
                ],
                "properties": {
                "publisher": "Microsoft.Azure.Diagnostics",
                "type": "IaaSDiagnostics",
                "typeHandlerVersion": "1.12",
                "autoUpgradeMinorVersion": true,
                "settings": {
                    "WadCfg": {
                    "DiagnosticMonitorConfiguration": {
        "overallQuotaInMB": 4096,
        "DiagnosticInfrastructureLogs": {
                        "scheduledTransferLogLevelFilter": "Error"
            },
                        "Directories": {
                        "scheduledTransferPeriod": "PT1M",
        "IISLogs": {
                            "containerName": "wad-iis-logfiles"
                        },
                        "FailedRequestLogs": {
                            "containerName": "wad-failedrequestlogs"
                        }
                        },
                        "PerformanceCounters": {
                        "scheduledTransferPeriod": "PT1M",
                        "sinks": "AzMonSink",
                        "PerformanceCounterConfiguration": [
                            {
                            "counterSpecifier": "\\Memory\\Available Bytes",
                            "sampleRate": "PT15S"
                            },
                            {
                            "counterSpecifier": "\\Memory\\% Committed Bytes In Use",
                            "sampleRate": "PT15S"
                            },
                            {
                            "counterSpecifier": "\\Memory\\Committed Bytes",
                            "sampleRate": "PT15S"
                            }
                        ]
                        },
                        "WindowsEventLog": {
                        "scheduledTransferPeriod": "PT1M",
                        "DataSource": [
                            {
                            "name": "Application!*"
                            }
                        ]
                        },
                        "Logs": {
                        "scheduledTransferPeriod": "PT1M",
                        "scheduledTransferLogLevelFilter": "Error"
                        }
                    },
                    "SinksConfig": {
                        "Sink": [
                        {
                            "name" : "AzMonSink",
                            "AzureMonitor" : {}
                        }
                        ]
                    }
                    },
                    "StorageAccount": "[variables('storageAccountName')]"
                },
                "protectedSettings": {
                    "storageAccountName": "[variables('storageAccountName')]",
                    "storageAccountKey": "[listKeys(variables('accountid'),'2015-06-15').key1]",
                    "storageAccountEndPoint": "https://core.windows.net/"
                }
                }
            }
            ]
    //End of section to add
    
  6. Guarde y cierre ambos archivos.

Implementación de la plantilla de ARM

Nota

Debe estar ejecutando la versión de la extensión 1.5 o superior de Azure Diagnostics y tener la propiedad autoUpgradeMinorVersion: establecida en true en la plantilla de ARM. A continuación, Azure carga la extensión adecuada cuando se inicia la VM. Si no tiene estas opciones en la plantilla, modifíquelas y vuelva a implementar la plantilla.

Para implementar la plantilla de ARM, usamos Azure PowerShell.

  1. Inicie PowerShell.

  2. Inicio de sesión en Azure mediante Login-AzAccount.

  3. Obtenga una lista de suscripciones con Get-AzSubscription.

  4. Establezca la suscripción que se usa para crear o actualizar la máquina virtual en:

    Select-AzSubscription -SubscriptionName "<Name of the subscription>"
    
  5. Para crear un nuevo grupo de recursos para la VM que se está implementando, ejecute el comando siguiente:

     New-AzResourceGroup -Name "<Name of Resource Group>" -Location "<Azure Region>"
    
  6. Ejecute los comandos siguientes para implementar la máquina virtual mediante la plantilla de ARM.

    Nota

    Si quiere actualizar una VM existente, agregue -Mode Incremental al final del comando siguiente.

    New-AzResourceGroupDeployment -Name "<NameThisDeployment>" -ResourceGroupName "<Name of the Resource Group>" -TemplateFile "<File path of your Resource Manager template>" -TemplateParameterFile "<File path of your parameters file>"
    
  7. Una vez que la implementación se realice correctamente, la máquina virtual debe estar en Azure Portal, emitiendo métricas a Azure Monitor.

    Nota

    Puede que surjan errores en torno al parámetro vmSkuSize seleccionado. Si se produce este error, vuelva al archivo azuredeploy.json y actualice el valor predeterminado del parámetro vmSkuSize. En este caso, se recomienda probar "Standard_DS1_v2").

Gráfico de las métricas

  1. Inicie sesión en Azure Portal.

  2. En el menú de la izquierda, seleccione Monitor.

  3. En la página Monitor, seleccione Métricas.

    Screenshot that shows the Metrics page.

  4. Cambie el período de agregación a Últimos 30 minutos.

  5. En el menú desplegable de recursos, seleccione la VM que ha creado. Si no ha cambiado el nombre de la plantilla, debe ser SimpleWinVM2.

  6. En la lista desplegable de espacios de nombres, seleccione azure.vm.windows.guestmetrics.

  7. En la lista desplegable de métricas, seleccione Memory%Committed Bytes in Use (Memoria\bytes confirmados en uso).

Pasos siguientes

Más información acerca de las métricas personalizadas.