Azure Event Hubs を使用して Apache Spark アプリケーションのログとメトリックを収集する

Synapse Apache Spark 診断エミッタ拡張機能は、Apache Spark アプリケーションで 1 つ以上の宛先 (Azure Log Analytics、Azure Storage、Azure Event Hubs など) にログ、イベント ログ、メトリックを送信できるようにするライブラリです。

このチュートリアルでは、Synapse Apache Spark 診断エミッタ拡張機能を使用して、Apache Spark アプリケーションのログ、イベント ログ、メトリックを Azure Event Hubs に送信する方法について説明します。

Note

この機能は現在、Azure Synapse Runtime for Apache Spark 3.4 ランタイムでは使用できませんが、一般提供後にサポートされる予定です。

ログとメトリックを Azure Event Hubs に収集する

手順 1: Azure Event Hub インスタンスを作成する

診断ログとメトリックを 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 EventHub の構成に関する記事を参照してください

手順 3: Apache Spark 構成ファイルを Apache Spark プールにアップロードする

  1. Synapse Studio で Apache Spark プールに移動します ([管理] -> [Apache Spark プール])
  2. Apache Spark プールの右側にある [...] ボタンをクリックし、 [Apache Spark 構成] を選択します
  3. [アップロード] をクリックし、".txt" 構成ファイルを選択して、 [適用] をクリックします。

利用可能な構成

構成 説明
spark.synapse.diagnostic.emitters 必須。 診断エミッタのコンマ区切りの宛先名。
spark.synapse.diagnostic.emitter.<destination>.type 必須。 組み込みの宛先の種類。 Azure Event Hubs の宛先を有効にするには、値を AzureEventHub にする必要があります。
spark.synapse.diagnostic.emitter.<destination>.categories 省略可能。 コンマ区切りの選択されたログ カテゴリ。 指定できる値には、DriverLogExecutorLogEventLogMetrics が含まれます。 設定しない場合、既定値はすべてのカテゴリです。
spark.synapse.diagnostic.emitter.<destination>.secret 省略可能。 Azure Eventhub インスタンスの接続文字列。 このフィールドは、パターン 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>.secret.keyVault.linkedService 省略可能。 Azure Key Vault のリンクされたサービス名。 Synapse パイプラインで有効にした場合、AKV からシークレットを取得するために必要です。 (AKV に対する読み取りアクセス許可が MSI に付与されていることを確認してください)。
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": "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 ファイアウォール規則を作成できます。