Прочитать на английском

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


Мониторинг приложений 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

Чтобы создать эту рабочую область, ознакомьтесь с одним из следующих ресурсов:

Шаг 2. Создание артефакта среды Fabric с конфигурацией Apache Spark

Чтобы настроить Spark, создайте артефакт среды Fabric и выберите один из следующих вариантов:

Вариант 1. Настройка с помощью идентификатора рабочей области Log Analytics и ключа

  1. Создание артефакта среды Fabric в Fabric

  2. Добавьте следующие свойства Spark с соответствующими значениями в артефакт среды или выберите Добавить из .yml в меню, чтобы скачать образец YAML-файла, который уже содержит необходимые свойства.

    • <EMITTER_NAME>: имя эмитера.
    • <LOG_ANALYTICS_WORKSPACE_ID> — идентификатор рабочей области Log Analytics.
    • <LOG_ANALYTICS_WORKSPACE_KEY> — ключ Log Analytics. Чтобы найти это, в портале Azure перейдите в рабочую область Azure Log Analytics, затем к агентам и первичному ключу.
    spark.synapse.diagnostic.emitters: <EMITTER_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.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.
    
  3. Сохраните и опубликуйте изменения.

Вариант 2. Настройка с помощью Azure Key Vault

Примечание

Вам нужно предоставить разрешение на чтение секрета пользователям, которые будут отправлять приложения Apache Spark. Дополнительные сведения см. в статье Предоставление доступа к ключам, сертификатам и секретам Key Vault с помощью управления доступом на основе ролей Azure.

Чтобы настроить хранение ключа рабочей области в Azure Key Vault, выполните следующие действия:

  1. Перейдите в Хранилище ключей в портал Azure.

  2. На странице параметров хранилища ключей выберите "Секреты", а затем "Создать и импортировать".

  3. На экране "Создание секрета" введите следующие значения:

    • Имя — укажите имя секрета. Для значения по умолчанию введите SparkLogAnalyticsSecret.
    • Значение — введите <LOG_ANALYTICS_WORKSPACE_KEY> для секрета.
    • Оставьте другие значения по умолчанию. Затем выберите Создать.
  4. Создание артефакта среды Fabric в Fabric

  5. Добавьте следующие свойства Spark и их соответствующие значения в артефакт среды или выберите Добавить из .yml на ленте в артефакте среды, чтобы скачать образец yaml-файла, который включает перечисленные свойства Spark.

    • <EMITTER_NAME>: имя эмитера.
    • <LOG_ANALYTICS_WORKSPACE_ID> — идентификатор рабочей области Log Analytics.
    • <AZURE_KEY_VAULT_URI>: URI хранилища ключей, настроенный вами.
    • <AZURE_KEY_VAULT_SECRET_KEY_NAME> (необязательно) — секретное имя в хранилище ключей для ключа рабочей области. Значение по умолчанию — SparkLogAnalyticsSecret.
    // Spark properties for EMITTER_NAME
    spark.synapse.diagnostic.emitters <EMITTER_NAME>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: "AzureLogAnalytics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret.keyVault: <AZURE_KEY_VAULT_URI>
    spark.synapse.diagnostic.emitter.<EMITTER_NAME>.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_URI>
    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, чтобы указать имя секрета идентификатора рабочей области.

  6. Сохраните и опубликуйте изменения.

Шаг 3. Присоедините артефакт среды к записным книжкам или определениям заданий Spark, или установите его в качестве настройки по умолчанию для рабочей области.

Примечание

Только администраторы рабочих областей могут назначать среду как среду по умолчанию для рабочей области.

После установки она становится средой по умолчанию для всех записных книжек и определений заданий Spark в рабочей области. Дополнительные сведения см. в разделе "Параметры рабочей области Fabric".

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

  1. Перейдите в блокнот или определение задания Spark в Fabric.
  2. Выберите меню "Среда" на вкладке "Главная" и выберите настроенную среду.
  3. Конфигурация будет применена после запуска сеанса Spark.

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

  1. Перейдите к параметрам рабочей области в Fabric.
  2. Найдите параметры Spark в параметрах рабочей области (параметр рабочей области —> Инжиниринг данных/Science —> параметры Spark)
  3. Выберите вкладку "Среда", выберите среду с настроенными параметрами диагностики Spark и нажмите "Сохранить".

Отправка приложения Apache Spark и просмотр журналов и метрик

