次の方法で共有


Prometheus と Grafana を使用して Apache Spark アプリケーションのメトリックを監視する

概要

このチュートリアルでは、Apache Spark アプリケーション メトリック ソリューションを Azure Kubernetes Service (AKS) クラスターにデプロイする方法と、Grafana ダッシュボードを統合する方法について説明します。

このソリューションを使用して、Apache Spark メトリック データの収集とクエリをほぼリアルタイムで実行できます。 統合された Grafana ダッシュボードを使用して、Apache Spark アプリケーションを診断および監視できます。 ソース コードと構成は GitHub でオープンソース化されています。

前提条件

  1. Azure CLI
  2. Helm クライアント 3.30 以上
  3. kubectl
  4. Azure Kubernetes Service (AKS)

または、Azure CLI、Helm クライアント、kubectl があらかじめ含まれている Azure Cloud Shell を使用します。

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>"
}

アプリ ID、パスワード、テナント ID をメモしておきます。

screenshot grant permission srbac

  1. Synapse Administrator として Azure Synapse Analytics ワークスペース にログインします

  2. Synapse Studio の左側のペインで、[管理] > [アクセス制御] を選択します

  3. 左上にある [追加] ボタンをクリックして、ロールの割り当てを追加します

  4. [スコープ] で、 [ワークスペース] を選択します

  5. [ロール] で、 [Synapse Compute Operator] を選択します

  6. [ユーザーの選択] で、<service_principal_name> を入力してサービス プリンシパルをクリックします

  7. [適用] をクリックします (アクセス許可が有効になるまで 3 分間待機します。)

Note

サービスプ リンシパルが、Synapse ワークスペースで少なくとも "閲覧者" ロールであることを確認してください。 Azure portal の [アクセス制御 (IAM)] タブに移動し、アクセス許可の設定を確認します。

コネクタ、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 ワークスペースのサブスクリプション ID。
  • workspace_resource_group_name: Synapse ワークスペースのリソース グループ名。
  • tenant_id: Synapse ワークスペースのテナント ID。
  • 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 ダッシュボードを使用する

Grafana ページの左上隅にある Synapse ダッシュボードを探し (ホーム -> Synapse Workspace/Synapse Application)、Synapse Studio でサンプル コードを実行して、メトリックが取得されるまで数秒待ってみます。

また、"Synapse Workspace / Workspace" および "Synapse Workspace / Apache Spark pools" ダッシュボードを使用して、ワークスペースと 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 では、Prometheus Operator および Synapse Prometheus コネクタに基づいた Helm チャートが提供されます。 Helm チャートには、Apache Spark アプリケーション レベルのメトリックのための Prometheus サーバー、Grafana サーバー、Grafana ダッシュボードが含まれます。 一般的なオープンソースの監視システムである Prometheus を使用して、これらのメトリックをほぼリアルタイムで収集し、Grafana を使用して視覚化できます。

Synapse Prometheus コネクタ

Synapse Prometheus コネクタは、Azure Synapse Apache Spark プールと Prometheus サーバーを接続するのに役立ちます。 以下を実装します:

  1. 認証: AAD ベースの認証であり、アプリケーションの検出、メトリックのインジェスト、その他の機能のために、サービス プリンシパルの AAD トークンを自動的に更新できます。
  2. Apache Spark アプリケーション検出: ターゲット ワークスペースにアプリケーションを送信すると、Synapse Prometheus コネクタがこれらのアプリケーションを自動的に検出できます。
  3. Apache Spark アプリケーション メタデータ: 基本的なアプリケーション情報を収集し、データを Prometheus にエクスポートします。

Synapse Prometheus コネクタは、Microsoft Container Registry でホストされる Docker イメージとしてリリースされます。 オープンソースであり、Azure Synapse Apache Spark アプリケーション メトリックにあります。

Prometheus サーバー

Prometheus は、オープンソースの監視およびアラート ツールキットです。 Prometheus は Cloud Native Computing Foundation (CNCF) を卒業し、クラウドネイティブ監視の事実上の標準になりました。 Prometheus は、大量の時系列データの収集、クエリ、保存に役立ち、Grafana と簡単に統合できます。 このソリューションでは、Helm チャートに基づいて Prometheus コンポーネントをデプロイします。

Grafana とダッシュボード

Grafana はオープンソースの視覚化および分析ソフトウェアです。 メトリックのクエリ、視覚化、操作、またメトリックに基づいたアラートの作成を行うために使用できます。 Azure Synapse Analytics には、Apache Spark アプリケーション レベルのメトリックを視覚化するための、既定の Grafana ダッシュボードのセットが用意されています。

"Synapse Workspace / Workspace" ダッシュボードは、すべての Apache Spark プール、アプリケーション数、CPU コアなどのワークスペース レベルのビューを提供します。

screenshot dashboard workspace

"Synapse Workspace / Apache Spark pools" ダッシュボードには、選択した Apache Spark プールで期間中に実行される Apache Spark アプリケーションのメトリックが含まれます。

screenshot dashboard sparkpool

"Synapse Workspace / Apache Spark Application" ダッシュボードには、選択した Apache Spark アプリケーションが含まれます。

screenshot dashboard application

上記のダッシュボード テンプレートは、Azure Synapse Apache Spark アプリケーション メトリックでオープンソース化されています。