Azure Storage アカウントを使用して Apache Spark アプリケーションのログとメトリックを収集する (プレビュー)
Fabric Apache Spark 診断エミッタ拡張機能は、Apache Spark アプリケーションが Azure Log Analytics、Azure Storage、Azure Event Hubs などの複数の宛先にログ、イベント ログ、メトリックを送信できるようにするライブラリです。
このチュートリアルでは、Fabric Apache Spark 診断エミッタ拡張機能を使用して、Apache Spark アプリケーション ログ、イベント ログ、メトリックを Azure Storage アカウントに送信する方法について説明します。
ログとメトリックをストレージ アカウントに収集する
手順 1:ストレージ アカウントの作成
診断ログとメトリックを収集するには、既存の Azure Storage アカウントを使用できます。 お持ちでない場合は、Azure Blob Storage アカウントを作成することも、Azure Data Lake Storage Gen2 で使用するストレージ アカウントを作成することもできます。
手順 2: Apache Spark 構成を使用して Fabric 環境成果物を作成する
オプション 1: Azure Storage URI とアクセス キーを使用して構成する
Fabric で Fabric 環境成果物を作成する
環境成果物に対する適切な値と共に以下の Spark プロパティを追加するか、リボンの [.yml から追加] を選択して、以下のプロパティを既に含んでいるサンプル YAML ファイルをダウンロードします。
spark.synapse.diagnostic.emitters: MyStorageBlob spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage" spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyStorageBlob.uri: "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>" spark.synapse.diagnostic.emitter.MyDestination1.auth: "AccessKey" spark.synapse.diagnostic.emitter.MyDestination1.secret: <storage-access-key> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
構成ファイルで、パラメーター
<my-blob-storage>
、<container-name>
、<folder-name>
、<storage-access-key>
を入力します。 これらのパラメーターの詳細については、「Azure Storage の構成」を参照してください。
オプション 2: Azure Key Vault を使用して構成する
Note
既知の問題: オプション 2 を使用したセッションの開始が一時的にできなくなっています。 現時点では、キー コンテナーにシークレットを保存すると、Spark セッションが開始されなくなります。 オプション 1 で説明されている方法を使用した構成を優先してください。
Apache Spark アプリケーションを送信するユーザーに、シークレット読み取りアクセス許可が付与されていることを確認します。 詳細については、「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」を参照してください。
ワークスペース キーを格納するように Azure Key Vault を構成するには次を行います。
Azure portal でキー コンテナーを作成し、そこに移動します。
キー コンテナーの設定ページで、[シークレット]、[生成/インポート] の順に選択します。
[シークレットの作成] 画面で、次の値を選択します。
- 名前: シークレットの名前を入力します。
- 値: シークレットの
<storage-access-key>
を入力します。 - 他の値は既定値のままにしておきます。 [作成] を選択します。
Fabric で Fabric 環境成果物を作成します。
以下の Spark プロパティを追加します。 または、リボンの [.yml から追加] を選択して、以下の Spark プロパティを含むサンプル yaml ファイルをアップロードします。
spark.synapse.diagnostic.emitters: <MyStorageBlob> spark.synapse.diagnostic.emitter.MyStorageBlob.type: "AzureStorage" spark.synapse.diagnostic.emitter.MyStorageBlob.categories: "DriverLog,ExecutorLog,EventLog,Metrics" spark.synapse.diagnostic.emitter.MyStorageBlob.uri: "https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name>" spark.synapse.diagnostic.emitter.MyStorageBlob.auth: "AccessKey" spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault: <AZURE_KEY_VAULT_NAME> spark.synapse.diagnostic.emitter.MyStorageBlob.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
構成ファイルで、パラメーター
<my-blob-storage>
、<container-name>
、<folder-name>
、<AZURE_KEY_VAULT_NAME>
、<AZURE_KEY_VAULT_SECRET_KEY_NAME>
を入力します。 これらのパラメーターの詳細については、「Azure Storage の構成」を参照してください。変更を保存して公開します。
手順 3: 環境成果物をノートブックまたは Spark ジョブ定義にアタッチするか、ワークスペースのデフォルトとして設定する
環境をノートブックまたは Spark ジョブ定義にアタッチするには:
- Fabric で特定のノートブックまたは Spark ジョブ定義に移動します。
- [ホーム] タブの [環境] メニューを選択し、構成済みの診断 Spark プロパティを持つ環境を選択します。
- この構成は、Spark セッションを開始するときに適用されます。
環境をワークスペースの既定値として設定するには:
- Fabric のワークスペース設定に移動します。
- ワークスペース設定で [Spark 設定] を見つけます ([ワークスペース設定] -> [Data Engineering/サイエンス] -> [Spark 設定])。
- [環境] タブを選択し、診断 Spark プロパティが構成されている環境を選択し、[保存] をクリックします。
Note
ワークスペースの構成を管理できるのは、ワークスペース管理者だけです。 ここで行った変更は、ワークスペース設定にアタッチされているすべてのノートブックと Spark ジョブ定義に適用されます。 詳細については、「Fabric ワークスペースの設定」を参照してください。
手順 4: Azure ストレージ アカウントのログ ファイルを表示する
構成された Spark セッションにジョブを送信した後、宛先ストレージ アカウントのログとメトリック ファイルを表示できます。 ログは、<workspaceId>.<fabricLivyId>
によって識別されるさまざまなアプリケーションに基づいて、対応するパスに格納されます。 すべてのログ ファイルは JSON 行形式 (改行区切り JSON または ndjson とも呼ばれます) であり、データ処理に便利です。
利用可能な構成
構成 | 説明 |
---|---|
spark.synapse.diagnostic.emitters |
必須。 診断エミッタのコンマ区切りの宛先名。 たとえば、MyDest1,MyDest2 のように指定します。 |
spark.synapse.diagnostic.emitter.<destination>.type |
必須。 組み込みの宛先の種類。 Azure ストレージの宛先を有効にするには、このフィールドに AzureStorage が含まれている必要があります。 |
spark.synapse.diagnostic.emitter.<destination>.categories |
省略可能。 コンマ区切りの選択されたログ カテゴリ。 指定できる値には、DriverLog 、ExecutorLog 、EventLog 、Metrics が含まれます。 設定しない場合、既定値はすべてのカテゴリです。 |
spark.synapse.diagnostic.emitter.<destination>.auth |
必須。 ストレージ アカウントのアクセス キー承認を使用する場合は AccessKey 。 Shared Access Signature 承認の場合は SAS 。 |
spark.synapse.diagnostic.emitter.<destination>.uri |
必須。 宛先 BLOB コンテナー フォルダーの URI。 パターン https://<my-blob-storage>.blob.core.windows.net/<container-name>/<folder-name> に一致する必要があります。 |
spark.synapse.diagnostic.emitter.<destination>.secret |
省略可能。 シークレット (AccessKey または SAS) の内容。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
.secret が指定されていない場合は必須です。 シークレット (AccessKey または SAS) が格納されている Azure Key Vault の名前。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
.secret.keyVault を指定した場合は必須。 シークレット (AccessKey または SAS) が格納されている Azure Key Vault のシークレット名。 |
spark.synapse.diagnostic.emitter.<destination>.filter.eventName.match |
省略可能。 コンマ区切りの 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 に設定する必要があります。 |
ログ データの例
JSON 形式のログ レコードの例を次に示します。
{
"timestamp": "2024-09-06T03:09:37.235Z",
"category": "Log|EventLog|Metrics",
"fabricLivyId": "<fabric-livy-id>",
"applicationId": "<application-id>",
"applicationName": "<application-name>",
"executorId": "<driver-or-executor-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": "2024-09-06T03:09:37.235Z",
"message": "Initialized BlockManager: BlockManagerId(1, vm-04b22223, 34319, None)",
"logger_name": "org.apache.spark.storage.BlockManager",
"level": "INFO",
"thread_name": "dispatcher-Executor"
//...
}
}
Fabric ワークスペースとマネージド仮想ネットワーク
ターゲットの Azure Blob Storage のマネージド プライベート エンドポイントを作成します。 詳細な手順については、「Microsoft Fabric - Microsoft Fabric でマネージド プライベート エンドポイントを作成して使用する」を参照してください。
マネージド プライベート エンドポイントが承認されると、ユーザーはターゲットの Azure Blob Storage へのログとメトリックの送信を開始できます。