Сбор журналов и метрик приложений Apache Spark с помощью Центры событий Azure

В этой статье описывается место назначения Центры событий Azure для средства диагностики Apache Spark для Fabric.

Средство Apache Spark Diagnostic Emitter предоставляет общую модель конфигурации для диагностики Spark по различным направлениям. В этой статье описана настройка модели для маршрутизации журналов Apache Spark, журналов событий и метрик в Центры событий Azure.

Рекомендации по выбору архитектуры и назначения эмиттера можно найти в разделе Обзор эмиттера диагностики Fabric Apache Spark.

Сбор журналов и метрик для Центры событий Azure

Шаг 1. Создание экземпляра Центры событий Azure

Для сбора журналов диагностики и метрик можно использовать существующий экземпляр Центры событий Azure. Если у вас его нет, можно создать концентратор событий.

Шаг 2. Создание артефакта среды Fabric с помощью конфигурации Apache Spark

Вариант 1. Настройка с помощью строки подключения Центры событий Azure

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

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

    spark.synapse.diagnostic.emitters: MyEventHub
    spark.synapse.diagnostic.emitter.MyEventHub.type: "AzureEventHub"
    spark.synapse.diagnostic.emitter.MyEventHub.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyEventHub.secret: <connection-string>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    <connection-string> Заполните параметры в файле конфигурации. Дополнительные сведения см. в разделе конфигурации Центры событий Azure.

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

Примечание.

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

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

  1. Создайте и перейдите в хранилище ключей на портале Azure.

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

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

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

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

    spark.synapse.diagnostic.emitters: MyEventHub
    spark.synapse.diagnostic.emitter.MyEventHub.type: "AzureEventHub"
    spark.synapse.diagnostic.emitter.MyEventHub.categories: "Log,EventLog,Metrics"
    spark.synapse.diagnostic.emitter.MyEventHub.secret.keyVault: <AZURE_KEY_VAULT_URI>
    spark.synapse.diagnostic.emitter.MyEventHub.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME>
    spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
    

    Заполните следующие параметры в файле конфигурации: <AZURE_KEY_VAULT_URI>, <AZURE_KEY_VAULT_SECRET_KEY_NAME>. Дополнительные сведения об этих параметрах см. в разделе конфигурации Центры событий Azure.

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

Вариант 3. Настройка с использованием проверки подлинности по сертификату

  1. Регистрация приложения

    1. Войдите на портал Azure и перейдите к Регистрация приложений.

    2. Создайте регистрацию приложения для отправки журналов и метрик в Центры событий Azure.

    Снимок экрана: создание регистрации приложения.

  2. Создание сертификата в Key Vault

    1. Перейдите к Key Vault.

    2. Разверните объект и выберите сертификаты.

    3. Щелкните Создать/Импортировать.

    Снимок экрана: создание нового сертификата для приложения.

  3. Доверие к сертификату в приложении

    1. Перейдите к регистрации приложения, созданной в 1 ->Manage ->Manifest.

    2. Добавьте сведения о сертификате в файл манифеста для установления доверия. Это обеспечивает доверие к сертификату на основе субъектной идентичности сервисного учетного объекта.

       "trustedCertificateSubjects": [ 
          { 
             "authorityId": "00000000-0000-0000-0000-000000000001", 
             "subjectName": "Your-Subject-of-Certificate", 
             "revokedCertificateIdentifiers": [] 
          } 
          ] 
      

    Снимок экрана: доверие к сертификату в приложении.

  4. Назначить роль Отправитель данных Центры событий Azure

    1. В Центры событий Azure перейдите к элементу управления доступом (IAM).

    2. Назначьте роль отправителя данных Центры событий Azure приложению (субъект-служба).

    Скриншот, показывающий назначение роли отправителя данных для концентраторов событий Azure.

  5. Настройка разрешений доступа Azure Key Vault

    1. На портале Azure перейдите к целевому Azure Key Vault.

    2. В разделе управления доступом (IAM) назначьте роль пользователя сертификатов Key Vault приложению (учетной записи службы), используемому издателем диагностики Spark.

