Compartir a través de


Supervisión de aplicaciones de Apache Spark con Azure Log Analytics (versión preliminar)

La extensión de emisor de diagnóstico de Apache Spark de Fabric es una biblioteca que permite a las aplicaciones de Apache Spark emitir registros, registros de eventos y métricas a varios destinos, incluidos Azure Log Analytics, Azure Storage y Azure Event Hubs.

En este tutorial, aprenderá a configurar y emitir registros y métricas de Spark a Log Analytics en Fabric. Una vez configurado, puede recopilar y analizar métricas y registros de aplicaciones de Apache Spark en el área de trabajo de Log Analytics.

Configuración de la información del área de trabajo

Siga estos pasos para configurar la información necesaria en Fabric.

Paso 1: Creación de un área de trabajo de Log Analytics

Consulte uno de los siguientes recursos para crear este área de trabajo:

Paso 2: Creación de un artefacto de entorno de Fabric con la configuración de Apache Spark

Para configurar Spark, cree un artefacto de entorno de Fabric y elija una de las siguientes opciones:

Opción 1: Configuración con el identificador y la clave del área de trabajo de Log Analytics

  1. Creación de un artefacto de entorno de Fabric en Fabric

  2. Agregue las siguientes propiedades de Spark con los valores adecuados al artefacto de entorno o seleccione Agregar desde .yml en la cinta de opciones para descargar el archivo yaml de ejemplo, que ya contiene las propiedades necesarias.

    • <LOG_ANALYTICS_WORKSPACE_ID>: identificador del área de trabajo de Log Analytics.
    • <LOG_ANALYTICS_WORKSPACE_KEY>: clave de Log Analytics. Para encontrarla, en Azure Portal, vaya a Área de trabajo de Azure Log Analytics>Agentes>Clave principal.
    spark.synapse.diagnostic.emitters: LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Como alternativa, para aplicar la misma configuración que Azure Synapse, use las siguientes propiedades o seleccione Agregar desde .yml en la cinta de opciones para descargar el archivo yaml de ejemplo.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    
  3. Guarde y publique los cambios.

Opción 2: Configuración con Azure Key Vault

Nota:

Problema conocido: provisionalmente, no se puede iniciar una sesión con la opción 2. Actualmente, almacenar los secretos en Key Vault impide que se inicien las sesiones de Spark. Dé prioridad a la configuración mediante el método descrito en la opción 1.

Debe conceder permiso de lectura de secretos a los usuarios que vayan a enviar aplicaciones Apache Spark. Para más información, consulte Acceso a las claves, los certificados y los secretos de Key Vault con un control de acceso basado en rol de Azure.

Para configurar Azure Key Vault para almacenar la clave del área de trabajo, siga estos pasos:

  1. Vaya al almacén de claves en Azure Portal.

  2. En la página de configuración del almacén de claves, seleccione Secretos y, a continuación, Generar/importar.

  3. En la pantalla Crear un secreto, escriba los siguientes valores:

    • Nombre: escriba un nombre para el secreto. Como valor predeterminado, escriba SparkLogAnalyticsSecret.
    • Valor: escriba el valor de <LOG_ANALYTICS_WORKSPACE_KEY> del secreto.
    • Deje las restantes opciones con sus valores predeterminados. Seleccione Crear.
  4. Creación de un artefacto de entorno de Fabric en Fabric

  5. Agregue las siguientes propiedades de Spark con los valores correspondientes al artefacto de entorno o seleccione Agregar desde .yml en la cinta de opciones para descargar el archivo yaml de ejemplo, que incluye las siguientes propiedades de Spark.

    • <LOG_ANALYTICS_WORKSPACE_ID>: identificador del área de trabajo de Log Analytics.
    • <AZURE_KEY_VAULT_NAME>: el nombre del almacén de claves que configuró.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (opcional): el nombre del secreto en el almacén de claves para la clave del área de trabajo. El valor predeterminado es SparkLogAnalyticsSecret.
    // Spark properties for LA
    spark.synapse.diagnostic.emitters LA
    spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME>
    spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Como alternativa, para aplicar la misma configuración que Azure Synapse, use las siguientes propiedades o seleccione Agregar desde .yml en la cinta de opciones para descargar el archivo yaml de ejemplo.

    spark.synapse.logAnalytics.enabled: "true"
    spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_NAME>
    spark.synapse.logAnalytics.keyVault.key.secret: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Nota:

    También puede almacenar el identificador del área de trabajo en Key Vault. Establezca el nombre del secreto en SparkLogAnalyticsWorkspaceId o use la configuración spark.synapse.logAnalytics.keyVault.key.workspaceId para especificar el nombre del secreto del identificador del área de trabajo.

    Para obtener una lista de las configuraciones de Apache Spark, consulte Configuraciones de Apache Spark disponibles.

  6. Guarde y publique los cambios.

