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, выполните следующие действия:
Выполните сборку JAR-файла spark-listeners-loganalytics-1.0-SNAPSHOT.jar, как описано в файле сведений GitHub.
Создайте датчики или счетчики 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 в библиотеке, выполните следующие действия:
Выполните сборку JAR-файлов spark-listeners-1.0-SNAPSHOT.jar и spark-listeners-loganalytics-1.0-SNAPSHOT.jar, как описано в файле сведений GitHub.
Создайте файл конфигурации 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
Пример файла конфигурации можно найти здесь.
Включите проект spark-listeners-loganalytics в код приложения и импортируйте
com.microsoft.pnp.logging.Log4jconfiguration
в код приложения.import com.microsoft.pnp.logging.Log4jConfiguration
Настройте Log4j с помощью файла log4j.properties, созданного на шаге 3:
getClass.getResourceAsStream("<path to file in your JAR file>/log4j.properties") { stream => { Log4jConfiguration.configure(stream) } }
При необходимости добавьте сообщения журнала 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. Запуск примера:
Создайте проект spark-jobs в библиотеке мониторинга, как описано в файле сведений GitHub.
Перейдите в рабочую область Databricks и создайте новое задание, как описано в разделе "Создание и запуск заданий Azure Databricks".
На странице сведений о задании выберите Задать JAR-файл.
Отправьте JAR-файл из
/src/spark-jobs/target/spark-jobs-1.0-SNAPSHOT.jar
.В качестве Основного класса укажите
com.microsoft.pnp.samplejob.StreamingQueryListenerSampleJob
.Выберите кластер, который уже настроен для использования библиотеки мониторинга. См. раздел Настройка 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 с помощью панелей мониторинга)