Снимок экрана, показывающий назначение роли пользователя для сертификатов хранилища ключей.

  1. Создайте артефакт среды Fabric в Fabric и добавьте следующие свойства Spark с соответствующими значениями в артефакт среды.

    • <EMITTER_NAME>: имя эмитатора.
    • <CERTIFICATE_NAME>: имя сертификата, созданное в хранилище ключей.
    • <KEY_VAULT_URL>: URI службы Azure Key Vault (например, https://{keyvault-name}.vault.azure.net/).
    • <EVENT_HUB_HOST_NAME>: полное доменное имя для пространства имен Event Hubs (например, <namespace>.servicebus.windows.net).
    • <EVENT_HUB_NAME>: имя экземпляра Концентратора событий для отправки диагностических данных.
    • <SERVICE_PRINCIPAL_TENANT_ID>: Идентификатор арендатора субъекта-службы, его можно найти в разделе регистрации приложений > имени приложения > Обзор -> Идентификатор директории (арендатора).
    • <SERVICE_PRINCIPAL_CLIENT_ID>: Идентификатор клиента служебного принципала, его можно найти в регистрациях приложений > имени вашего приложения > Обзор > Идентификатор приложения (клиента).
    "spark.synapse.diagnostic.emitters": "<EMITTER_NAME>",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type": "AzureEventHub",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories": "DriverLog,ExecutorLog,EventLog,Metrics",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.hostName": "<EVENT_HUB_HOST_NAME>",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.entityPath": "<EVENT_HUB_NAME>",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.certificate.keyVault": "<KEY_VAULT_URL>",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.certificate.keyVault.certificateName": "<CERTIFICATE_NAME>",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.tenantId": "<SERVICE_PRINCIPAL_TENANT_ID>",
    "spark.synapse.diagnostic.emitter.<EMITTER_NAME>.clientId": "<SERVICE_PRINCIPAL_CLIENT_ID>",
    "spark.fabric.pools.skipStarterPools": "true"
    

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

Примечание.

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

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

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

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

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

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

Для записи настраиваемых журналов можно использовать библиотеку Apache Log4j.

Пример для 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")

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

Настройка Описание
spark.synapse.diagnostic.emitters Обязательное. Имена назначений диагностических излучателей, разделённые запятой. Например: MyDest1,MyDest2
spark.synapse.diagnostic.emitter.<destination>.type Обязательное. Встроенный тип назначения. Чтобы включить назначение Центры событий Azure, значение должно быть AzureEventHub.
spark.synapse.diagnostic.emitter.<destination>.categories Необязательно. Выбранные категории журнала, разделенные запятой. Доступные значения: DriverLog, ExecutorLog, EventLog, Metrics. Если значение по умолчанию не задано, это все категории.
spark.synapse.diagnostic.emitter.<destination>.secret Необязательно. Строка подключения Центры событий Azure. Требуется, если проверка подлинности на основе сертификата не используется и .secret.keyVault не указана. Это поле должно соответствовать шаблону Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>;EntityPath=<PathName>.
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault Обязательно, если используется проверка подлинности через строку подключения и .secret не указан. URI хранилища Azure Key Vault, в котором хранится секрет (строка подключения).
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName Обязателен, если указан ключ .secret.keyVault. Имя секретного ключа в Azure Key Vault, где хранится секрет (строка подключения).
spark.synapse.diagnostic.emitter.<destination>.hostName Требуется, если используется проверка подлинности на основе сертификатов. Полное доменное имя пространства имен для Event Hubs. Например: <namespace>.servicebus.windows.net.
spark.synapse.diagnostic.emitter.<destination>.entityPath Требуется, если используется проверка подлинности на основе сертификатов. Имя экземпляра Event Hub, в который необходимо отправить диагностические данные.
spark.synapse.diagnostic.emitter.<destination>.tenantId Требуется, если используется проверка подлинности на основе сертификатов. Идентификатор клиента Azure Active Directory субъекта-службы.
spark.synapse.diagnostic.emitter.<destination>.clientId Требуется, если используется проверка подлинности на основе сертификатов. Идентификатор приложения (клиента) субъекта-службы.
spark.synapse.diagnostic.emitter.<destination>.certificate.keyVault Требуется, если используется проверка подлинности на основе сертификатов. URL-адрес Azure Key Vault, в котором хранится сертификат.
spark.synapse.diagnostic.emitter.<destination>.certificate.keyVault.certificateName Требуется, если используется проверка подлинности на основе сертификатов. Имя сертификата, хранящееся в Azure Key Vault, используемое для проверки подлинности на основе сертификата субъекта-службы.
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 Необязательно. Суффиксы имен метрик Spark, разделенные запятыми, позволяют указать, какие метрики нужно собрать. Например: jvm.heap.used
spark.fabric.pools.skipStarterPools Обязательное. Это свойство Spark используется для принудительного выполнения сеанса Spark по запросу. Необходимо задать значение true при использовании пула по умолчанию, чтобы активировать библиотеки для выдачи журналов и метрик.

Примечание.

Строка подключения Центры событий Azure всегда должна содержать EntityPath, которое является именем экземпляра Центры событий Azure.

Пример журнала данных

Ниже приведен пример записи журнала в формате JSON:

{
  "timestamp": "2025-02-28T09:13:57.978Z",
  "category": "Log|EventLog|Metrics",
  "fabricLivyId": "<fabric-livy-id>",
  "applicationId": "<application-id>",
  "applicationName": "<application-name>",
  "executorId": "<driver-or-executor-id>",
  "userId": "<the-submitter-user-id>",
  "fabricTenantId": "<my-fabric-tenant-id>",
  "capacityId": "<my-fabric-capacity-id>",
  "artifactType": "SynapseNotebook|SparkJobDefinition",
  "artifactId": "<my-fabric-artifact-id>",
  "fabricWorkspaceId": "<my-fabric-workspace-id>",
  "fabricEnvId": "<my-fabric-environment-id>",
  "executorMin": "<executor-min>",
  "executorMax": "<executor-max>",
  "isHighConcurrencyEnabled": "true|false",
  "properties": {
    // The message properties of logs, events and metrics.
    "timestamp": "2025-02-28T09:13:57.941Z",
    "message": "ApplicationAttemptId: appattempt_1740734011890_0001_000001",
    "logger_name": "org.apache.spark.deploy.yarn.ApplicationMaster",
    "level": "INFO",
    "thread_name": "main"
    // ...
  }
}

После передачи диагностики в концентратор событий Центры событий Azure, этот концентратор можно использовать как источник в потоке событий Fabric для обработки или маршрутизации данных.

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

Создайте управляемую частную конечную точку для целевого объекта Центры событий Azure. Подробные инструкции см. статью Создание и использование управляемых частных конечных точек в Microsoft Fabric - Microsoft Fabric.

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

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