Мониторинг метрик приложений Apache Spark с помощью Prometheus и Grafana

Обзор

В этом учебнике описывается, как развернуть решение для метрик приложений Apache Spark в кластере Службы Azure Kubernetes (AKS) и интегрировать панели мониторинга Grafana.

Это решение можно использовать для сбора данных метрик Apache Spark и выполнения запросов к ним в реальном времени. Интегрированные панели мониторинга Grafana позволяют диагностировать и отслеживать приложение Apache Spark. Исходный код и конфигурации предоставляются на портале GitHub в виде открытого кода.

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

  1. Azure CLI
  2. Клиент Helm 3.30 или более поздней версии
  3. kubectl
  4. Служба Azure Kubernetes (AKS)

Или используйте компонент Azure Cloud Shell, в котором уже есть Azure CLI, клиент Helm и kubectl.

Вход в Azure

az login
az account set --subscription "<subscription_id>"

Создание экземпляра Службы Azure Kubernetes (AKS)

Используйте команду Azure CLI, чтобы создать кластер Kubernetes в своей подписке.

az aks create --name <kubernetes_name> --resource-group <kubernetes_resource_group> --location <location> --node-vm-size Standard_D2s_v3
az aks get-credentials --name <kubernetes_name> --resource-group <kubernetes_resource_group>

Примечание. Этот шаг можно пропустить, если у вас уже есть кластер AKS.

Создание субъекта-службы и предоставление разрешения для рабочей области Synapse

az ad sp create-for-rbac --name <service_principal_name> --role Contributor --scopes /subscriptions/<subscription_id>

Результат должен выглядеть следующим образом.

{
  "appId": "abcdef...",
  "displayName": "<service_principal_name>",
  "name": "http://<service_principal_name>",
  "password": "abc....",
  "tenant": "<tenant_id>"
}

Запишите идентификатор appId, пароль и идентификатор tenantID.

screenshot grant permission srbac

  1. Войдите в свою рабочую область Azure Synapse Analytics в качестве администратора Synapse.

  2. В Synapse Studio в области навигации слева выберите Управление > Управление доступом

  3. Нажмите кнопку "Добавить" в левом верхнем углу, чтобы добавить назначение роли.

  4. В качестве области выберите Рабочая область.

  5. В качестве роли выберите Оператор вычислительной среды Synapse.

  6. В поле "Выбор пользователя" введите <имя_субъекта-службы> и щелкните субъект-службу

  7. Нажмите кнопку Применить (подождите 3 минуты, чтобы разрешение вступило в силу).

Примечание.

Убедитесь, что у субъекта-службы есть по крайней мере роль "Читатель" в рабочей области Synapse. Перейдите на вкладку "Управление доступом (IAM)" на портале Azure и проверьте параметры разрешений.

Установка соединителя, сервера Prometheus и панели мониторинга Grafana

  1. Добавьте репозиторий synapse-charts в клиент Helm.
helm repo add synapse-charts https://github.com/microsoft/azure-synapse-spark-metrics/releases/download/helm-chart
  1. Установите компоненты посредством клиента Helm:
helm install spo synapse-charts/synapse-prometheus-operator --create-namespace --namespace spo \
    --set synapse.workspaces[0].workspace_name="<workspace_name>" \
    --set synapse.workspaces[0].tenant_id="<tenant_id>" \
    --set synapse.workspaces[0].service_principal_name="<service_principal_app_id>" \
    --set synapse.workspaces[0].service_principal_password="<service_principal_password>" \
    --set synapse.workspaces[0].subscription_id="<subscription_id>" \
    --set synapse.workspaces[0].resource_group="<workspace_resource_group_name>"
  • workspace_name: имя рабочей области Synapse;
  • subscription_id: идентификатор подписки рабочей области Synapse;
  • workspace_resource_group_name: имя группы ресурсов рабочей области Synapse;
  • tenant_id: идентификатор арендатора рабочей области Synapse;
  • service_principal_app_id: идентификатор appId субъекта-службы;
  • service_principal_password: созданный вами пароль субъекта-службы.

Вход в Grafana

Получите пароль и адрес Grafana по умолчанию. Вы можете изменить этот пароль в параметрах Grafana.

