Synapse Apache Spark 診断エミッタ拡張機能は、Apache Spark アプリケーションで 1 つ以上の宛先 (Azure Log Analytics、Azure Storage、Azure Event Hubs など) にログ、イベント ログ、メトリックを送信できるようにするライブラリです。
このチュートリアルでは、Synapse Apache Spark 診断エミッタ拡張機能を使用して、Apache Spark アプリケーションのログ、イベント ログ、メトリックを Azure Event Hubs に出力する方法について説明します。
ログとメトリックを Azure Event Hubs に収集する
手順 1: Azure Event Hubs インスタンスを作成する
診断ログとメトリックを Azure Event Hubs に収集する場合は、既存の Azure Event Hubsインスタンスを使用できます。 または、お持ちでない場合は、イベント ハブを作成することができます。
手順 2: Apache Spark 構成ファイルの作成
diagnostic-emitter-azure-event-hub-conf.txt
を作成し、そのファイルに次の内容をコピーします。 または、Apache Spark プール構成用のサンプル テンプレート ファイルをダウンロードします。
spark.synapse.diagnostic.emitters MyDestination1
spark.synapse.diagnostic.emitter.MyDestination1.type AzureEventHub
spark.synapse.diagnostic.emitter.MyDestination1.categories Log,EventLog,Metrics
spark.synapse.diagnostic.emitter.MyDestination1.secret <connection-string>
構成ファイルで、パラメーター <connection-string>
を入力します。
パラメーターの詳細については、 Azure Event Hubs の構成を参照してください。
手順 3: Apache Spark 構成ファイルを Apache Spark プールにアップロードする
- Synapse Studio で Apache Spark プールに移動します ([管理] -> [Apache Spark プール])
- Apache Spark プールの右側にある [...] ボタンをクリックし、 [Apache Spark 構成] を選択します
- [アップロード] をクリックし、".txt" 構成ファイルを選択して、 [適用] をクリックします。
利用可能な構成
構成 | 説明 |
---|---|
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 (AKV) 名。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
.secret.keyVault を指定した場合は必須。 シークレット (接続文字列) が格納されている Azure Key Vault のシークレット名。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault.linkedService |
省略可能。 Azure Key Vault にリンクされたサービスの名前。 Synapse パイプラインで有効になっている場合、これは AKV からシークレットを取得するために必要です。 (マネージド サービス ID (MSI) に AKV に対する読み取りアクセス許可があることを確認します)。 |
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 Event Hubs インスタンスの接続文字列には、常に azure Event Hubs インスタンスの名前である EntityPath
が含まれている必要があります。
ログ データの例
JSON 形式のログ レコードの例を次に示します。
{
"timestamp": "2021-01-02T12:34:56.789Z",
"category": "Log|EventLog|Metrics",
"workspaceName": "<my-workspace-name>",
"sparkPool": "<spark-pool-name>",
"livyId": "<livy-session-id>",
"applicationId": "<application-id>",
"applicationName": "<application-name>",
"executorId": "<driver-or-executor-id>",
"properties": {
// The message properties of logs, events and metrics.
"timestamp": "2021-01-02T12:34:56.789Z",
"message": "Registering signal handler for TERM",
"logger_name": "org.apache.spark.util.SignalUtils",
"level": "INFO",
"thread_name": "main"
// ...
}
}
データ流出の防止が有効になっている Synapse ワークスペース
Azure Synapse Analytics ワークスペースでは、ワークスペースのデータ流出の防止を有効化することがサポートされています。 流出保護では、ログとメトリックを宛先エンドポイントに直接送信することはできません。 このシナリオでは、さまざまな宛先エンドポイントに対応するマネージド プライベート エンドポイントを作成するか、IP ファイアウォール規則を作成できます。
証明書とサービス プリンシパルによる Apache Spark アプリケーションのログとメトリックの収集
Apache Spark 診断エミッター拡張機能では、証明書資格情報を使用したサービス プリンシパル認証を使用してトークンを取得することで、Azure Event Hub へのアクセスがサポートされるようになりました。 詳細については、 サービス プリンシパル認証を使用した Azure Event Hubs への Apache Spark アプリケーション ログとメトリックの収集に関する記事 Certificate-Based 参照してください。