Recopilación y agregación de eventos con Azure Diagnostics de Windows

Cuando se ejecuta un clúster de Azure Service Fabric, es conveniente recopilar los registros de todos los nodos en una ubicación central. La presencia de los registros en una ubicación central facilita el análisis y la solución de los problemas del clúster o de las aplicaciones y los servicios que se ejecutan en ese clúster.

Uno de los métodos para cargar y recopilar registros es usar la extensión Azure Diagnostics de Windows (WAD), que carga registros en Azure Storage, y también tiene la opción de enviar registros a Azure Application Insights o Event Hubs. Además, puede usar un proceso externo para leer los eventos desde el almacenamiento y colocarlos en un producto de plataforma de análisis, como los registros de Azure Monitor u otra solución de análisis de registros.

Nota:

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Prerrequisitos

En este artículo se emplean las herramientas siguientes:

Eventos de plataforma de Service Fabric

Service Fabric configura algunos canales de registro predefinidos. Los que se indican a continuación se configuran previamente con la extensión para que envíen datos de supervisión y diagnóstico a una tabla de almacenamiento u otro lugar:

Implementación de la extensión de Diagnostics mediante el portal

El primer paso para recopilar registros es implementar la extensión de Diagnostics en los nodos del conjunto de escalado de máquinas virtuales del clúster de Service Fabric. La extensión de Diagnósticos recopila registros en cada máquina virtual y los carga a la cuenta de almacenamiento que especifique. Los siguientes pasos describen cómo lograrlo para los clústeres nuevos y existentes mediante Azure Portal y plantillas de Azure Resource Manager.

Implementación de la extensión Diagnostics como parte de la creación del clúster a través de Azure Portal

Al crear el clúster, en el paso de configuración de clúster, expanda la configuración opcional y asegúrese de que Diagnósticos está establecido en Encendido (valor predeterminado).

Azure Diagnostics settings in the portal for cluster creation

Es muy recomendable descargar la plantilla antes de hacer clic en Crear en el paso final. Para más información, vea Configuración de un clúster de Service Fabric con una plantilla de Azure Resource Manager. Necesita la plantilla para realizar cambios en los canales (mencionados anteriormente) de los que recopilar los datos.

Cluster Template

Ahora que agrega eventos a Azure Storage, configure los registros de Azure Monitor para obtener información y consultarlos en el portal de los registros de Azure Monitor.

Nota:

Actualmente no existe ninguna manera de filtrar o limpiar los eventos que se envían a las tablas. Si no se implementa un proceso para quitar eventos de la tabla, esta seguirá aumentando (límite predeterminado: 50 GB). Más adelante en este artículo encontrará instrucciones sobre cómo cambiar esto. Además, hay un ejemplo de un servicio de limpieza de datos en ejecución en el ejemplo de guardián. Se recomienda que escriba uno para usted, a menos que tenga una buena razón para almacenar los registros durante más de 30 o 90 días.

Implementación de la extensión de Diagnostics mediante Azure Resource Manager

Creación de un clúster con la extensión de Diagnostics

Para crear un clúster mediante el Resource Manager, tiene que agregar el JSON de la configuración de Diagnostics a la plantilla de Resource Manager completa. Dentro de los ejemplos de plantillas del Administrador de recursos, proporcionamos una plantilla de ejemplo del Administrador de recursos de clúster de cinco máquinas virtuales con la configuración de Diagnósticos añadida. Puede verlo en esta ubicación en la galería de ejemplos de Azure: Clúster de cinco nodos con el ejemplo de Diagnósticos en la plantilla de Resource Manager.

Para ver la configuración de Diagnósticos en la plantilla de Resource Manager, abra el archivo azuredeploy.json y busque IaaSDiagnostics. Para crear un clúster con esta plantilla, presione el botón Deploy to Azure (Implementar en Azure) disponible en el vínculo anterior.

También puede descargar el ejemplo de Resource Manager, modificarlo y crear un clúster con la plantilla modificada mediante el comando New-AzResourceGroupDeployment en una ventana de Azure PowerShell. Vea el código siguiente para los parámetros que se pasan al comando. Para más información sobre cómo implementar un grupo de recursos con PowerShell, vea el artículo sobre la implementación de un grupo de recursos con la plantilla de Azure Resource Manager.

Incorporación de la extensión de Diagnostics a un clúster existente

Si tiene un clúster existente sin la extensión de Diagnostics implementada, puede agregarla o actualizarla con la plantilla del clúster. Modifique la plantilla de Resource Manager usada para crear el clúster existente o descargue la plantilla desde el portal, tal como se describió anteriormente. Modifique el archivo template.json mediante la realización de las siguientes tareas:

