Partager via


Monitorer des applications Apache Spark avec Azure Log Analytics

Dans ce tutoriel, vous allez apprendre à activer le connecteur Synapse Studio intégré à Log Analytics. Vous pourrez ensuite collecter et envoyer les métriques et journaux d’une application Apache Spark à votre espace de travail Log Analytics. Enfin, vous aurez la possibilité d’utiliser un classeur Azure Monitor pour visualiser les métriques et journaux.

Configuration des informations de l’espace de travail

Pour configurer les informations nécessaires dans Synapse Studio, 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 :

Étape 2 : Collecter les informations de configuration

Utilisez l’une des options suivantes pour préparer la configuration.

Option 1 : Configuration avec l’ID et la clé de l’espace de travail Log Analytics

Collectez les valeurs suivantes pour la configuration Spark :

  • <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.logAnalytics.enabled true
spark.synapse.logAnalytics.workspaceId <LOG_ANALYTICS_WORKSPACE_ID>
spark.synapse.logAnalytics.secret <LOG_ANALYTICS_WORKSPACE_KEY>

Vous pouvez également utiliser les propriétés suivantes :

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>

Option 2 : Configuration avec Azure Key Vault

Remarque

Vous devez accorder l’autorisation de lecture secrète aux utilisateurs qui envoient 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. Quand vous activez cette fonctionnalité dans un pipeline Synapse, vous devez utiliser l’option 3. Cela est nécessaire pour obtenir le secret d’Azure Key Vault avec l’identité gérée par l’espace de travail.

Pour configurer Azure Key Vault de façon à stocker la clé de l’espace de travail, procédez comme suit :

  1. Créez votre coffre de clés et accédez-y sur le Portail Azure.

  2. Accordez les autorisations appropriées aux utilisateurs ou aux identités gérées de l’espace de travail.

  3. Sur les pages de paramètres du coffre de clés, sélectionnez Secrets.

  4. Sélectionnez Générer/Importer.

  5. Sur l’écran Créer un secret, choisissez 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.
  6. Collectez les valeurs suivantes pour la configuration Spark :

    • <LOG_ANALYTICS_WORKSPACE_ID> : ID de l’espace de travail Log Analytics
    • <AZURE_KEY_VAULT_NAME> : Le nom du coffre-fort de clés que vous avez configuré.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (facultatif) : nom secret dans le coffre de clés pour la clé de l’espace de travail. Par défaut, il s’agit de SparkLogAnalyticsSecret.
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>

Vous pouvez également utiliser les propriétés suivantes :

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>

Remarque

Vous pouvez également stocker l’ID de l’espace de travail dans Key Vault. Pour stocker l’ID d’espace de travail avec le nom du secret SparkLogAnalyticsWorkspaceId, reportez-vous à la procédure précédente. Vous pouvez également utiliser la configuration spark.synapse.logAnalytics.keyVault.key.workspaceId pour spécifier le nom du secret de l’ID de l’espace de travail dans Key Vault.

Option 3. Configuration avec un service lié

Remarque

Dans cette option, vous devez accorder l’autorisation de lecture de secret à l’identité managée de l’espace de travail. 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 un service lié Azure Key Vault dans Synapse Studio de façon à stocker la clé de l’espace de travail, procédez comme suit :

  1. Suivez toutes les étapes de la section précédente, « Option 2 ».

  2. Créez un service lié Key Vault dans Synapse Studio :

    a) Accédez à Synapse Studio>Gérer>Services liés, puis sélectionnez Créer.

    b. Dans la zone de recherche, recherchez Azure Key Vault.

    v. Donnez un nom au service lié.

    d. Choisissez votre coffre de clés, puis sélectionnez Créer.

  3. Ajoutez un élément spark.synapse.logAnalytics.keyVault.linkedServiceName à la configuration Apache Spark.

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.synapse.logAnalytics.keyVault.linkedServiceName <LINKED_SERVICE_NAME>

Vous pouvez également utiliser les propriétés suivantes :

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.synapse.diagnostic.emitter.LA.secret.keyVault.linkedService: <AZURE_KEY_VAULT_LINKED_SERVICE>

Pour obtenir la liste des configurations Apache Spark, consultez Configurations Apache Spark disponibles

