Important
この記事に従う代わりに、新しいセットアップと移行のために Azure Log Analytics を使用してログとメトリックを収集 する方法に関するページを参照してください。 この記事は、従来の HTTP データ コレクター API パスを対象としており、参照のみを目的としています。
Fabric Apache Spark 診断エミッタ拡張機能は、Apache Spark アプリケーションが Azure Log Analytics、Azure Storage、Azure Event Hubs などの複数の宛先にログ、イベント ログ、メトリックを送信できるようにするライブラリです。
この記事では、Fabric の Log Analytics に Spark ログとメトリックを構成して出力する方法について説明します。 構成が完了すると、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環境でアーティファクトを作成します
環境成果物に対する適切な値と共に以下の Spark プロパティを追加するか、リボンの [.yml から追加] を選択して、必要なプロパティを既に含んでいるサンプル YAML ファイルをダウンロードします。
-
<EMITTER_NAME>: emitter の名前。 -
<LOG_ANALYTICS_WORKSPACE_ID>: Log Analytics ワークスペース の ID。 -
<LOG_ANALYTICS_WORKSPACE_KEY>: Log Analytics のキー。 これを見つけるには、Azure portal で [Azure Log Analytics ワークスペース]>[エージェント]>[プライマリ キー] に移動します。
spark.synapse.diagnostic.emitters: <EMITTER_NAME> spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: "AzureLogAnalytics" spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: "Log,EventLog,Metrics" spark.synapse.diagnostic.emitter.<EMITTER_NAME>.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.diagnostic.emitter.<EMITTER_NAME>.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 を使用して構成する
注意
Apache Spark アプリケーションを送信するユーザーにシークレットの読み取りアクセス許可を付与する必要があります。 詳細については、「Azure のロールベースのアクセス制御を使用して Key Vault のキー、証明書、シークレットへのアクセス権を付与する」を参照してください。
ワークスペース キーを格納するよう Azure Key Vault を構成するには、次の手順に従います。
Azure portal でキー ボールトに移動します。
キー コンテナーの設定ページで、[シークレット]、[生成/インポート] の順に選択します。
[シークレットの作成] 画面で、以下の値を入力します。
-
名前: シークレットの名前を入力します。 既定値として、「
SparkLogAnalyticsSecret」と入力します。 -
値: シークレットの
<LOG_ANALYTICS_WORKSPACE_KEY>を入力します。 - 他の値は既定値のままにしておきます。 [作成] を選択します。
-
名前: シークレットの名前を入力します。 既定値として、「
Fabric で Fabric 環境アーティファクトを作成します
環境成果物に対する適切な値と共に以下の Spark プロパティを追加するか、環境成果物のリボンの [.yml から追加] を選択して、以下の Spark プロパティを含んでいるサンプル YAML ファイルをダウンロードします。
-
<EMITTER_NAME>: エミッターの名前。 -
<LOG_ANALYTICS_WORKSPACE_ID>: Log Analytics ワークスペース ID。 -
<AZURE_KEY_VAULT_URI>: 構成したキー コンテナーの URI。 -
<AZURE_KEY_VAULT_SECRET_KEY_NAME>(省略可能): ワークスペース キーのキー コンテナー内のシークレット名。 既定値は、SparkLogAnalyticsSecretです。
// Spark properties for EMITTER_NAME spark.synapse.diagnostic.emitters <EMITTER_NAME> spark.synapse.diagnostic.emitter.<EMITTER_NAME>.type: "AzureLogAnalytics" spark.synapse.diagnostic.emitter.<EMITTER_NAME>.categories: "Log,EventLog,Metrics" spark.synapse.diagnostic.emitter.<EMITTER_NAME>.workspaceId: <LOG_ANALYTICS_WORKSPACE_ID> spark.synapse.diagnostic.emitter.<EMITTER_NAME>.secret.keyVault: <AZURE_KEY_VAULT_URI> spark.synapse.diagnostic.emitter.<EMITTER_NAME>.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_URI> 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.注意
ワークスペース ID を Key Vault に格納することもできます。 シークレット名を
SparkLogAnalyticsWorkspaceIdに設定するか、構成のspark.synapse.logAnalytics.keyVault.key.workspaceIdを使用してワークスペース ID シークレット名を指定します。-
変更を保存して公開します。
手順 3: 環境成果物をノートブックまたは Spark ジョブ定義にアタッチするか、ワークスペースのデフォルトとして設定する
注意
ワークスペース管理者のみが、ワークスペースの既定として環境を指定できます。
設定すると、ワークスペース内のすべてのノートブックと Spark ジョブ定義の既定の環境になります。 詳細については、「Fabric ワークスペース設定」を参照してください。
環境をノートブックまたは Spark ジョブ定義にアタッチするには:
- Fabric でノートブックまたは Spark ジョブ定義に移動します。
- [ホーム] タブ上の [環境] メニューを選択し、構成済みの環境を選択します。
- この構成は Spark セッションの開始後に適用されます。
ワークスペースの既定値として環境を設定するには:
- Fabric のワークスペース設定に移動します。
- ワークスペース設定 (ワークスペース設定>Data Engineering/Science>Spark 設定) で Spark 設定を検索します。
- [ 環境 ] タブを選択し、診断 Spark プロパティが構成されている環境を選択し、[ 保存] を選択します。
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
アラートの作成および管理
ユーザーは、設定された頻度でクエリを実行してメトリックとログを評価し、その結果に基づいてアラートを発行することができます。 詳細については、「Azure Monitor を使用してログ アラートを作成、表示、管理する」を参照してください。
Fabric ワークスペースとマネージド仮想ネットワーク
マネージド プライベート エンドポイントは、データ ソースとして Log Analytics をサポートしていないため、現状、マネージド仮想ネットワークでは、Azure Log Analytics を Spark のログとメトリックの送信先として選択することはできません。
使用可能な Apache Spark 構成
spark.synaspe.diagnostic.emitter.*プレフィックスを使用して Log Analytics 情報を構成する。
| コンフィギュレーション | 説明 |
|---|---|
spark.synapse.diagnostic.emitters |
必須。 診断エミッターのコンマ区切りの宛先名。 たとえば、 MyDest1、MyDest2。 |
spark.synapse.diagnostic.emitter.<destination>.type |
必須。 組み込みの変換先の種類。 Azure Log Analytics の宛先を有効にするには、このフィールドに AzureLogAnalytics を含める必要があります。 |
spark.synapse.diagnostic.emitter.<destination>.categories |
このフィールドは省略可能です。 コンマ区切りの選択されたログ カテゴリ。 使用可能な値には、 Log、 EventLog、 Metricsが含まれます。 設定しない場合、既定値 はすべての カテゴリです。 |
spark.synapse.diagnostic.emitter.<destination>.workspaceId |
必須。 対象の Log Analytics ワークスペース ID。 |
spark.synapse.diagnostic.emitter.<destination>.secret |
このフィールドは省略可能です。 ワークスペースの秘密コンテンツ。 |
spark.synapse.diagnostic.emitter.<destination>.secret.keyVault |
.secret が指定されていない場合は必須です。 シークレットが格納される Azure Key Vault URI。 |
park.synapse.diagnostic.emitter.<destination>.secret.keyVault.secretName |
.secret.keyVaultが指定されている場合は必須。 LA ワークスペース シークレットが格納されている 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と指定します。 |
spark.fabric.pools.skipStarterPools |
必須。 この Spark プロパティは、オンデマンドの Spark セッションを強制するために使用されます。 ライブラリをトリガーしてログとメトリックを出力するには、既定のプールを使用するときに値を true に設定する必要があります。 |
spark.synapse.logAnalytics.*プレフィックスを使用して Log Analytics 情報を構成する。
| 構成名 | 既定値 | 説明 |
|---|---|---|
spark.synapse.logAnalytics.enabled |
false | Spark アプリケーションに対して Log Analytics シンクを有効にするには、true を設定します。 それ以外の場合は false。 |
spark.synapse.logAnalytics.workspaceId |
- | 対象の Log Analytics ワークスペース ID。 |
spark.synapse.logAnalytics.secret |
- | 対象となる Log Analytics ワークスペースのシークレット。 |
spark.synapse.logAnalytics.keyVault.name |
- | Log Analytics ID とキーの Key Vault URI。 |
spark.synapse.logAnalytics.keyVault.key.workspaceId |
SparkLogAnalyticsWorkspaceId | Log Analytics ワークスペース ID 用の Key Vault シークレット名。 |
spark.synapse.logAnalytics.keyVault.key.secret |
スパークログアナリティクスシークレット | Log Analytics ワークスペースの Key Vault シークレット名。 |
spark.synapse.logAnalytics.uriSuffix |
ods.opinsights.azure.com | 対象の Log Analytics ワークスペースの URI サフィックス。 ご使用のワークスペースが Azure グローバルに存在しない場合は、対象のクラウドに従って URI サフィックスを更新する必要があります。 |
spark.synapse.logAnalytics.filter.eventName.match |
- | このフィールドは省略可能です。 コンマ区切りの Spark イベント名。収集するイベントを指定できます。 たとえば、 SparkListenerJobStart,SparkListenerJobEndと指定します。 |
spark.synapse.logAnalytics.filter.loggerName.match |
- | このフィールドは省略可能です。 コンマ区切りの log4j ロガー名。収集するログを指定できます。 たとえば、 org.apache.spark.SparkContext,org.example.Loggerと指定します。 |
spark.synapse.logAnalytics.filter.metricName.match |
- | このフィールドは省略可能です。 カンマ区切りの Spark メトリック名のサフィックスを指定すると、収集するメトリックを選択できます。 たとえば、 jvm.heap.usedと指定します。 |
spark.fabric.pools.skipStarterPools |
真実 | 必須。 この Spark プロパティは、オンデマンドの Spark セッションを強制するために使用されます。 |
注意
- 21Vianet が運用する Microsoft Azure の場合、
spark.synapse.logAnalytics.uriSuffixパラメーターはbe ods.opinsights.azure.cnする必要があります。 - Azure Government の場合、
spark.synapse.logAnalytics.uriSuffixパラメーターはods.opinsights.azure.usにしてください。 - Azure 以外のクラウドの場合、
spark.synapse.logAnalytics.keyVault.nameパラメーターは、Key Vault の完全修飾ドメイン名 (FQDN) である必要があります。 たとえば、AzureUSGovernment の場合はAZURE_KEY_VAULT_NAME.vault.usgovcloudapi.netです。
よく寄せられる質問
Log Analytics がログを受信しない、または Customer テーブルを生成しないのはなぜですか?
Log Analytics ワークスペースがログを受信していない場合、または Customer テーブルが生成されていない場合は、次の手順でトラブルシューティングを行ってください。
Log Analytics の構成を確認する: Spark アプリケーションで Log Analytics ワークスペース情報が正しく構成されていることを確認します。 構成を確認するには、Spark UI または Spark History Server に移動し、[環境] タブに移動し、[Spark のプロパティ] の設定を確認します。
アクセス許可の確認:
- Log Analytics に必要な書き込みアクセス許可があることを確認します。
- KeyVault が関係する場合は、KeyVault の読み取りアクセス許可が、関連するサービスまたはユーザーに適切に割り当てられていることを確認します。
データ制限の検査: 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 文字です。
Log Analytics のアクセス許可が正しく構成されていることを確認するにはどうすればよいですか?
Log Analytics がログを受信できることを確認するには、次のアクセス許可を確認します。
Log Analytics の書き込みアクセス許可:
- Azure portal にサインインし、Log Analytics ワークスペースに移動します。
- [アクセス制御 (IAM)]セクションで、ユーザー、サービス プリンシパル、またはアプリケーションに "Log Analytics 共同作成者" ロールまたは "共同作成者" ロールが割り当てられていることを確認します。
KeyVault の読み取りアクセス許可 (該当する場合):
- ログに KeyVault が含まれている場合は、KeyVault の "アクセス ポリシー" または "アクセス制御 (IAM)" セクションに移動します。
- 関連するユーザーまたはサービス プリンシパルに、"Key Vault 閲覧者" ロールなどの読み取りアクセス許可があることを確認します。 アクセス許可が正しく構成されていない場合は、Azure 管理者に連絡してロールの割り当てを調整し、アクセス許可が同期されるまで待ちます (これには数分かかる場合があります)。
これらの Spark プロパティを構成した後、Spark セッションの開始が遅くなるのはなぜですか。
これは、spark.fabric.pools.skipStarterPool: true を構成し、スターター プール (ライブ プールの種類) をスキップし、代わりにオンデマンド プールを使用して Spark セッションを開始したために発生します。 オンデマンド プールで Spark セッションを開始するには、通常、作成と初期化に約 3 分かかります。
その理由は、診断ライブラリでは、起動時に動的に作成されるため、Spark セッションの起動時に特定の構成をオンデマンド プールでのみサポートされるプロセスに適用する必要があるためです。 これに対し、ライブ プール セッションは事前に開始されており、初期化中にこれらの構成を適用することはできません。 Fabric Spark コンピューティングの詳細については、 データ エンジニアリングとデータ サイエンスに関する Apache Spark コンピューティングを参照してください。