Delen via


Azure Databricks-toepassingslogboeken verzenden naar Azure Monitor

Notitie

Dit artikel is afhankelijk van een opensource-bibliotheek die wordt gehost op GitHub op: https://github.com/mspnp/spark-monitoring.

De oorspronkelijke bibliotheek ondersteunt Azure Databricks Runtimes 10.x (Spark 3.2.x) en eerder.

Databricks heeft een bijgewerkte versie bijgedragen ter ondersteuning van Azure Databricks Runtimes 11.0 (Spark 3.3.x) en hoger op de l4jv2 vertakking op: https://github.com/mspnp/spark-monitoring/tree/l4jv2.

Houd er rekening mee dat de release 11.0 niet achterwaarts compatibel is vanwege de verschillende logboekregistratiesystemen die worden gebruikt in de Databricks Runtimes. Zorg ervoor dat u de juiste build gebruikt voor uw Databricks Runtime. De bibliotheek en GitHub-opslagplaats bevinden zich in de onderhoudsmodus. Er zijn geen plannen voor verdere releases en ondersteuning voor problemen is alleen best-effort. Neem contact op azure-spark-monitoring-help@databricks.commet eventuele aanvullende vragen over de bibliotheek of de roadmap voor het bewaken en vastleggen van uw Azure Databricks-omgevingen.

In dit artikel wordt beschreven hoe u toepassingslogboeken en metrische gegevens van Azure Databricks naar een Log Analytics-werkruimte verzendt. Deze maakt gebruik van de Azure Databricks Monitoring Library, die beschikbaar is op GitHub.

Vereisten

Configureer uw Azure Databricks-cluster voor het gebruik van de bewakingsbibliotheek, zoals beschreven in het Leesmij-leesmij-bestand van GitHub.

Notitie

De bewakingsbibliotheek streamt gebeurtenissen op Apache Spark-niveau en metrische gegevens van Spark Structured Streaming van uw taken naar Azure Monitor. U hoeft geen wijzigingen aan te brengen in uw toepassingscode voor deze gebeurtenissen en metrische gegevens.

Metrische toepassingsgegevens verzenden met behulp van dropwizard

Spark maakt gebruik van een configureerbaar systeem voor metrische gegevens op basis van de dropwizard Metrics Library. Zie Metrische gegevens in de Spark-documentatie voor meer informatie.

Volg deze stappen om metrische toepassingsgegevens van Azure Databricks-toepassingscode naar Azure Monitor te verzenden:

  1. Bouw het spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR-bestand zoals beschreven in het GitHub-leesmij-bestand.

  2. Maak Dropwizard-meters of meteritems in uw toepassingscode . U kunt de UserMetricsSystem klasse gebruiken die is gedefinieerd in de bewakingsbibliotheek. In het volgende voorbeeld wordt een teller met de naam counter1gemaakt.

    import org.apache.spark.metrics.UserMetricsSystems
    import org.apache.spark.sql.SparkSession
    
    object StreamingQueryListenerSampleJob  {
    
      private final val METRICS_NAMESPACE = "samplejob"
      private final val COUNTER_NAME = "counter1"
    
      def main(args: Array[String]): Unit = {
    
        val spark = SparkSession
          .builder
          .getOrCreate
    
        val driverMetricsSystem = UserMetricsSystems
            .getMetricSystem(METRICS_NAMESPACE, builder => {
              builder.registerCounter(COUNTER_NAME)
            })
    
        driverMetricsSystem.counter(COUNTER_NAME).inc(5)
      }
    }
    

    De bewakingsbibliotheek bevat een voorbeeldtoepassing die laat zien hoe u de UserMetricsSystem klasse gebruikt.

Toepassingslogboeken verzenden met Log4j

Voer de volgende stappen uit om uw Azure Databricks-toepassingslogboeken naar Azure Log Analytics te verzenden met behulp van de Log4j-toevoegfunctie in de bibliotheek:

  1. Bouw de spark-listeners-1.0-SNAPSHOT.jar en het spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR-bestand, zoals beschreven in het Leesmij-bestand van GitHub.

  2. Maak een log4j.properties-configuratiebestand voor uw toepassing. Neem de volgende configuratie-eigenschappen op. Vervang de naam en het logboekniveau van uw toepassingspakket, waar aangegeven:

    log4j.appender.A1=com.microsoft.pnp.logging.loganalytics.LogAnalyticsAppender
    log4j.appender.A1.layout=com.microsoft.pnp.logging.JSONLayout
    log4j.appender.A1.layout.LocationInfo=false
    log4j.additivity.<your application package name>=false
    log4j.logger.<your application package name>=<log level>, A1
    

    Hier vindt u een voorbeeldconfiguratiebestand.

  3. Neem in uw toepassingscode het spark-listeners-loganalytics-project op en importeer com.microsoft.pnp.logging.Log4jconfiguration deze in uw toepassingscode.

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. Configureer Log4j met behulp van het log4j.properties-bestand dat u in stap 3 hebt gemaakt:

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. Voeg waar nodig Apache Spark-logboekberichten toe op het juiste niveau in uw code. Gebruik bijvoorbeeld de logDebug methode om een foutopsporingslogboekbericht te verzenden. Zie Logboekregistratie in de Spark-documentatie voor meer informatie.

    logTrace("Trace message")
    logDebug("Debug message")
    logInfo("Info message")
    logWarning("Warning message")
    logError("Error message")
    

Notitie

Als u de bibliotheek gebruikt en Apache Spark Notebooks hebt, gaan alle logboeken die Spark genereert tijdens de uitvoering van het notebook automatisch naar Log Analytics.

Er is een beperking voor Python om aangepaste logboekregistratieberichten te ondersteunen met behulp van het door Spark geconfigureerde Log4j. Logboeken kunnen alleen worden verzonden vanaf het stuurprogrammaknooppunt, omdat uitvoerders geen toegang hebben tot de virtuele Java-machine vanuit Python.

De voorbeeldtoepassing uitvoeren

De bewakingsbibliotheek bevat een voorbeeldtoepassing die laat zien hoe u metrische gegevens van toepassingen en toepassingslogboeken naar Azure Monitor verzendt. Het voorbeeld uitvoeren:

  1. Bouw het spark-jobs-project in de bewakingsbibliotheek, zoals beschreven in het Leesmij-bestand van GitHub.

  2. Navigeer naar uw Databricks-werkruimte en maak een nieuwe taak, zoals beschreven in Azure Databricks-taken maken en uitvoeren.

  3. Selecteer JAR instellen op de pagina met taakdetails.

  4. Upload het JAR-bestand van /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar.

  5. Voer voor hoofdklasse in com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

  6. Selecteer een cluster dat al is geconfigureerd voor het gebruik van de bewakingsbibliotheek. Zie Azure Databricks configureren om metrische gegevens naar Azure Monitor te verzenden.

Wanneer de taak wordt uitgevoerd, kunt u de toepassingslogboeken en metrische gegevens bekijken in uw Log Analytics-werkruimte.

Toepassingslogboeken worden weergegeven onder SparkLoggingEvent_CL:

SparkLoggingEvent_CL | where logger_name_s contains "com.microsoft.pnp"

Metrische toepassingsgegevens worden weergegeven onder SparkMetric_CL:

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

Belangrijk

Nadat u hebt gecontroleerd of de metrische gegevens worden weergegeven, stopt u de voorbeeldtoepassingstaak.

Volgende stappen

Implementeer het dashboard voor prestatiebewaking dat wordt begeleid bij deze codebibliotheek om prestatieproblemen in uw Azure Databricks-productieworkloads op te lossen.