次の方法で共有


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 に送信する方法について説明します。

ログとメトリックを 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 プールにアップロードする

  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 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>.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 ファイアウォール規則を作成できます。