Azure Databricks uygulama günlüklerini Azure İzleyici'ye gönderme

Dekont

Bu makale, GitHub'da barındırılan bir açık kaynak kitaplığına dayanır: https://github.com/mspnp/spark-monitoring.

Özgün kitaplık, Azure Databricks Runtimes 10.x (Spark 3.2.x) ve önceki sürümleri destekler.

Databricks, aşağıdaki dalda Azure Databricks Runtimes 11.0 (Spark 3.3.x) ve üzerini l4jv2 desteklemek için güncelleştirilmiş bir sürüme katkıda bulunmuştur: https://github.com/mspnp/spark-monitoring/tree/l4jv2.

Databricks Runtimes'da kullanılan farklı günlük sistemleri nedeniyle 11.0 sürümünün geriye dönük olarak uyumlu olmadığını lütfen unutmayın. Databricks Runtime'ınız için doğru derlemeyi kullandığınızdan emin olun. Kitaplık ve GitHub deposu bakım modundadır. Daha fazla sürüm için plan yoktur ve sorun desteği yalnızca en iyi çabayı gösterir. Azure Databricks ortamlarınızı izlemek ve günlüğe kaydetmek için kitaplık veya yol haritasıyla ilgili ek sorularınız için lütfen ile iletişime geçin azure-spark-monitoring-help@databricks.com.

Bu makalede Azure Databricks'ten Log Analytics çalışma alanına uygulama günlüklerini ve ölçümlerini gönderme adımları gösterilmektedir. GitHub'da bulunan Azure Databricks İzleme Kitaplığı'nı kullanır.

Önkoşullar

Azure Databricks kümenizi GitHub benioku dosyasında açıklandığı gibi izleme kitaplığını kullanacak şekilde yapılandırın.

Dekont

İzleme kitaplığı, apache Spark düzeyindeki olayları ve Spark Yapılandırılmış Akış ölçümlerini işlerinizden Azure İzleyici'ye akışla gönderir. Bu olaylar ve ölçümler için uygulama kodunuzda herhangi bir değişiklik yapmanız gerekmez.

Dropwizard kullanarak uygulama ölçümleri gönderme

Spark, Dropwizard Ölçüm Kitaplığı'nı temel alan yapılandırılabilir bir ölçüm sistemi kullanır. Daha fazla bilgi için Spark belgelerindeki Ölçümler'e bakın.

Azure Databricks uygulama kodundan Azure İzleyici'ye uygulama ölçümleri göndermek için şu adımları izleyin:

  1. GitHub benioku dosyasında açıklandığı gibi spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR dosyasını oluşturun.

  2. Uygulama kodunuzda Dropwizard ölçerleri veya sayaçları oluşturun. İzleme kitaplığında UserMetricsSystem tanımlanan sınıfı kullanabilirsiniz. Aşağıdaki örnek adlı counter1bir sayaç oluşturur.

    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)
      }
    }
    

    İzleme kitaplığı, sınıfın nasıl kullanılacağını UserMetricsSystem gösteren örnek bir uygulama içerir.

Log4j kullanarak uygulama günlüklerini gönderme

Kitaplıktaki Log4j ekleyicisini kullanarak Azure Databricks uygulama günlüklerinizi Azure Log Analytics'e göndermek için şu adımları izleyin:

  1. GitHub benioku dosyasında açıklandığı gibi spark-listeners-1.0-SNAPSHOT.jar ve spark-listeners-loganalytics-1.0-SNAPSHOT.jar JAR dosyasını oluşturun.

  2. Uygulamanız için log4j.properties yapılandırma dosyası oluşturun. Aşağıdaki yapılandırma özelliklerini ekleyin. Uygulama paketinizin adını ve günlük düzeyini aşağıdaki durumlarda yazın:

    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
    

    Burada örnek bir yapılandırma dosyası bulabilirsiniz.

  3. Uygulama kodunuzda spark-listeners-loganalytics projesini ekleyin ve uygulama kodunuzla içeri aktarıncom.microsoft.pnp.logging.Log4jconfiguration.

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. 3. adımda oluşturduğunuz log4j.properties dosyasını kullanarak Log4j'yi yapılandırın:

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. Apache Spark günlük iletilerini gerektiği gibi kodunuza uygun düzeyde ekleyin. Örneğin, hata ayıklama günlüğü iletisi göndermek için yöntemini kullanın logDebug . Daha fazla bilgi için Spark belgelerinde günlüğe kaydetme bölümüne bakın.

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

Dekont

Kitaplığı kullanıyorsanız ve Apache Spark Not Defterleriniz varsa, Spark'ın not defteri için yürütme sırasında oluşturduğu günlükler otomatik olarak Log Analytics'e gider.

Python'ın Spark tarafından yapılandırılmış Log4j kullanarak özel günlük iletilerini desteklemesi için bir sınırlama vardır. Yürütücü düğümlerinin Python'dan Java Sanal Makinesine erişimi olmadığından günlükler yalnızca sürücü düğümünden gönderilebilir.

Örnek uygulamayı çalıştırın

İzleme kitaplığı, hem uygulama ölçümlerinin hem de uygulama günlüklerinin Azure İzleyici'ye nasıl gönderildiğini gösteren örnek bir uygulama içerir. Örneği çalıştırmak için:

  1. Spark-jobs projesini GitHub benioku dosyasında açıklandığı gibi izleme kitaplığında oluşturun.

  2. Databricks çalışma alanınıza gidin ve burada açıklandığı gibi yeni bir iş oluşturun.

  3. İş ayrıntıları sayfasında JAR Ayarla'yı seçin.

  4. JAR dosyasını dosyasından /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jarkarşıya yükleyin.

  5. Main sınıfı için girincom.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

  6. İzleme kitaplığını kullanmak üzere zaten yapılandırılmış bir küme seçin. Bkz . Azure İzleyici'ye ölçüm göndermek için Azure Databricks'i yapılandırma.

İş çalıştırıldığında Log Analytics çalışma alanınızda uygulama günlüklerini ve ölçümlerini görüntüleyebilirsiniz.

Uygulama günlükleri SparkLoggingEvent_CL altında görünür:

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

Uygulama ölçümleri SparkMetric_CL altında görünür:

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

Önemli

Ölçümlerin göründüğünü doğruladıktan sonra örnek uygulama işini durdurun.

Sonraki adımlar

Üretim Azure Databricks iş yüklerinizdeki performans sorunlarını gidermek için bu kod kitaplığına eşlik eden performans izleme panosunu dağıtın.