Agregue un nuevo recurso de almacenamiento a la plantilla mediante una adición en la sección de recursos.

{
	"apiVersion": "2018-07-01",
	"type": "Microsoft.Storage/storageAccounts",
	"name": "[parameters('applicationDiagnosticsStorageAccountName')]",
	"location": "[parameters('computeLocation')]",
	"sku": {
	"name": "[parameters('applicationDiagnosticsStorageAccountType')]"
	"tier": "standard"
  },
	"tags": {
	"resourceType": "Service Fabric",
	"clusterName": "[parameters('clusterName')]"
  }
},

A continuación, agréguelo a la sección de parámetros justo después de las definiciones de la cuenta de almacenamiento, entre supportLogStorageAccountName. Reemplace el texto de marcador de posición aquí va el nombre de la cuenta de almacenamiento por el nombre de la cuenta de almacenamiento que desee.

    "applicationDiagnosticsStorageAccountType": {
      "type": "string",
      "allowedValues": [
        "Standard_LRS",
        "Standard_GRS"
      ],
      "defaultValue": "Standard_LRS",
      "metadata": {
        "description": "Replication option for the application diagnostics storage account"
      }
    },
    "applicationDiagnosticsStorageAccountName": {
      "type": "string",
      "defaultValue": "**STORAGE ACCOUNT NAME GOES HERE**",
      "metadata": {
        "description": "Name for the storage account that contains application diagnostics data from the cluster"
      }
    },

Luego, actualice la sección VirtualMachineProfile del archivo template.json. Para ello, agregue el siguiente código dentro de la matriz de extensiones. Asegúrese de agregar una coma al principio o al final, según donde se inserte.

{
    "name": "[concat(parameters('vmNodeType0Name'),'_Microsoft.Insights.VMDiagnosticsSettings')]",
    "properties": {
        "type": "IaaSDiagnostics",
        "autoUpgradeMinorVersion": true,
        "protectedSettings": {
        "storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
        "storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
        "storageAccountEndPoint": "https://core.windows.net/"
        },
        "publisher": "Microsoft.Azure.Diagnostics",
        "settings": {
        "WadCfg": {
            "DiagnosticMonitorConfiguration": {
            "overallQuotaInMB": "50000",
            "EtwProviders": {
                "EtwEventSourceProviderConfiguration": [
                {
                    "provider": "Microsoft-ServiceFabric-Actors",
                    "scheduledTransferKeywordFilter": "1",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableActorEventTable"
                    }
                },
                {
                    "provider": "Microsoft-ServiceFabric-Services",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricReliableServiceEventTable"
                    }
                }
                ],
                "EtwManifestProviderConfiguration": [
                {
                    "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                },
                {
                    "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                    "scheduledTransferLogLevelFilter": "Information",
                    "scheduledTransferKeywordFilter": "4611686018427387904",
                    "scheduledTransferPeriod": "PT5M",
                    "DefaultEvents": {
                    "eventDestination": "ServiceFabricSystemEventTable"
                    }
                }
                ]
            }
            }
        },
        "StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
        },
        "typeHandlerVersion": "1.5"
    }
}

Después de modificar el archivo template.json tal como se indicó, vuelva a publicar la plantilla de Resource Manager. En caso de que la plantilla se haya exportado, si ejecuta el archivo deploy.ps1 , se vuelve a publicar dicha plantilla. Después de realizar la implementación, asegúrese de que el estado ProvisioningState sea Correcto.

Sugerencia

Si va a implementar contenedores en el clúster, habilite WAD para recopilar estadísticas de Docker. Para ello, agregue lo siguiente a la sección WadCfg > DiagnosticMonitorConfiguration.

"DockerSources": {
    "Stats": {
        "enabled": true,
        "sampleRate": "PT1M"
    }
},

Actualización de la cuota de almacenamiento

Como las tablas que rellena la extensión aumentan hasta que se alcanza la cuota, quizá quiera considerar reducir el tamaño de esta. El valor predeterminado es 50 GB y se puede configurar en la plantilla en el campo overallQuotaInMB de DiagnosticMonitorConfiguration

"overallQuotaInMB": "50000",

Configuraciones de recopilación de registros

