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:
- Creación de un área de trabajo en Azure Portal.
- Creación de un área de trabajo con la CLI de Azure.
- Creación y configuración de un área de trabajo en Azure Monitor con PowerShell.
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
Creación de un artefacto de entorno de Fabric en Fabric
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.
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:
Vaya al almacén de claves en Azure Portal.
En la página de configuración del almacén de claves, seleccione Secretos y, a continuación, Generar/importar.
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.
- Nombre: escriba un nombre para el secreto. Como valor predeterminado, escriba
Creación de un artefacto de entorno de Fabric en Fabric
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 esSparkLogAnalyticsSecret
.
// 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ónspark.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.
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:
- Vaya a su cuaderno o definición de trabajo de Spark en Fabric.
- Seleccione el menú Entorno en la pestaña Inicio y seleccione el entorno configurado.
- 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:
- Vaya a Configuración del área de trabajo en Fabric.
- 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)
- 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:
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.
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
- Tutorial: Uso de Azure Synapse Analytics para crear definiciones de trabajos de Spark y enviarlas a un grupo de Synapse Spark
- Creación, configuración y uso de un entorno en Microsoft Fabric
- Creación y uso de puntos de conexión privados administrados en Microsoft Fabric
- Desarrollo, ejecución y administración de cuadernos de Microsoft Fabric
- Supervisión de aplicaciones Spark