Чтобы отправить приложение Apache Spark, выполните приведенные действия.

  1. Отправьте приложение Apache Spark с связанной средой, настроенной на предыдущем шаге. Можно использовать любой из следующих способов:

    • Запустите записную книжку в Fabric.
    • Отправьте пакетное задание Apache Spark с помощью определения задания Apache Spark.
    • Запустите активности Spark в конвейерах.
  2. Когда приложение 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

Создание оповещений и управление ими

Пользователи могут отправлять запросы для оценки метрик и журналов с заданной периодичностью и запуска оповещений на основе результатов. Дополнительные сведения см. в разделе Создание и просмотр оповещений журналов, а также управление ими с помощью Azure Monitor.

Рабочие области Fabric с управляемой виртуальной сетью

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

Доступные конфигурации Apache Spark

Использование префикса spark.synaspe.diagnostic.emitter.* для настройки сведений Log Analytics.

Конфигурация Описание
spark.synapse.diagnostic.emitters Обязательное. Названия пунктов назначения диагностических излучателей, разделенные запятой. Например, MyDest1,MyDest2.
spark.synapse.diagnostic.emitter.<destination>.type Обязательное. Встроенный тип назначения. Чтобы активировать назначение Azure Log Analytics, необходимо включить AzureLogAnalytics в это поле.
spark.synapse.diagnostic.emitter.<destination>.categories Необязательно. Выбранные категории журнала, разделенные запятой. Доступные значения включают Log, EventLog, Metrics. Если значение не указано, по умолчанию задаются все категории.
spark.synapse.diagnostic.emitter.<destination>.workspaceId Обязательное. Идентификатор целевой рабочей области Log Analytics.
spark.synapse.diagnostic.emitter.<destination>.secret Необязательно. Секретное содержимое рабочей области.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Требуется, если .secret не указан. URI хранилища ключей Azure, в котором хранится секрет.
park.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Обязателен, если указан ключ .secret.keyVault. Имя секрета хранилища ключей Azure, в котором хранится секрет рабочей области LA.
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match Необязательно. Имена событий Apache Spark, разделенные запятыми; можно указать, какие события нужно собирать. Например: SparkListenerApplicationStart,SparkListenerApplicationEnd.
spark.synapse.diagnostic.emitter.<destination>.filter.loggerName.match Необязательно. Имена логгеров Log4j, перечисленные через запятую, позволяют указать, какие журналы нужно собирать. Например: org.apache.spark.SparkContext,org.example.Logger.
spark.synapse.diagnostic.emitter.<destination>.filter.metricName.match Необязательно. Суффиксы имен метрик Apache Spark, разделенные запятыми; можно указать, какие метрики нужно собирать. Например: jvm.heap.used.
spark.fabric.pools.skipStarterPools Обязательное. Это свойство Spark используется для принудительного выполнения сеанса Spark по запросу. Необходимо задать значение true при использовании пула по умолчанию, чтобы активировать библиотеки для выдачи журналов и метрик.

Использование префикса spark.synapse.logAnalytics.* для настройки сведений Log Analytics.

Имя конфигурации Значение по умолчанию Описание
spark.synapse.logAnalytics.enabled неправда Чтобы включить приемник Log Analytics для приложений Spark, выберите значение true. В противном случае — false.
spark.synapse.logAnalytics.workspaceId - Идентификатор целевой рабочей области Log Analytics.
spark.synapse.logAnalytics.secret - Секрет целевой рабочей области Log Analytics.
spark.synapse.logAnalytics.keyVault.name - URI ключевого хранилища для идентификатора и ключа Log Analytics.
spark.synapse.logAnalytics.keyVault.key.workspaceId SparkLogAnalyticsWorkspaceId Имя секрета Key Vault для идентификатора рабочей области в Log Analytics.
spark.synapse.logAnalytics.keyVault.key.secret SparkLogAnalyticsSecret Имя секрета в Key Vault для рабочей области Log Analytics.
spark.synapse.logAnalytics.uriSuffix ods.opinsights.azure.com Суффикс URI для целевой рабочей области Log Analytics. Если рабочая область размещается не в глобальной службе Azure, измените этот суффикс URI в соответствии с используемым облаком.
spark.synapse.logAnalytics.filter.eventName.match - Необязательно. Имена событий Apache Spark, разделенные запятыми; можно указать, какие события нужно собирать. Например: SparkListenerJobStart,SparkListenerJobEnd.
spark.synapse.logAnalytics.filter.loggerName.match - Необязательно. Имена средств ведения журналов log4j, разделенные запятыми; можно указать, какие журналы нужно собирать. Например: org.apache.spark.SparkContext,org.example.Logger.
spark.synapse.logAnalytics.filter.metricName.match - Необязательно. Суффиксы имен метрик Apache Spark, разделенные запятыми; можно указать, какие метрики нужно собирать. Например: jvm.heap.used.
spark.fabric.pools.skipStarterPools верно Обязательное. Это свойство Spark используется для принудительного выполнения сеанса Spark по запросу.

