Azure Log Analytics を使用して Apache Spark アプリケーションを監視する (プレビュー)
Fabric Apache Spark 診断エミッタ拡張機能は、Apache Spark アプリケーションが Azure Log Analytics、Azure Storage、Azure Event Hubs などの複数の宛先にログ、イベント ログ、メトリックを送信できるようにするライブラリです。
このチュートリアルでは、Spark のログとメトリックを構成して Fabric 内の Log Analytics に出力する方法を学習します。 構成が完了すると、Log Analytics ワークスペースで Apache Spark アプリケーションのメトリックとログを収集して分析することができるようになります。
ワークスペース情報を構成する
以下の手順に従って、Fabric で必要な情報を構成します。
手順 1: Log Analytics ワークスペースを作成する
次のいずれかのリソースを参照して、ワークスペースを作成します。
- Azure portal でワークスペースを作成します。
- Azure CLI を使用してワークスペースを作成します。
- PowerShell を使用して Azure Monitor でワークスペースを作成して構成します。
手順 2: Apache Spark 構成を使用して Fabric 環境成果物を作成する
Spark を構成するには、Fabric 環境成果物を作成し、以下の選択肢のいずれかを選択します。
オプション 1: Log Analytics ワークスペースの ID とキーを使用して構成する
Fabric で Fabric 環境成果物を作成します
環境成果物に対する適切な値と共に以下の Spark プロパティを追加するか、リボンの [.yml から追加] を選択して、必要なプロパティを既に含んでいるサンプル YAML ファイルをダウンロードします。
<LOG_ANALYTICS_WORKSPACE_ID>
: Log Analytics ワークスペース の ID。<LOG_ANALYTICS_WORKSPACE_KEY>
: Log Analytics のキー。 これを見つけるには、Azure portal で [Azure Log Analytics ワークスペース]>[エージェント]>[プライマリ キー] に移動します。
spark.synapse.diagnostic.emitters: LA spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics" spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics" spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.diagnostic.emitter.LA.secret: <LOG_ANALYTICS_WORKSPACE_KEY> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
または、Azure Synapse と同じ構成を適用するために、以下のプロパティを使用するか、リボンの [.yml から追加] を選択して、サンプル YAML ファイルをダウンロードします。
spark.synapse.logAnalytics.enabled: "true" spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.logAnalytics.secret: <LOG_ANALYTICS_WORKSPACE_KEY> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
変更を保存して公開します。
オプション 2: Azure Key Vault を使用して構成する
Note
既知の問題: オプション 2 を使用したセッションの開始が一時的にできなくなっています。 現時点では、キー コンテナーにシークレットを保存すると、Spark セッションが開始されなくなります。 オプション 1 で説明されている方法を使用した構成を優先してください。
Apache Spark アプリケーションを送信するユーザーにシークレットの読み取りアクセス許可を付与する必要があります。 詳細については、「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」を参照してください。
ワークスペース キーを格納するよう Azure Key Vault を構成するには、次の手順に従います。
Azure portal でキー コンテナーに移動します。
キー コンテナーの設定ページで、[シークレット]、[生成/インポート] の順に選択します。
[シークレットの作成] 画面で、以下の値を入力します。
- 名前: シークレットの名前を入力します。 既定値として、「
SparkLogAnalyticsSecret
」と入力します。 - 値: シークレットの
<LOG_ANALYTICS_WORKSPACE_KEY>
を入力します。 - 他の値は既定値のままにしておきます。 [作成] を選択します。
- 名前: シークレットの名前を入力します。 既定値として、「
Fabric で Fabric 環境成果物を作成します
環境成果物に対する適切な値と共に以下の Spark プロパティを追加するか、環境成果物のリボンの [.yml から追加] を選択して、以下の Spark プロパティを含んでいるサンプル YAML ファイルをダウンロードします。
<LOG_ANALYTICS_WORKSPACE_ID>
: Log Analytics ワークスペース ID。<AZURE_KEY_VAULT_NAME>
: 構成したキー コンテナーの名前。<AZURE_KEY_VAULT_SECRET_KEY_NAME>
(省略可能): ワークスペース キーのキー コンテナー内のシークレット名。 既定値は、SparkLogAnalyticsSecret
です。
// Spark properties for LA spark.synapse.diagnostic.emitters LA spark.synapse.diagnostic.emitter.LA.type: "AzureLogAnalytics" spark.synapse.diagnostic.emitter.LA.categories: "Log,EventLog,Metrics" spark.synapse.diagnostic.emitter.LA.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.diagnostic.emitter.LA.secret.keyVault: <AZURE_KEY_VAULT_NAME> spark.synapse.diagnostic.emitter.LA.secret.keyVault.secretName: <AZURE_KEY_VAULT_SECRET_KEY_NAME> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
または、Azure Synapse と同じ構成を適用するために、以下のプロパティを使用するか、リボンの [.yml から追加] を選択してサンプル YAML ファイルをダウンロードします。
spark.synapse.logAnalytics.enabled: "true" spark.synapse.logAnalytics.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.logAnalytics.keyVault.name: <AZURE_KEY_VAULT_NAME> spark.synapse.logAnalytics.keyVault.key.secret: <AZURE_KEY_VAULT_SECRET_KEY_NAME> spark.fabric.pools.skipStarterPools: "true" //Add this Spark property when using the default pool.
Note
ワークスペース ID を Key Vault に格納することもできます。 シークレット名を
SparkLogAnalyticsWorkspaceId
に設定するか、構成のspark.synapse.logAnalytics.keyVault.key.workspaceId
を使用してワークスペース ID シークレット名を指定します。Apache Spark の構成一覧については、「使用可能な Apache Spark 構成」を参照してください
変更を保存して公開します。
手順 3: 環境成果物をノートブックまたは Spark ジョブ定義にアタッチするか、ワークスペースのデフォルトとして設定する
環境をノートブックまたは Spark ジョブ定義にアタッチするには:
- Fabric でノートブックまたは Spark ジョブ定義に移動します。
- [ホーム] タブ上の [環境] メニューを選択し、構成済みの環境を選択します。
- この構成は Spark セッションの開始後に適用されます。
ワークスペースの既定値として環境を設定するには:
- Fabric のワークスペース設定に移動します。
- ワークスペース設定で [Spark 設定] を見つけます ([ワークスペース設定] -> [データ エンジニアリング/サイエンス] -> [Spark 設定])
- [環境] タブを選択し、診断 Spark プロパティが構成されている環境を選択し、[保存] をクリックします。
Note
構成を管理できるのはワークスペース管理者だけです。 これらの値は、ワークスペース設定にアタッチするノートブックと Spark ジョブ定義に適用されます。 詳細については、「Fabric ワークスペース設定」を参照してください。
Apache Spark アプリケーションを送信してログとメトリックを表示する
Apache Spark アプリケーションを送信するには:
前の手順で構成した、関連付けられた環境と共に Apache Spark アプリケーションを送信します。 次のいずれかの方法を使用して、これを行うことができます。
- Fabric でノートブックを実行します。
- Apache Spark ジョブ定義を通して Apache Spark バッチ ジョブを送信します。
- パイプラインで Spark アクティビティを実行します。
指定した Log Analytics ワークスペースに移動し、Apache Spark アプリケーションの実行が開始されたときにアプリケーションのメトリックとログを表示します。
カスタム アプリケーション ログを書き込む
Apache Log4j ライブラリを使用して、カスタム ログを書き込むことができます。 Scala と Python の例を以下に示します。
Scala の例:
%%spark
val logger = org.apache.log4j.LogManager.getLogger("com.contoso.LoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
//log exception
try {
1/0
} catch {
case e:Exception =>logger.warn("Exception", e)
}
// run job for task level metrics
val data = sc.parallelize(Seq(1,2,3,4)).toDF().count()
PySpark の例:
%%pyspark
logger = sc._jvm.org.apache.log4j.LogManager.getLogger("com.contoso.PythonLoggerExample")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
Kusto を使用してデータのクエリを実行する
Apache Spark イベントのクエリを実行するには:
SparkListenerEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Spark アプリケーション ドライバーと Executor ログのクエリを実行するには:
SparkLoggingEvent_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| order by TimeGenerated desc
| limit 100
Apache Spark メトリックのクエリを実行するには:
SparkMetrics_CL
| where fabricWorkspaceId_g == "{FabricWorkspaceId}" and artifactId_g == "{ArtifactId}" and fabricLivyId_g == "{LivyId}"
| where name_s endswith "jvm.total.used"
| summarize max(value_d) by bin(TimeGenerated, 30s), executorId_s
| order by TimeGenerated asc
データ制限
Fabric は、HTTP データ コレクター API を使用して Azure Monitor にログ データを送信します。 Azure Monitor データ収集 API に送信されたデータには、以下に示すいくつかの制約が課されます。
- Azure Monitor データ コレクター API に対する送信ごとの上限は 30 MB です。 これは 1 回の送信のサイズ制限です。 1 回の送信のデータ サイズが 30 MB を超える場合は、データを小さなサイズのチャンクに分割し、それらを同時に送信する必要があります。
- フィールド値の上限は 32 KB です。 フィールド値が 32 KB を超えた場合、データは切り詰められます。
- 指定された型に対して推奨される最大数は 50 フィールドです。 これは、使いやすさと検索エクスペリエンスの観点からの実質的な制限です。
- Log Analytics ワークスペースのテーブルがサポートする列数は 500 までです。
- 列名の最大文字数は 45 文字です。
アラートの作成および管理
ユーザーは、設定された頻度でクエリを実行してメトリックとログを評価し、その結果に基づいてアラートを発行することができます。 詳細については、「Azure Monitor を使用してログ アラートを作成、表示、管理する」を参照してください。
Fabric ワークスペースとマネージド仮想ネットワーク
マネージド プライベート エンドポイントは、データ ソースとして Log Analytics をサポートしていないため、現状、マネージド仮想ネットワークでは、Azure Log Analytics を Spark のログとメトリックの送信先として選択することはできません。