Superviser des applications Apache Spark avec l’analytique des journaux d'activité Azure (préversion)
L’extension d’émission de diagnostic Fabric Apache Spark est une bibliothèque qui permet aux applications Apache Spark d’envoyer des journaux, des journaux d’évènement et des indicateurs de performance vers plusieurs destinations, incluant l’analytique des journaux d'activité Azure, le stockage Azure et les hubs d’évènement Azure.
Dans ce tutoriel, vous apprenez à configurer et à émettre des journaux et des indicateurs de performance Spark vers Log Analytics dans Fabric. Une fois la configuration effectuée, vous pouvez collecter et analyser les indicateurs de performance et les journaux des applications Apache Spark dans votre espace de travail Log Analytics.
Configuration des informations de l’espace de travail
Pour configurer les informations nécessaires dans Fabric, procédez comme suit.
Étape 1 : Créer un espace de travail Log Analytics
Pour créer cet espace de travail, consultez l’une des ressources suivantes :
- Créer un espace de travail dans le portail Azure.
- Créer un espace de travail avec Azure CLI.
- Créer et configurer un espace de travail dans Azure Monitor avec PowerShell.
Étape 2 : créer un artefact d’environnement Fabric avec configuration Apache Spark
Pour configurer Spark, créez un artefact d’environnement Fabric et choisissez l’une des options suivantes :
Option 1 : configurer avec l’ID et la clé de l’espace de travail Log Analytics
Créez un artefact d’environnement Fabric dans Fabric
Ajoutez les propriétés Spark suivantes avec les valeurs appropriées à l’artefact d’environnement, ou sélectionnez Ajouter depuis .yml dans le ruban pour télécharger l’exemple de fichier yaml, qui contient déjà les propriétés requises.
<LOG_ANALYTICS_WORKSPACE_ID>
: ID de l’espace de travail Log Analytics<LOG_ANALYTICS_WORKSPACE_KEY>
: clé Log Analytics. Pour la trouvez, accédez au portail Azure, puis à Espace de travail Azure Log Analytics>Agents>Clé primaire.
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.
Vous pouvez également appliquer la même configuration qu’Azure Synapse, utiliser les propriétés suivantes ou sélectionner Ajouter depuis .yml dans le ruban pour télécharger l’exemple de fichier yaml.
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.
Enregistrez et publiez les modifications.
Option 2 : Configuration avec Azure Key Vault
Remarque
Problème connu : Impossible de démarrer temporairement une session en utilisant l’Option 2. Actuellement, le stockage des secrets dans Key Vault empêche les sessions Spark de démarrer. Veuillez hiérarchiser la configuration en utilisant la méthode décrite dans l’Option 1.
Vous devez octroyer une autorisation de lecture des secrets aux utilisateurs qui soumettent des applications Apache Spark. Pour plus d’informations, consultez Attribution de l’accès aux clés, certificats et secrets Key Vault avec un contrôle d’accès en fonction du rôle Azure.
Pour configurer Azure Key Vault de façon à stocker la clé de l’espace de travail, procédez comme suit :
Dans le Portail Azure, accédez à votre Key Vault.
Dans la page des paramètres du coffre de clés, sélectionnez Secrets, puis Générer/Importer.
Sur l’écran Créer un secret, entrez les valeurs suivantes :
- Nom : donnez un nom au secret. Pour sélectionner la valeur par défaut, entrez
SparkLogAnalyticsSecret
. - Valeur : entrez
<LOG_ANALYTICS_WORKSPACE_KEY>
comme secret. - Conservez les valeurs par défaut des autres options. Sélectionnez ensuite Créer.
- Nom : donnez un nom au secret. Pour sélectionner la valeur par défaut, entrez
Créez un artefact d’environnement Fabric dans Fabric
Ajoutez les propriétés Spark suivantes avec les valeurs correspondantes à l’artefact d’environnement, ou sélectionnez Ajouter depuis .yml dans le ruban de l’artefact d’environnement pour télécharger l’exemple de fichier yaml qui inclut les propriétés Spark suivantes.
<LOG_ANALYTICS_WORKSPACE_ID>
: ID de l’espace de travail Log Analytics<AZURE_KEY_VAULT_NAME>
: nom du coffre de clés configuré<AZURE_KEY_VAULT_SECRET_KEY_NAME>
(facultatif) : nom du secret dans le coffre de clés pour la clé de l’espace de travail. Par défaut, il s’agit deSparkLogAnalyticsSecret
.
// 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.
Vous pouvez également appliquer la même configuration qu’Azure Synapse, utiliser les propriétés suivantes ou sélectionner Ajouter depuis .yml dans le ruban pour télécharger l’exemple de fichier yaml.
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.
Remarque
Vous pouvez également stocker l’ID de l’espace de travail dans Key Vault. Définissez le nom du secret sur
SparkLogAnalyticsWorkspaceId
, ou utilisez la configurationspark.synapse.logAnalytics.keyVault.key.workspaceId
pour spécifier le nom du secret d’ID d’espace de travail.Pour obtenir la liste des configurations Apache Spark, consultez Configurations Apache Spark disponibles
Enregistrez et publiez les modifications.
Étape 3 : attacher l’artefact d’environnement aux notebooks ou aux définitions de travail Spark, ou définir celui-ci comme espace de travail par défaut
Pour attacher l’environnement aux notebooks ou aux définitions de travail Spark :
- Accédez à votre notebook ou à votre définition de travail Spark dans Fabric.
- Sélectionnez le menu Environnement sous l’onglet Accueil et sélectionnez l’environnement configuré.
- La configuration sera appliquée après le démarrage d’une session Spark.
Pour définir l’environnement comme espace de travail par défaut :
- Accédez aux Paramètres d’espace de travail dans Fabric.
- Recherchez les paramètres Spark dans les paramètres de votre espace de travail (Paramètres d’espace de travail -> Engineering/Science des données -> Paramètres Spark)
- Sélectionnez l’onglet Environnement et choisissez l’environnement avec les propriétés Spark de diagnostic configurées, puis cliquez sur Enregistrer.
Remarque
Seuls les administrateurs d’espace de travail peuvent gérer les configurations. Les valeurs s’appliquent aux notebooks et aux définitions de travail Spark qui s’attachent aux paramètres d’espace de travail. Pour plus d’informations, consultez Paramètres d’espace de travail Fabric.
Envoyer une application Apache Spark, et voir les journaux et les métriques
Pour envoyer une application Apache Spark :
Envoyez une application Apache Spark, avec l’environnement associé, qui a été configuré à l’étape précédente. Pour cela, vous avez plusieurs possibilités :
- Exécutez un notebook dans Fabric.
- Envoyez un travail par lots Apache Spark via une définition de travail Apache Spark.
- Exécutez vos activités Spark dans vos pipelines.
Accédez à l’espace de travail Log Analytics spécifié, puis visualisez les métriques et les journaux de l’application Apache Spark quand celle-ci commence à s’exécuter.
Écrire des journaux d’application personnalisés
Vous pouvez utiliser la bibliothèque Apache Log4j pour écrire des journaux personnalisés. Voici des exemples pour Scala et PySpark :
Exemple 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()
Exemple 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")
Interroger des données avec Kusto
Pour interroger des évènements Apache Spark :
SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Pour interroger le pilote d’application Spark et les journaux d’exécuteur :
SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Pour interroger les indicateurs de performance 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
Limites de données
Fabric envoie des données de journal à Azure Monitor en utilisant l’API collecteur de données HTTP. Les données publiées dans l’API Collecte de données Azure Monitor sont soumises à certaines contraintes :
- Un maximum de 30 Mo par publication sur l’API de collecte de données d’Azure Monitor. Il s’agit d’une limite de taille pour une publication unique. Si les données d’une publication unique dépassent 30 Mo, vous devez diviser les données en blocs plus petits et les envoyer simultanément.
- Maximum de 32 Ko pour les valeurs de champ. Si la valeur de champ est supérieure à 32 Ko, les données sont tronquées.
- Maximum recommandé de 50 champs pour un type donné. Il s’agit d’une limite pratique du point de vue de la facilité d’utilisation et de l’expérience de recherche.
- Les tables des espaces de travail Log Analytics prennent en charge un maximum de 500 colonnes.
- Maximum de 45 caractères pour les noms de colonnes.
Création et gestion des alertes
Les utilisateurs peuvent lancer des requêtes pour évaluer les métriques et les journaux à une fréquence définie et déclencher une alerte en fonction des résultats. Pour plus d’informations, consultez Création, affichage et gestion des alertes de journaux avec Azure Monitor.
Espaces de travail Fabric avec un réseau virtuel managé
Azure Log Analytics ne peut actuellement pas être sélectionné comme destination pour les journaux Spark et les émissions d’indicateurs de performance dans un réseau virtuel managé, car le point de terminaison privé managé ne prend pas en charge Log Analytics comme source de données.