Paso 3: Adjuntar el artefacto de entorno a cuadernos o definiciones de trabajos de Spark, o establecerlo como el valor predeterminado del área de trabajo

Para adjuntar el entorno a cuadernos o definiciones de trabajos de Spark:

  1. Vaya a su cuaderno o definición de trabajo de Spark en Fabric.
  2. Seleccione el menú Entorno en la pestaña Inicio y seleccione el entorno configurado.
  3. La configuración se aplicará después de iniciar una sesión de Spark.

Para establecer el entorno como valor predeterminado del área de trabajo:

  1. Vaya a Configuración del área de trabajo en Fabric.
  2. Busque la configuración de Spark en la configuración del área de trabajo (Configuración del área de trabajo -> Ingeniería/ciencia de datos ->Configuración de Spark)
  3. Seleccione la pestaña Entorno, elija el entorno con las propiedades de Spark de diagnóstico configuradas y haga clic en Guardar.

Nota:

Solo los administradores del área de trabajo pueden administrar las configuraciones. Los valores se aplicarán a los cuadernos y las definiciones de trabajos de Spark que se adjunten a la configuración del área de trabajo. Para obtener más información, consulte Configuración del área de trabajo de Fabric.

Envío de una aplicación Apache Spark y visualización de los registros y métricas

Para enviar una aplicación Apache Spark:

  1. Envíe una aplicación Apache Spark, con el entorno asociado, que se configuró en el paso anterior. Para ello, puede usar cualquiera de los siguientes métodos:

    • Ejecute un cuaderno en Fabric.
    • Envíe un trabajo por lotes de Apache Spark mediante una definición de trabajo de Apache Spark.
    • Ejecute las actividades de Spark en las canalizaciones.
  2. Vaya al área de trabajo de Log Analytics especificada y, luego, vea las métricas y los registros de la aplicación cuando la aplicación Apache Spark empiece a ejecutarse.

Escritura de registros de aplicaciones personalizados

Puede usar la biblioteca Log4j de Apache para escribir registros personalizados. Estos son ejemplos de Scala y PySpark:

Ejemplo de Scala:

%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
      1/0
 } catch {
      case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()

Ejemplo de PySpark:

%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")

Consulta de datos con Kusto

Para consultar eventos de Apache Spark:

SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Para consultar los registros del ejecutor y el controlador de la aplicación Spark:

SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Para consultar métricas de Apache Spark:

SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

Límites de datos

Fabric envía datos de registro a Azure Monitor mediante HTTP Data Collector API. Los datos publicados en la API de recopilación de datos de Azure Monitor están sujetos a ciertas restricciones:

  • Máximo de 30 MB por publicación en Data Collector API de Azure Monitor. Se trata de un límite de tamaño para una sola publicación. Si los datos de una única publicación superan los 30 MB, debe dividir los datos en fragmentos más pequeños y enviarlos al mismo tiempo.
  • Límite de 32 KB para los valores de campo. Si el valor del campo es mayor que 32 KB, se truncan los datos.
  • Se recomienda un máximo de 50 campos para un tipo determinado. Se trata de un límite práctico desde una perspectiva de la experiencia de búsqueda y la facilidad de uso.
  • Las tablas de las áreas de trabajo de Log Analytics solo admiten hasta 500 columnas.
  • Máximo de 45 caracteres para los nombres de columna.

Creación y administración de alertas

Los usuarios pueden realizar consultas para evaluar las métricas y los registros según una frecuencia establecida y activar una alerta en función de los resultados. Para más información, consulte Creación, visualización y administración de alertas de registro mediante Azure Monitor.

Áreas de trabajo de Fabric con red virtual administrada

Actualmente, no se puede seleccionar Azure Log Analytics como destino para los registros de Spark y la emisión de métricas en una red virtual administrada porque el punto de conexión privado administrado no admite Log Analytics como origen de datos.

Pasos siguientes