Étape 3 : Créer une configuration Apache Spark

Vous pouvez créer une configuration Apache Spark pour votre espace de travail. Quand vous créez un Notebook ou une définition de tâche Apache Spark, vous pouvez sélectionner la configuration Apache Spark à utiliser avec votre pool Apache Spark. Lorsque vous la sélectionnez, les détails de la configuration s’affichent.

  1. Sélectionnez Gérer>Configurations Apache Spark.

  2. Sélectionnez le bouton Nouveau pour créer une configuration Apache Spark.

  3. La page Nouvelle configuration Apache Spark s’ouvre une fois que vous avez sélectionné le bouton Nouveau.

    Capture d’écran qui crée la configuration Spark.

  4. Pour Nom, vous pouvez entrer votre nom préféré valide.

  5. Pour Description, vous pouvez entrer une description.

  6. Pour Annotations, vous pouvez ajouter des annotations en cliquant sur le bouton Nouveau, et vous pouvez également supprimer des annotations existantes en sélectionnant et en cliquant sur le bouton Supprimer.

  7. Pour Propriétés de configuration, ajoutez toutes les propriétés de l’option de configuration que vous avez choisie en sélectionnant le bouton Ajouter. Pour Propriété, ajoutez le nom de propriété tel qu’il est listé, et pour Valeur, utilisez la valeur que vous avez collectée à l’étape 2. Si vous n’ajoutez pas de propriété, Azure Synapse utilise la valeur par défaut, le cas échéant.

    Capture d’écran avec un exemple de mise à jour des propriétés de configuration.

Envoyer une application Apache Spark et afficher les journaux et métriques

Voici comment procéder :

  1. Envoyez une application Apache Spark au pool Apache Spark configuré à l’étape précédente. Pour cela, vous avez plusieurs possibilités :

    • Exécutez un notebook dans Synapse Studio.
    • Dans Synapse Studio, envoyez un programme de traitement par lots Apache Spark avec une définition de travail Apache Spark.
    • Exécutez un pipeline contenant une activité Apache Spark.
  2. 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.

Exemple pour 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 pour 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")

Visualisation des métriques et journaux avec l’exemple de classeur

  1. Téléchargez le classeur.

  2. Ouvrez et copiez le contenu du fichier de classeur.

  3. Sur le Portail Azure, sélectionnez Espace de travail Log Analytics>Classeurs.

  4. Ouvrez le classeur Vide. Utilisez le mode Éditeur avancé en sélectionnant l’icône </>.

  5. Collez le contenu copié par-dessus le code JSON existant.

  6. Sélectionnez Appliquer, puis Modification terminée.

    Capture d’écran montrant un nouveau classeur.

    Capture d’écran montrant comment importer un classeur.

Soumettez ensuite votre application Apache Spark au pool Apache Spark configuré. Une fois l’application passée dans un état en cours d’exécution, choisissez-la dans la liste déroulante des classeurs.

Capture d’écran montrant un classeur.

Il est possible de personnaliser le classeur. Par exemple, vous pouvez utiliser des requêtes Kusto et configurer des alertes.

Capture d’écran montrant la personnalisation d’un classeur avec une requête et des alertes.

Interroger des données avec Kusto

Voici un exemple d’interrogation d’événements Apache Spark :

SparkListenerEvent_CL
| where workspaceName_s == "{SynapseWorkspace}" and clusterName_s == "{SparkPool}" and livyId_s == "{LivyId}"
| order by TimeGenerated desc
| limit 100 

Voici un exemple d’interrogation des journaux du pilote et des exécuteurs de l’application Apache Spark :

SparkLoggingEvent_CL
| where workspaceName_s == "{SynapseWorkspace}" and clusterName_s == "{SparkPool}" and livyId_s == "{LivyId}"
| order by TimeGenerated desc
| limit 100

Enfin, voici un exemple d’interrogation de métriques Apache Spark :

SparkMetrics_CL
| where workspaceName_s == "{SynapseWorkspace}" and clusterName_s == "{SparkPool}" and livyId_s == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc

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éer, afficher et gérer des alertes de journal à l’aide d’Azure Monitor.

Espace de travail Synapse où est activée la protection contre l’exfiltration de données

