Azure Event Hubs を使用して Apache Spark アプリケーションのログとメトリックを収集する (プレビュー)
Fabric Apache Spark 診断エミッタ拡張機能は、Apache Spark アプリケーションが Azure Log Analytics、Azure Storage、Azure Event Hubs などのさまざまな宛先にログ、イベント ログ、メトリックを送信できるようにするライブラリです。
このチュートリアルでは、Fabric Apache Spark 診断エミッタ拡張機能を使用して、Apache Spark アプリケーション ログ、イベント ログ、メトリックを Azure Event Hubs に送信する方法について説明します。
ログとメトリックを Azure Event Hubs に収集する
手順 1: Azure Event Hubs インスタンスを作成する
診断ログとメトリックを収集するには、既存の Azure Event Hubs インスタンスを使用できます。 または、お持ちでない場合は、イベント ハブを作成することができます。
手順 2: Apache Spark 構成を使用して Fabric 環境成果物を作成する
オプション 1: Azure Event Hubs 接続文字列を使って構成する
Fabric で Fabric 環境成果物を作成します
環境成果物に対する適切な値と共に以下の 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 Event Hubs の構成」を参照してください。
オプション 2: Azure Key Vault を使用して構成する
Note
既知の問題: オプション 2 を使用したセッションの開始が一時的にできなくなっています。 現時点では、キー コンテナーにシークレットを保存すると、Spark セッションが開始されなくなります。 オプション 1 で説明されている方法を使用した構成を優先してください。
Apache Spark アプリケーションを送信するユーザーに、シークレット読み取りアクセス許可が付与されていることを確認します。 詳細については、「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」を参照してください。
ワークスペース キーを格納するように Azure Key Vault を構成するには次を行います。
Azure portal でキー コンテナーを作成し、そこに移動します。
キー コンテナーの設定ページで、[シークレット]、[生成/インポート] の順に選択します。
[シークレットの作成] 画面で、次の値を選択します。
- 名前: シークレットの名前を入力します。
- 値: シークレットの
<connection-string>
を入力します。 - 他の値は既定値のままにしておきます。 [作成] を選択します。
Fabric で Fabric 環境成果物を作成します。
以下の Spark プロパティを追加します。 または、リボンの [.yml から追加] を選択して、以下の Spark プロパティを含むサンプル 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.keyVault: <AZURE_KEY_VAULT_NAME> 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_NAME>
、<AZURE_KEY_VAULT_SECRET_KEY_NAME>
を入力します。 これらのパラメーターの詳細については、「Azure Event Hubs の構成」を参照してください。変更を保存して公開します。
手順 3: 環境成果物をノートブックまたは Spark ジョブ定義にアタッチするか、ワークスペースの既定値として設定する
環境をノートブックまたは Spark ジョブ定義にアタッチするには:
- Fabric で特定のノートブックまたは Spark ジョブ定義に移動します。
- [ホーム] タブの [環境] メニューを選択し、構成済みの診断 Spark プロパティを持つ環境を選択します。
- この構成は、Spark セッションを開始するときに適用されます。
環境をワークスペースの既定値として設定するには:
- Fabric のワークスペース設定に移動します。
- ワークスペース設定で [Spark 設定] を見つけます ([ワークスペース設定] -> [Data Engineering/サイエンス] -> [Spark 設定])。
- [環境] タブを選択し、診断 Spark プロパティが構成されている環境を選択し、[保存] をクリックします。
Note
ワークスペースの構成を管理できるのは、ワークスペース管理者だけです。 ここで行った変更は、ワークスペース設定にアタッチされているすべてのノートブックと Spark ジョブ定義に適用されます。 詳細については、「Fabric ワークスペースの設定」を参照してください。
利用可能な構成
構成 | 説明 |
---|---|
spark.synapse.diagnostic.emitters |
必須。 診断エミッタのコンマ区切りの宛先名。 |
spark.synapse.diagnostic.emitter.<destination>.type |
必須。 組み込みの宛先の種類。 Azure Event Hubs の宛先を有効にするには、値を AzureEventHub にする必要があります。 |
spark.synapse.diagnostic.emitter.<destination>.categories |
省略可能。 コンマ区切りの選択されたログ カテゴリ。 指定できる値には、DriverLog 、ExecutorLog 、EventLog 、Metrics が含まれます。 設定しない場合、既定値はすべてのカテゴリです。 |
spark.synapse.diagnostic.emitter.<destination>.secret |
省略可能。 Azure Event Hubs インスタンスの接続文字列。 このフィールドは、パターン Endpoint=sb://<FQDN>/;SharedAccessKeyName=<KeyName>;SharedAccessKey=<KeyValue>;EntityPath=<PathName> と一致する必要があります |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
.secret が指定されていない場合は必須です。 シークレット (接続文字列) が格納されている Azure Key Vault の名前。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
.secret.keyVault を指定した場合は必須。 シークレット (接続文字列) が格納されている 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 |
注意
Azure Eventhub インスタンス接続文字列には、常に EntityPath
が含まれている必要があります。これは、Azure Event Hubs インスタンスの名前です。
ログ データの例
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 Event Hubs のマネージド プライベート エンドポイントを作成します。 詳細な手順については、「Microsoft Fabric でマネージド プライベート エンドポイントを作成して使用する - Microsoft Fabric」を参照してください。
マネージド プライベート エンドポイントが承認されると、ユーザーはターゲットの Azure Event Hubs にログとメトリックの出力を開始できます。