データ共有の監査と監視

この記事では、データ プロバイダーと受信者が監査ログを使用して、Delta Sharing イベントを監視する方法について説明します。 プロバイダー監査ログには、プロバイダーによって実行されたアクションと、プロバイダーの共有データに対して受信者が実行したアクションが記録されます。 受信者監査ログには、共有へのアクセスとプロバイダー オブジェクトの管理に関連するイベントが記録されます。

Delta Sharing 監査ログ イベントの一覧を表示するには、「Delta Sharing イベント」を参照してください。

要件

監査ログにアクセスするには、Azure Databricks アカウントの監査ログ システム テーブルをアカウント管理者が有効にする必要があります。 「システム テーブルを有効にする」を参照してください。 監査ログ システム テーブルの詳細については、監査ログ システム テーブルのリファレンス記事を参照してください。

アカウント管理者でもメタストア管理者でもない場合、監査ログを読むため、system.access.audit へのアクセス権が付与される必要があります。

監査ログで Delta Sharing のイベントを見る

アカウントでシステム テーブルが有効になっている場合、監査ログは system.access.audit に格納されます。 あるいは、お使いのアカウントに監査ログ配信の設定がある場合、ログが配信されるバケットとパスを知っている必要があります。

ログに記録されたイベント

Delta Sharing 監査ログ イベントの一覧を表示するには、「Delta Sharing イベント」を参照してください。

受信者のクエリ結果の詳細を表示する

プロバイダー ログでは、データ受信者のクエリが応答を取得した後に、イベントが deltaSharingQueriedTableChanges として返され、deltaSharingQueriedTable がログに記録されます。 プロバイダーは、これらのログの response.result フィールドを表示して、受信者と共有された内容の詳細を表示できます。 フィールドには次のいずれかの値を含めることができます。 このリストは全てを網羅しているわけではありません。

"checkpointBytes": "0",
"earlyTermination": "false",
"maxRemoveFiles": "0",
"path": "file: example/s3/path/golden/snapshot-data0/_delta_log",
"deltaSharingPartitionFilteringAccessed": "false",
"deltaSharingRecipientId": "<redacted>",
"deltaSharingRecipientIdHash": "<recipient-hash-id>",
"jsonLogFileNum": "1",
"scannedJsonLogActionNum": "5",
"numRecords": "3",
"deltaSharingRecipientMetastoreId": "<redacted>",
"userAgent": "Delta-Sharing-Unity-Catalog-Databricks-Auth/1.0 Linux/4.15.0-2068-azure-fips OpenJDK_64-Bit_Server_VM/11.0.7+10-jvmci-20.1-b02 java/11.0.7 scala/2.12.15 java_vendor/GraalVM_Community",
"jsonLogFileBytes": "2846",
"checkpointFileNum": "0",
"metastoreId": "<redacted>",
"limitHint": "Some(1)",
"tableName": "cookie_ingredients",
"tableId": "1234567c-6d8b-45fd-9565-32e9fc23f8f3",
"activeAddFiles": "2", // number of AddFiles returned in the query
"numAddFiles": "2", // number of AddFiles returned in the query
"numAddCDCFiles": "2", // number of AddFiles returned in the CDF query
"numRemoveFiles": "2", // number of RemoveFiles returned in the query
"numSeenAddFiles": "3",
"scannedAddFileSize": "1300", // file size in bytes for the AddFile returned in the query
"scannedAddCDCFileSize": "1300", // file size in bytes for the AddCDCFile returned in the CDF query
"scannedRemoveFileSize": "1300", // file size in bytes for the RemoveFile returned in the query
"scannedCheckpointActionNum": "0",
"tableVersion": "0"

ログに記録されたエラー

試行された Delta Sharing アクションが失敗した場合、アクションはログの response.error_message フィールドにエラー メッセージと共に記録されます。 <> の文字間の項目はプレースホルダー テキストを表します。

プロバイダー ログのエラー メッセージ

Delta Sharing では、データ プロバイダーに関する次のエラーがログに記録されます。

  • 選択したメタストアで Delta Sharing が有効になっていません。

    DatabricksServiceException: FEATURE_DISABLED:
    Delta Sharing is not enabled
    
  • 存在しないカタログで操作を実行しようとしました。

    DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
    Catalog ‘<catalog>’ does not exist.
    
  • アカウント管理者またはメタストア管理者ではないユーザーが権限が必要な操作を実行しようとしました。

    DatabricksServiceException: PERMISSION_DENIED:
    Only administrators can <operation-name> <operation-target>
    
  • メタストアが割り当てられていないワークスペースからメタストアに操作を実行しようとしました。

    DatabricksServiceException: INVALID_STATE:
    Workspace <workspace-name> is no longer assigned to this metastore
    
  • 要求に受信者名または共有名がありませんでした。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name>
    
  • 要求に無効な受信者名または共有名が含まれていました。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare <recipient-name>/<share-name> is not a valid name
    
  • ユーザーが Unity Catalog メタストアにないテーブルを共有しようとしました。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share
    
  • すでにローテーションした状態にあり、以前のトークンの期限がまだ切れていない受信者をユーザーがローテーションしようとしました。

    DatabricksServiceException: INVALID_PARAMETER_VALUE: There are already two active tokens for recipient <recipient-name>
    
  • ユーザーが既存のものと同じ名前で新しい受信者または共有を作成しようとしました。

    DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists`
    
  • ユーザーが存在しない受信者または共有に対して操作を実行しようとしました。

    DatabricksServiceException: RECIPIENT_DOES_NOT_EXIST/SHARE_DOES_NOT_EXIST: Recipient/Share '<name>' does not exist
    
  • ユーザーがテーブルを共有に追加しようとしましたが、そのテーブルはすでに追加されています。

    DatabricksServiceException: RESOURCE_ALREADY_EXISTS: Shared Table '<name>' already exists
    
  • ユーザーが存在しないテーブルを参照する操作を実行しようとしました。

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist
    
  • ユーザーが存在しないテーブルを参照する操作を実行しようとしました。

    DatabricksServiceException: SCHEMA_DOES_NOT_EXIST: Schema '<name>' does not exist
    
  • ユーザーが存在しない共有にアクセスしようとしました。

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    

受信者ログのエラー メッセージ

Delta Sharing では、データ 受信者に関する次のエラーがログに記録されます。

  • ユーザーがアクセス許可のない共有にアクセスしようとしました。

    DatabricksServiceException: PERMISSION_DENIED:
    User does not have SELECT on Share <share-name>
    
  • ユーザーが存在しない共有にアクセスしようとしました。

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    
  • ユーザーが、共有に存在しないテーブルにアクセスしようとしました。

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: <table-name> does not exist.