Los registros de los canales adicionales también están disponibles para la recopilación, estas son algunas de las configuraciones más comunes que puede realizar en la plantilla para los clústeres que se ejecutan en Azure.

  • Canal operativo, básico: Habilitadas de forma predeterminada, las operaciones de alto nivel que realizan Service Fabric y el clúster, incluidos eventos para un nodo próximo, una nueva aplicación que se implementa o la reversión de una actualización, etc. Para obtener una lista de eventos, consulte los eventos de canal operativo.

      "scheduledTransferKeywordFilter": "4611686018427387904"
    
  • Canal operativo, detallado: incluye informes de estado y decisiones de equilibrio de carga, además de todos los elementos de canal operativo básico. Estos eventos son generados por el sistema o por el código mediante las API de generación de informes de estado de mantenimiento o carga, como ReportPartitionHealth o ReportLoad. Para ver estos eventos en el Visor de eventos de diagnóstico de Visual Studio, agregue "Microsoft-ServiceFabric:4:0x4000000000000008" a la lista de proveedores de ETW.

      "scheduledTransferKeywordFilter": "4611686018427387912"
    
  • Canal de datos y mensajería, básico: registros y eventos críticos generados en la ruta de acceso a mensajería (actualmente solo ReverseProxy) y a datos, además de los registros del canal operativo detallado. Estos eventos son errores de procesamiento de solicitud y otros problemas críticos en ReverseProxy y en las solicitudes procesadas. Esta es nuestra recomendación para el registro completo. Para ver estos eventos en el Visor de eventos de diagnóstico de Visual Studio, agregue "Microsoft-ServiceFabric:4:0x4000000000000010" a la lista de proveedores de ETW.

      "scheduledTransferKeywordFilter": "4611686018427387928"
    
  • Canal de datos y mensajería, detallado: canal detallado que contiene todos los registros no críticos de datos y mensajería del clúster, y el canal operativo detallado. Para obtener información sobre solución de problemas de todos los eventos de proxy inverso, consulte la Guía de diagnóstico de proxy inverso. Para ver estos eventos en el Visor de eventos de diagnóstico de Visual Studio, agregue "Microsoft-ServiceFabric:4:0x4000000000000020" a la lista de proveedores de ETW.

      "scheduledTransferKeywordFilter": "4611686018427387944"
    

Nota:

Este canal tiene un volumen muy grande de eventos; permitir la recopilación desde este canal detallado provoca la generación rápida de muchos seguimientos, lo que puede consumir capacidad de almacenamiento. Solo active esta opción si es absolutamente necesario.

Para habilitar el Canal operativo básico, nuestra recomendación para realizar el registro completo con el mínimo de inconvenientes es que EtwManifestProviderConfiguration en el elemento WadCfg de la plantilla tenga el mismo aspecto que le mostramos aquí:

  "WadCfg": {
        "DiagnosticMonitorConfiguration": {
          "overallQuotaInMB": "50000",
          "EtwProviders": {
            "EtwEventSourceProviderConfiguration": [
              {
                "provider": "Microsoft-ServiceFabric-Actors",
                "scheduledTransferKeywordFilter": "1",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableActorEventTable"
                }
              },
              {
                "provider": "Microsoft-ServiceFabric-Services",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricReliableServiceEventTable"
                }
              }
            ],
            "EtwManifestProviderConfiguration": [
              {
                "provider": "cbd93bc2-71e5-4566-b3a7-595d8eeca6e8",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                  "eventDestination": "ServiceFabricSystemEventTable"
                }
              },
              {
                "provider": "02d06793-efeb-48c8-8f7f-09713309a810",
                "scheduledTransferLogLevelFilter": "Information",
                "scheduledTransferKeywordFilter": "4611686018427387904",
                "scheduledTransferPeriod": "PT5M",
                "DefaultEvents": {
                "eventDestination": "ServiceFabricSystemEventTable"
                }
              }
            ]
          }
        }
      },

Recopilar desde canales EventSource nuevos

Para actualizar Diagnostics de forma que recopile registros de canales EventSource nuevos que representan una nueva aplicación que vaya a implementar, siga los mismos pasos que se han descrito anteriormente para configurar Diagnostics para un clúster existente.

Actualice la sección EtwEventSourceProviderConfiguration del archivo template.json para agregar entradas para los canales EventSource nuevos antes de aplicar la actualización de la configuración mediante el comando New-AzResourceGroupDeployment de PowerShell. El nombre del origen del evento se define como parte del código en el archivo generado en Visual Studio ServiceEventSource.cs.

Por ejemplo, si el origen del evento se denomina My-Eventsource, agregue el código siguiente para colocar los eventos de My-Eventsource en una tabla denominada MyDestinationTableName.

{
  "provider": "My-Eventsource",
  "scheduledTransferPeriod": "PT5M",
  "DefaultEvents": {
    "eventDestination": "MyDestinationTableName"
  }
}

