Поделиться через


Send Azure Databricks application logs to Azure Monitor (Отправка журналов приложения Azure Databricks в Azure Monitor)

Примечание.

В этой статье используется библиотека открытый код, размещенная на сайте GitHubhttps://github.com/mspnp/spark-monitoring:

Исходная библиотека поддерживает Azure Databricks Runtimes 10.x (Spark 3.2.x) и более ранних версий.

Databricks внесли обновленную версию для поддержки Azure Databricks Runtimes 11.0 (Spark 3.3.x) и выше в l4jv2 ветви по адресу: https://github.com/mspnp/spark-monitoring/tree/l4jv2

Обратите внимание, что выпуск 11.0 не совместим с обратной совместимостью из-за различных систем ведения журнала, используемых в Databricks Runtimes. Не забудьте использовать правильную сборку для среды выполнения Databricks. Библиотека и репозиторий GitHub находятся в режиме обслуживания. Нет планов для дальнейших выпусков, и поддержка проблем будет максимальной. Для получения дополнительных вопросов о библиотеке или стратегии мониторинга и ведения журнала сред Azure Databricks обратитесь в службу azure-spark-monitoring-help@databricks.comмониторинга и ведения журнала.

В этой статье описано, как отправить журналы и метрики приложений из Azure Databricks в рабочую область Log Analytics. В этой статье используется библиотека мониторинга Azure Databricks, которая доступна на GitHub.

Необходимые компоненты

Настройте кластер Azure Databricks для использования библиотеки мониторинга, как описано в файле сведений GitHub.

Примечание.

Библиотека мониторинга осуществляет потоковую передачу событий уровня Apache Spark и метрик Spark Structured Streaming из ваших заданий в Azure Monitor. Для использования этих событий и метрик никаких изменений в код приложения вносить не потребуется.

Отправка метрик приложения с помощью Dropwizard

Spark использует настраиваемую систему метрик, основанную на библиотеке метрик Dropwizard. Дополнительные сведения см. в разделе Метрики в документации по Spark.

Чтобы отправить метрики приложения из кода приложения Azure Databricks в Azure Monitor, выполните следующие действия:

  1. Выполните сборку JAR-файла spark-listeners-loganalytics-1.0-SNAPSHOT.jar, как описано в файле сведений GitHub.

  2. Создайте датчики или счетчики Dropwizard в коде приложения. Вы можете использовать класс UserMetricsSystem, определенный в библиотеке мониторинга. В следующем примере создается счетчик с именем counter1.

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

    Библиотека мониторинга включает пример приложения, демонстрирующий использование класса UserMetricsSystem.

Отправка журналов приложения с помощью Log4j

Чтобы отправить журналы приложения Azure Databricks в Azure Log Analytics с использованием аппендера Log4j в библиотеке, выполните следующие действия:

  1. Выполните сборку JAR-файлов spark-listeners-1.0-SNAPSHOT.jar и spark-listeners-loganalytics-1.0-SNAPSHOT.jar, как описано в файле сведений GitHub.

  2. Создайте файл конфигурации log4j.properties для приложения. Включите в файл следующие параметры конфигурации. Замените имя пакета приложения и уровень ведения журнала, там где указано:

    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
    

    Пример файла конфигурации можно найти здесь.

  3. Включите проект spark-listeners-loganalytics в код приложения и импортируйте com.microsoft.pnp.logging.Log4jconfiguration в код приложения.

    import com.microsoft.pnp.logging.Log4jConfiguration
    
  4. Настройте Log4j с помощью файла log4j.properties, созданного на шаге 3:

    getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") {
          stream => {
            Log4jConfiguration.configure(stream)
          }
    }
    
  5. При необходимости добавьте сообщения журнала Apache Spark на соответствующем уровне в коде. Например, используйте метод logDebug, чтобы отправить сообщение журнала отладки. Дополнительные сведения см. в разделе Ведение журнала в документации по Spark.

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

Примечание.

Если вы используете библиотеку и используете записные книжки Apache Spark, все журналы, создаваемые Spark во время выполнения записной книжки, автоматически перейдите в Log Analytics.

Существует ограничение для Python для поддержки пользовательских сообщений ведения журнала с помощью настроенного Log4j Spark. Журналы можно отправлять только с узла драйвера, так как узлы исполнителя не имеют доступа к виртуальной машине Java из Python.

Запуск примера приложения

Библиотека мониторинга включает пример приложения, в котором показано, как отправить журналы и метрики приложения в Azure Monitor. Запуск примера:

  1. Создайте проект spark-jobs в библиотеке мониторинга, как описано в файле сведений GitHub.

  2. Перейдите в рабочую область Databricks и создайте новое задание, как описано в разделе "Создание и запуск заданий Azure Databricks".

  3. На странице сведений о задании выберите Задать JAR-файл.

  4. Отправьте JAR-файл из /src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar.

  5. В качестве Основного класса укажите com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob.

  6. Выберите кластер, который уже настроен для использования библиотеки мониторинга. См. раздел Настройка Azure Databricks для отправки метрик в Azure Monitor.

После запуска задания можно просматривать журналы и метрики приложений в рабочей области Log Analytics.

Журналы приложения отображаются в разделе SparkLoggingEvent_CL:

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

Метрики приложения отображаются в разделе SparkMetric_CL:

SparkMetric_CL | where name_s contains "rowcounter" | limit 50

Внимание

Убедившись, что метрики отображаются, остановите задание для примера приложения.

Следующие шаги

Разверните панель мониторинга производительности, сопровождающую эту библиотеку кода, чтобы устранить проблемы с производительностью рабочих нагрузок Azure Databricks.

Use dashboards to visualize Azure Databricks metrics (Визуализация метрик Azure Databricks с помощью панелей мониторинга)