Примечание

  • Для Microsoft Azure, управляемой 21Vianet, параметр spark.synapse.logAnalytics.uriSuffix должен be ods.opinsights.azure.cn.
  • В случае с Azure для государственных организаций параметр spark.synapse.logAnalytics.uriSuffix должен иметь значение ods.opinsights.azure.us.
  • Для любого облака, кроме Azure, spark.synapse.logAnalytics.keyVault.name параметр должен быть полным доменным именем (FQDN) хранилища ключей. Например, AZURE_KEY_VAULT_NAME.vault.usgovcloudapi.net для AzureUSGovernment.

Часто задаваемые вопросы

  1. Почему служба Log Analytics не получает журналы или создает таблицу Customer?

    Если рабочая область Log Analytics не получает журналы или таблица "Клиент" не создается, выполните следующие действия.

    1. проверить конфигурацию Log Analytics. Убедитесь, что сведения о рабочей области Log Analytics настроены правильно в приложении Spark. Чтобы проверить конфигурацию, перейдите к пользовательскому интерфейсу Spark или серверу журнала Spark, перейдите на вкладку "Среда" и просмотрите параметры в разделе "Свойства Spark".

    2. проверить разрешения:

      • Убедитесь, что Log Analytics имеет необходимые разрешения на запись.
      • Если используется KeyVault, убедитесь, что разрешения на чтение KeyVault назначены соответствующей службе или пользователю.
    3. Проверка ограничений данных: Fabric отправляет данные журнала в Azure Monitor через HTTP API для сбора данных. Данные, опубликованные в API сбора данных Azure Monitor, подвергаются определенным ограничениям:

      • Не более 30 МБ на одну запись в API сборщика данных Azure Monitor. Это ограничение размера для одной публикации. Если данные одной публикации превышают 30 МБ, необходимо разделить данные на меньшие фрагменты и отправить их параллельно.
      • Не более 32 КБ для значений полей. Если значение поля больше 32 КБ, данные усечены.
      • Рекомендуемое максимальное количество полей для данного типа — 50. Это ограничение введено для удобства поиска и использования.
      • Таблицы в рабочих областях Log Analytics поддерживают только до 500 столбцов.
      • Максимальное число символов в имени столбца — 45.
  2. Как подтвердить правильное настройку разрешений Log Analytics?

    Чтобы убедиться, что Log Analytics может получать журналы, проверьте следующие разрешения:

    1. Права на запись Log Analytics:

      • Войдите на портал Azure и перейдите в рабочую область Log Analytics.
      • В разделе "Управление доступом (IAM)" убедитесь, что пользователю, сервисному принципалу или приложению назначена роль "Log Analytics Contributor" или "Участник".
    2. Разрешения на чтение «KeyVault» (если применимо):

      • Если журналы включают KeyVault, перейдите в раздел "Политики доступа" KeyVault или "Управление доступом (IAM)".
      • Убедитесь, что соответствующий пользователь или субъект-служба имеют разрешения на чтение, например роль "Читатель Key Vault". Если разрешения настроены неправильно, обратитесь к администратору Azure, чтобы настроить назначения ролей и дождаться синхронизации разрешений (это может занять несколько минут).
  3. Почему запуск сеанса Spark становится медленным после настройки этих свойств Spark?

    Это происходит потому, что вы настроили spark.fabric.pool.skipStarterPool: true, который пропускает начальный пул (тип динамического пула) и вместо этого использует пул по запросу для запуска сеанса Spark. Запуск сеанса Spark в пуле по запросу обычно занимает около 3 минут для создания и инициализации.

    Причина в том, что библиотека диагностики требует, чтобы определенные конфигурации были применены при запуске сеанса Spark, что возможно только в пулах по запросу, так как они динамически создаются в процессе запуска. В отличие от этого, сеансы Live Pool предварительно запущены и не могут применять эти конфигурации во время инициализации. Дополнительные сведения о вычислениях Fabric Spark см. в вычисления Apache Spark для разработки данных, обработки и анализа данных.

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


Дополнительные ресурсы