Para recopilar registros de eventos o contadores de rendimiento, modifique la plantilla de Resource Manager con los ejemplos proporcionados en Creación de una máquina virtual de Windows con supervisión y diagnóstico mediante una plantilla de Azure Resource Manager. Luego, vuelva a publicar la plantilla de Resource Manager.

Recopilar contadores de rendimiento

Para recopilar métricas de rendimiento del clúster, agregue los contadores de rendimiento a "WadCfg > DiagnosticMonitorConfiguration" en la plantilla de Resource Manager para el clúster. Vea Supervisión del rendimiento con WAD para conocer los pasos acerca de cómo modificar WadCfg para recopilar contadores de rendimiento específicos. Consulte en Service Fabric Performance Counters (Contadores de rendimiento de Service Fabric) una lista de contadores de rendimiento que se recomienda recopilar.

Si usa un receptor de Application Insights, como se describe en la siguiente sección, y quiere que estas métricas aparezcan en Application Insights, asegúrese de agregar el nombre del receptor en la sección "receptores", como se indicó anteriormente. Esto enviará automáticamente los contadores de rendimiento que se configuran individualmente para el recurso de Application Insights.

Enviar registros a Application Insights

Configuración de Application Insights con WAD

Nota:

Solo se aplica a los clústeres de Windows por ahora.

Hay dos métodos principales para enviar datos de WAD a Azure Application Insights; se consigue mediante la adición de un receptor de Application Insights a la configuración de WAD, ya sea a través de Azure Portal o bien a través de una plantilla de Azure Resource Manager.

Incorporación de una clave de instrumentación de Application Insights al crear un clúster en Azure Portal

Adding an AIKey

Si se activa "Diagnostics" al crear un clúster, aparecerá un campo opcional para escribir una clave de instrumentación de Application Insights. Si pega aquí la clave de Application Insights, el receptor de Application Insights se configura automáticamente en la plantilla de Resource Manager que se usa para implementar el clúster.

Incorporación del receptor de Application Insights a la plantilla de Resource Manager

En el archivo "WadCfg" de la plantilla de Resource Manager, agregue un "receptor" mediante la introducción de estos dos cambios:

  1. Agregue la configuración del receptor directamente después de la confirmación de que DiagnosticMonitorConfiguration se ha completado:

    "SinksConfig": {
        "Sink": [
            {
                "name": "applicationInsights",
                "ApplicationInsights": "***ADD INSTRUMENTATION KEY HERE***"
            }
        ]
    }
    
    
  2. Incluya el receptor en DiagnosticMonitorConfiguration; para ello, agregue la siguiente línea en DiagnosticMonitorConfiguration de WadCfg (justo antes de que se confirmen EtwProviders):

    "sinks": "applicationInsights"
    

En los dos fragmentos de código anteriores, el nombre "applicationInsights" se usó para describir el receptor. No se trata de un requisito y, siempre que el nombre del receptor se incluya en "sinks", puede establecer el nombre en cualquier cadena.

Actualmente, los registros del clúster se muestran como seguimientos en el visor de registros de Application Insights. Como la mayoría de los seguimientos de la plataforma son de tipo "Información", también puede considerar la opción de cambiar la configuración del receptor para que solo envíe registros de tipo "Advertencia" o "Error". Esto puede realizarse mediante la adición de "canales" al receptor, como se demuestra en este artículo.

Nota:

Si usa una clave de Application Insights incorrecta en el portal o en la plantilla de Resource Manager, deberá cambiarla manualmente y actualizar el clúster o volver a implementarlo.

Pasos siguientes

Una vez que haya configurado correctamente Azure Diagnostics, verá los datos en las tablas de almacenamiento de los registros de ETW y EventSource. Si decide usar los registros de Azure Monitor, Kibana u otra plataforma de análisis y visualización de datos que no se configure directamente en la plantilla de Resource Manager, asegúrese de configurar la plataforma de su elección para leer los datos de estas tablas de almacenamiento. Es relativamente fácil hacerlo en el caso de los registros de Azure Monitor, como se explica en Análisis de eventos y registro. Application Insights es un caso especial en este sentido, ya que puede configurarse como parte de la configuración de la extensión de Diagnostics, por lo que debe leer el artículo correspondiente si opta por usar AI.

Nota:

Actualmente no existe ninguna manera de filtrar o limpiar los eventos que se envían a la tabla. Si no se implementa un proceso para quitar eventos de la tabla, la tabla seguirá aumentando. Actualmente, hay un ejemplo de un servicio de limpieza de datos en ejecución en el ejemplo de guardián. Se recomienda que escriba uno para sí mismo, a menos que tenga una buena razón para almacenar los registros durante más de 30 o 90 días.