Мониторинг приложений Apache Spark с помощью Azure Log Analytics (предварительная версия)
Расширение средства создания диагностики Apache Spark Fabric — это библиотека, которая позволяет приложениям Apache Spark выдавать журналы, журналы событий и метрики в несколько назначений, включая аналитику журналов Azure, хранилище Azure и центры событий Azure.
В этом руководстве вы узнаете, как настроить журналы и метрики Spark в Log Analytics в Fabric. После настройки вы сможете собирать и анализировать метрики и журналы приложений Apache Spark в рабочей области Log analytics.
Настройка сведений о рабочей области
Выполните следующие действия, чтобы настроить необходимые сведения в Fabric.
Шаг 1. Создание рабочей области Log Analytics
Чтобы создать эту рабочую область, ознакомьтесь с одним из следующих ресурсов:
- Создание рабочей области на портале Azure
- Создание рабочей области Log Analytics с помощью Azure CLI
- Создание и настройка рабочей области в Azure Monitor с помощью PowerShell
Шаг 2. Создание артефакта среды Fabric с конфигурацией Apache Spark
Чтобы настроить Spark, создайте артефакт среды Fabric и выберите один из следующих вариантов:
Вариант 1. Настройка с помощью идентификатора рабочей области Log Analytics и ключа
Создание артефакта среды Fabric в Fabric
Добавьте следующие свойства Spark с соответствующими значениями в артефакт среды или выберите " Добавить из .yml" на ленте, чтобы скачать образец yaml-файла, который уже содержит необходимые свойства.
<LOG_ANALYTICS_WORKSPACE_ID>
— идентификатор рабочей области Log Analytics.<LOG_ANALYTICS_WORKSPACE_KEY>
— ключ Log Analytics. Чтобы найти это, в портал Azure перейдите к первичному ключу агентов>рабочей области>Azure Log Analytics.
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> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Кроме того, чтобы применить ту же конфигурацию, что и Azure Synapse, используйте следующие свойства или выберите " Добавить из .yml" на ленте, чтобы скачать образец yaml-файла.
spark.synapse.logAnalytics.enabled: "true" spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Сохраните и опубликуйте изменения.
Вариант 2. Настройка с помощью Azure Key Vault
Примечание.
Известная проблема: не удается запустить сеанс с помощью параметра 2 предварительно. В настоящее время хранение секретов в Key Vault предотвращает запуск сеансов Spark. Определите приоритеты настройки с помощью метода, описанного в варианте 1.
Вам нужно предоставить разрешение на чтение секрета пользователям, которые будут отправлять приложения Apache Spark. Дополнительные сведения см. в статье Предоставление доступа к ключам, сертификатам и секретам Key Vault с помощью управления доступом на основе ролей Azure.
Чтобы настроить хранение ключа рабочей области в Azure Key Vault, выполните следующие действия:
Перейдите в Хранилище ключей в портал Azure.
На странице параметров хранилища ключей выберите "Секреты", а затем "Создать и импортировать".
На экране "Создание секрета" введите следующие значения:
- Имя — укажите имя секрета. Для значения по умолчанию введите
SparkLogAnalyticsSecret
. - Значение — введите
<LOG_ANALYTICS_WORKSPACE_KEY>
для секрета. - Оставьте другие значения по умолчанию. Затем выберите Создать.
- Имя — укажите имя секрета. Для значения по умолчанию введите
Создание артефакта среды Fabric в Fabric
Добавьте следующие свойства Spark с соответствующими значениями в артефакт среды или нажмите кнопку " Добавить" из .yml на ленте в артефакте среды, чтобы скачать образец yaml-файла , который включает следующие свойства Spark.
<LOG_ANALYTICS_WORKSPACE_ID>
— идентификатор рабочей области Log Analytics.<AZURE_KEY_VAULT_NAME>
— имя настроенного хранилища ключей.<AZURE_KEY_VAULT_SECRET_KEY_NAME>
(необязательно) — имя секрета в хранилище ключей для ключа рабочей области. Значение по умолчанию —SparkLogAnalyticsSecret
.
// Spark properties for LA 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.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Кроме того, чтобы применить ту же конфигурацию, что и Azure Synapse, используйте следующие свойства или выберите "Добавить из .yml" на ленте, чтобы скачать образец yaml-файла.
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.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Примечание.
Вы также можете сохранить идентификатор рабочей области в Key Vault. Задайте имя
SparkLogAnalyticsWorkspaceId
секрета или используйте конфигурациюspark.synapse.logAnalytics.keyVault.key.workspaceId
, чтобы указать имя секрета идентификатора рабочей области.Список конфигураций Apache Spark см. в разделе "Доступные конфигурации Apache Spark"
Сохраните и опубликуйте изменения.
Шаг 3. Присоединение артефакта среды к записным книжкам или определениям заданий Spark или задание в качестве рабочей области по умолчанию
Чтобы подключить среду к записным книжкам или определениям заданий Spark, выполните следующие действия.
- Перейдите в записную книжку или определение задания Spark в Fabric.
- Выберите меню "Среда" на вкладке "Главная" и выберите настроенную среду.
- Конфигурация будет применена после запуска сеанса Spark.
Чтобы задать среду в качестве рабочей области по умолчанию, выполните следующие действия.
- Перейдите к параметрам рабочей области в Fabric.
- Найдите параметры Spark в параметрах рабочей области (параметр рабочей области —> Инжиниринг данных/Science —> параметры Spark)
- Выберите вкладку "Среда" и выберите среду с настроенными свойствами Spark диагностика и нажмите кнопку "Сохранить".
Примечание.
Только администраторы рабочей области могут управлять конфигурациями. Значения будут применяться к записным книжкам и определениям заданий Spark, которые присоединяются к параметрам рабочей области. Дополнительные сведения см. в разделе "Параметры рабочей области Fabric".
Отправка приложения Apache Spark и просмотр журналов и метрик
Чтобы отправить приложение Apache Spark, выполните приведенные действия.
Отправьте приложение Apache Spark с связанной средой, настроенной на предыдущем шаге. Можно использовать любой из следующих способов:
- Запустите записную книжку в Fabric.
- Отправьте пакетное задание Apache Spark с помощью определения задания Apache Spark.
- Запустите действия Spark в конвейерах.
Когда приложение Apache Spark запустится, перейдите в указанную рабочую область Log Analytics, а затем просмотрите метрики и журналы приложения.
Запись настраиваемых журналов приложений
Для записи настраиваемых журналов можно использовать библиотеку Apache Log4j. Ниже приведены примеры для Scala и PySpark:
Пример 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()
Пример 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")
Запрос данных с помощью Kusto
Запрос событий Apache Spark:
SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Чтобы запросить журналы драйвера приложения Spark и исполнителя, выполните приведенные ниже действия.
SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Запрос метрик Apache Spark:
SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc
Ограничения данных
Fabric отправляет данные журнала в Azure Monitor с помощью API сборщика данных HTTP. Данные, опубликованные в API сбора данных Azure Monitor, подвергаются определенным ограничениям:
- Не более 30 МБ на одну запись в API сборщика данных Azure Monitor. Это ограничение размера для одной публикации. Если данные одной публикации превышают 30 МБ, необходимо разделить данные на меньшие фрагменты и отправить их параллельно.
- Не более 32 КБ для значений полей. Если значение поля больше 32 КБ, данные усечены.
- Рекомендуемое максимальное количество полей для данного типа — 50. Это ограничение введено для удобства поиска и использования.
- Таблицы в рабочих областях Log Analytics поддерживают только до 500 столбцов.
- Максимальное число символов в имени столбца — 45.
Создание оповещений и управление ими
Пользователи могут отправлять запросы для оценки метрик и журналов с заданной периодичностью и запуска оповещений на основе результатов. Дополнительные сведения см. в разделе Создание и просмотр оповещений журналов, а также управление ими с помощью Azure Monitor.
Рабочие области Fabric с управляемой виртуальной сетью
Сейчас Azure Log Analytics нельзя выбрать в качестве назначения для журналов Spark и выбросов метрик в управляемой виртуальной сети, так как управляемая частная конечная точка не поддерживает Log Analytics в качестве источника данных.