kubectl get secret --namespace spo spo-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
kubectl -n spo get svc spo-grafana

Получите IP-адрес службы, скопируйте и вставьте этот внешний IP-адрес в браузер, а затем войдите с именем admin и полученным паролем.

Использование панелей мониторинга Grafana

Найдите панель мониторинга Synapse в левом верхнем углу страницы Grafana (на домашней странице выберите «Рабочая область Synapse» или «Приложение Synapse»). Попробуйте выполнить пример кода в Synapse Studio и подождите несколько секунд, чтобы получить метрики.>

Кроме того, вы можете использовать панели мониторинга "Synapse Workspace / Workspace" (Рабочая область Synapse: рабочая область) или "Synapse Workspace / Apache Spark pools" (Рабочая область Synapse: пулы Apache Spark), чтобы получить общие сведения о своей рабочей области и пулах Apache Spark.

Удаление

Удалите компоненты командой Helm, как показано ниже.

helm delete <release_name> -n <namespace>

Удалите кластер AKS.

az aks delete --name <kubernetes_cluster_name> --resource-group <kubernetes_cluster_rg>

Общие сведения о компонентах

Azure Synapse Analytics предоставляет диаграмму Helm на основе Prometheus Operator и соединителя Synapse для Prometheus. На этой диаграмме Helm показаны сервер Prometheus, сервер Grafana и панели мониторинга Grafana для метрик на уровне приложения Apache Spark. Вы можете использовать Prometheus, популярную систему мониторинга с открытым кодом, для сбора данных этих метрик практически в реальном времени, а для визуализации использовать Grafana.

Соединитель Synapse для Prometheus

Соединитель Synapse для Prometheus помогает подключить пул Apache Spark для Azure Synapse к серверу Prometheus. Он реализует следующие функции:

  1. Аутентификация. Это аутентификация на основе AAD, которая позволяет автоматически обновлять токен AAD субъекта-службы для обнаружения приложений, приема данных метрик и других функций.
  2. Обнаружение приложений Apache Spark. Когда вы отправляете приложения в целевую рабочую область, соединитель Synapse для Prometheus может автоматически обнаружить эти приложения.
  3. Метаданные приложения Apache Spark. Выполняется сбор основных сведений о приложении и экспорт этих данных в Prometheus.

Соединитель Synapse для Prometheus выпускается в виде образа Docker, размещаемого в Microsoft Container Registry. Он предоставляется в виде открытого кода и находится в разделе метрик приложений Apache Spark для Azure Synapse.

Сервер Prometheus

Prometheus — это набор средств с открытым кодом для мониторинга и оповещения. Набор средств Prometheus был разработан компанией Cloud Native Computing Foundation (CNCF) и де-факто стал стандартом для облачного мониторинга. С помощью Prometheus можно осуществлять сбор, запрос и хранение больших объемов данных временных рядов. Кроме того, это решение легко интегрировать с Grafana. В данном решении мы развертываем компонент Prometheus на основе диаграммы Helm.

Grafana и панели мониторинга

Grafana — это программное обеспечение с открытым кодом для визуализации и анализа. Оно позволяет запрашивать, визуализировать и исследовать метрики, а также получать оповещения о них. Azure Synapse Analytics предоставляет набор панелей мониторинга Grafana по умолчанию для визуализации метрик на уровне приложения Apache Spark.

Панель мониторинга "Synapse Workspace / Workspace" (Рабочая область Synapse: рабочая область) предоставляет представление на уровне рабочей области, в котором отображаются все пулы Apache Spark, количество приложений, ядер ЦП и т. д.

screenshot dashboard workspace

Панель мониторинга "Synapse Workspace / Apache Spark pools" (Рабочая область Synapse: пулы Apache Spark) содержит метрики приложений Apache Spark, выполняющихся в выбранном пуле Apache Spark, за определенный период времени.

screenshot dashboard sparkpool

Панель мониторинга "Synapse Workspace / Apache Spark Application" (Рабочая область Synapse: приложение Apache Spark) содержит выбранное приложение Apache Spark.

screenshot dashboard application

Указанные выше шаблоны панелей мониторинга доступны в разделе метрик приложений Apache Spark для Azure Synapse в виде открытого кода.