Après cela, l’espace de travail Synapse est créé avec la protection contre l’exfiltration de données activée.

Quand vous souhaitez activer cette fonctionnalité, vous devez créer des requêtes de connexion de point de terminaison privé managée à des étendues de liaison privée Azure Monitor (AMPLS) dans les locataires Microsoft Entra approuvés de l’espace de travail.

Vous pouvez suivre les étapes ci-dessous pour créer une connexion de point de terminaison privé géré aux étendues de liaison privée Azure Monitor (AMPLS) :

  1. S'il n'existe aucune instance AMPLS, consultez Configurer une connexion Azure Monitor via Private Link pour en créer un.
  2. Accédez à votre portail AMPLS dans Azure, sur la page Ressources Azure Monitor, sélectionnez Ajouter pour ajouter une connexion à votre espace de travail Azure Log Analytics.
  3. Accédez à Synapse Studio > Gérer > Points de terminaison privés gérés, sélectionnez le bouton Nouveau, sélectionnez Étendues de liaison privée Azure Monitor, puis Continuer.

    Capture d’écran de la création d’un point de terminaison privé géré AMPLS 1.

  4. Choisissez l’étendue de liaison privée Azure Monitor que vous avez créée, puis sélectionnez le bouton Créer.

    Capture d’écran de la création d’un point de terminaison privé géré AMPLS 2.

  5. Attendez quelques minutes que le provisionnement du point de terminaison privé soit terminé.
  6. Accédez à nouveau à votre AMPLS dans le portail Azure et, dans la page Connexions de point de terminaison privé, sélectionnez la connexion provisionnée, puis Approuver.

Remarque

  • L’objet AMPLS a de nombreuses limites que vous devez prendre en compte lors de la planification de votre configuration private Link. Consultez Limites d’AMPLS pour une présentation plus approfondie de ces limites.
  • Vérifiez si vous disposez de l’autorisation appropriée pour créer un point de terminaison privé managé.

Configurations disponibles

Paramétrage Descriptif
spark.synapse.diagnostic.emitters Obligatoire. Noms des destinations des émetteurs de diagnostic, séparés par des virgules. Par exemple, MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type Obligatoire. Type de destination intégrée. Pour activer la destination Azure Log Analytics, AzureLogAnalytics doit être inclus dans ce champ.
spark.synapse.diagnostic.emitter.<destination>.categories facultatif. Catégories de journaux sélectionnées séparées par des virgules. Les valeurs disponibles sont les suivantes : DriverLog, ExecutorLog, EventLog, Metrics. Si aucune valeur n’est définie, la valeur par défaut sera all (toutes les catégories).
spark.synapse.diagnostic.emitter.<destination>.workspaceId Obligatoire. Pour activer la destination Azure Log Analytics, workspaceId doit être inclus dans ce champ.
spark.synapse.diagnostic.emitter.<destination>.secret facultatif. Contenu secret (clé Log Analytics). Pour ce faire, dans le portail Azure, accédez à l’espace de travail Azure Log Analytics > Agents > Clé primaire.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Requis si .secret n'est pas spécifié. Nom du coffre de clés Azure dans lequel est stocké le secret (clé d’accès ou SAS).
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Obligatoire si .secret.keyVault est spécifié. Nom du secret du coffre de clés Azure où le secret est stocké.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.linkedService facultatif. Nom du service lié au coffre de clés Azure. Lorsqu’il est activé dans le pipeline Synapse, il est nécessaire d’obtenir le secret auprès d’Azure Key Vault. (Assurez-vous que le MSI dispose d’un accès en lecture au coffre de clés Azure).
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match facultatif. Noms de bibliothèque de journalisation Log4j séparés par des virgules. Vous pouvez spécifier les journaux à collecter. Par exemple, SparkListenerApplicationStart,SparkListenerApplicationEnd
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match facultatif. Noms de bibliothèque de journalisation log4j séparés par des virgules. Vous pouvez spécifier les journaux à collecter. Par exemple : org.apache.spark.SparkContext,org.example.Logger
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match facultatif. Suffixes des noms de métrique Spark séparés par des virgules. Vous pouvez spécifier les métriques à collecter. Par exemple :jvm.heap.used