次の方法で共有


イベント トレース

この記事では、Microsoft Dynamics 365 Fraud Protection でイベント トレースを使用する方法について説明します。

Microsoft Dynamics 365 Fraud Protection のイベント トレース機能を使用すると、ポータルの外部で拡張可能で運用可能なリアルタイムテレメトリ プラットフォームを確立できます。 各イベントは、ユーザー レベルまたはシステム レベルのアクションによってスケジュールまたはトリガーされます。 関心のあるイベントをサブスクライブし、イベント ペイロードを Azure Event Hubs または Azure Blob Storage に転送できます。 同時に複数のイベント トレース セッションからイベントを要求することもできます。 その後、システムは時系列でイベントを配信します。

イベントを集計して使用して、サービスのコストと使用状況を監視および管理するために使用できるメトリックを定義できます。 イベントは、トランザクション データを使用するカスタム レポートの開発や、不正アクセス防止ポータルで実行されたアクション ("ユーザー A 編集リスト B on date C" など) のシステム ログをメインするためにも使用できます。 Microsoft Power Automate と Azure Logic Apps で使用できる Azure Event Hubs コネクタを使用する場合は、アラートや高度にカスタマイズされたワークフローのために Azure Event Hubs に送信するデータを使用することもできます。 同様に、Azure Blob Storage では、すべての履歴データをコールド ストレージ アカウントにコピーしてさらに分析する新しいサブスクリプションを作成できます。

Fraud Protection インスタンスに複数の環境がある場合は、環境スイッチャーを使用して、各環境のイベント トレースを見つけることができます。 環境に子環境がある場合、親環境に対してサブスクライブされているイベント トレースには、すべての子環境に対して同じイベントが自動的に含まれます。

Note

イベント追跡のお客様は、Event Hub や Blob Storage などの追加の Azure サービスへのサブスクリプションを持っている必要があります。 詳細については、Microsoft アカウントの役員にお問い合わせください。 Azure 全体管理者の資格情報がある場合は、Azure portal にサインインして、使用可能なサブスクリプションを確認します。

作業の開始

イベント トレース機能の使用を開始するには、次の手順に従います。

  1. 不正アクセス防止ポータルで、[データ] を選択し、[イベント トレース] を選択します

  2. [新しいサブスクリプション] を選択 します

  3. サブスクリプションの表示名を入力します。

  4. ストレージの場所を選択します。

    1. Event Hubs の場合: Azure Key Vault の Event Hubs インスタンスの接続文字列を入力します。 Azure Key Vault は、Fraud Protection サブスクリプションと同じテナントに存在する必要があります。 不正アクセス防止アプリへのシークレット アクセス権を Azure Key Vault に付与します。 不正アクセス防止ポータルで、Azure Key Vault のシークレット識別子 URL を入力します。 詳細については、「Event Hubs の接続文字列の取得」を参照してください。
    2. Blob Storage の場合: Azure Key Vault の Azure Blob Storage アカウントの接続文字列を入力します。 Azure Key Vault は、Fraud Protection サブスクリプションと同じテナントに存在する必要があります。 不正アクセス防止アプリへのシークレット アクセス権を Azure Key Vault に付与します。 Fraud Protection ポータルで、Azure Key Vault のシークレット識別子 URL と、イベント トレース データが存在するコンテナー名を入力します。 詳細については、「アカウント アクセス キーの表示」を参照してください
  5. [接続テスト] を選択します。 接続が正常にテストされると、Azure Key Vault の接続文字列から抽出されたアカウント関連の情報が表示されます。 Azure Event Hubs の場合、この読み取り専用情報には、Event Hub 名前空間とイベント ハブ名が含まれます Azure Blob Storage の場合、 ストレージ アカウント名 が表示されます。 この情報が、使用するストレージ アカウントと一致することを確認します。 接続テストに成功しないと、[作成] ボタンは有効になりません。

  6. イベントを選択し、JSON ペイロードの説明とサンプルを確認します。 次に、[作成] を選択してサブスクリプションを保存します。 イベントは、その時点から Event Hubs インスタンスに瞬時に送信されます。 Blob Storage を選択した場合、すべての履歴データを書き込むコピー プロセスが開始され、すべてのイベントが 30 分ごとにコンテナーに発行されます。

  7. Fraud Protection ポータルに戻り、イベント/時間メトリックの数を表示し、データが Event Hubs と Blob Storage に送信されていることを確認します。 イベント/時間失敗/時間のメトリックは、過去 24 時間の平均を示します。

    ヒント

    Event Hubs の追加の監視については、Azure portal に移動し、メトリックを設定します。 詳細については、Azure Monitor の Azure Event Hubs メトリックを参照してください

  8. 省略可能: Event Hubs から Power BI への独自のイングレス パイプラインを設定します。 カスタム レポートの開発を開始する方法については、「Power BI の使用」を参照してください

  9. 省略可能: Power Automate から Event Hubs に接続して、カスタム ワークフローを定義します。 詳細については、「Logic Apps または Power Automate の操作」を参照してください

イベント スキーマ

現在、イベント トレースでは、トランザクション イベント、トレース イベント、評価イベント、監査イベント、監視イベントの 5 つの分類がサポートされています。

トランザクション イベント

トランザクション イベントを使用して、評価 API 呼び出しと非評価 API 呼び出しで使用可能なデータを使用して、カスタム スコア、カード、自動化されたワークフローを作成します。 BLOB ストレージを使用して、履歴 API 呼び出しからデータをコピーして、ビジネス用のデータ ウェアハウスを作成することもできます。 このイベントのペイロードには、各 API 呼び出しの要求と応答全体が含まれます。

名前空間: FraudProtection.Observe。<API 名> または FraudProtection.Assessment。<API 名>
{
    "uniqueId": "unique event id and used to deduplicate events",
    "request": {
        //API request payload
    },
    "response": {
        //API response payload
    },
    "name": "FraudProtection.Observe.AccountLabel",
    "version": "1.0",
    "metadata": {
        "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "timestamp": "2020-09-25T03:46:53.3716978Z"
    }
}

トレース イベント

トレース イベントを使用して、Trace() 戻り値の型を含むすべてのルールのパフォーマンスを報告および監視します。 このイベントのペイロードには、イベントをトリガーしたルールの名前、そのルールの評価の種類に関連付けられるイベントの種類、関連付け ID など、標準化されたフィールドが含まれます。その後、Trace() の戻り値の型でキーと値のペアを使用してカスタム属性を送信し、サンプル ペイロードの変数、リスク スコア、およびカスタム フィールドを含めることができます。 ルールで Trace() を使用してこれらのイベントをトリガーする方法の詳細については、「ルール言語ガイド」の「Observation 関数」を参照してください

名前空間: FraudProtection.Trace.Rule。
{
    "name": "FraudProtection.Trace.Rule",
    "version": "1.0",
    "metadata":
{
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "timestamp": "2020-06-10T23:43:33.4526859Z" 
}
    "ruleName": "Risk Score Policy",
    "eventType": "Purchase",
    "correlationId": "aaaa0000-bb11-2222-33cc-444444dddddd",
    "eventId": "e75e703c-1e54-4d41-af4b-a4c1b8866f02",
    "attributes":
{
      "example": "ManualReview” //key:value pairs defined in the Trace() return type
} 

    }

評価イベント

評価イベントと関連するラベルイベントと観測イベントは、イベント ハブと BLOB にトレースできます。

名前空間: FraudProtection.Assessments。
{
    "request": "",
    "response": "",
    "eventId": "uniqueId",
    "assessmentApiName": "<your assessment api name>",
    "assessmentName": "<your assessment name>"
}
名前空間: FraudProtection.CaseManagement.Events。

ケース管理の意思決定の状態と、ケース管理から作成されたラベル。

{
	"name": "FraudProtection.CaseManagement.Events",
	"version": "1.0",
	"metadata": {
		"tenantId": "<your tenantID>",
		"timestamp": "2020-09-25T03:46:53.3716978Z"
	},
	"assessmentId": "<your assessment uniqueId>",
	"assessmentName": "<your assessment name>",
	"caseId": "uniqueId of the case record",
	"queueId": "uniqueId of the queue the case was routed to",
	"queueName": "name of the queue the case was routed to",
	"eventType": "<your assessment uniqueId>",
	"eventId": "<your assessment transaction uniqueId>",
	"creationDate": "creation datetime",
	"reviewStartDate": "review start datetime",
	"reviewedDate": "reviewed datetime",
	"decision": "decision of the review agent",
	"reason": "decision reason",
	"reasonNote": "decision note",
	"agentId": "uniqueId of the review agent",
	"agentName": "name of the review agent",
	"status": "status of the decision",
	"fraudFlag": "fraud flag (label) of the decision"
}
名前空間: FraudProtection.Observations。
{
    "request": "",
    "primaryEventId": "<assessment event id>",
    "observationApiName": "<your observation api name>",
    "observationName": "<your observation name>",
    "observationEventId": "<your observation event id>",
    "assessmentApiName": "<your assessment api name>",
    "assessmentName": "<your assessment name>"
}
名前空間: FraudProtection.Labels。
{
    "request": "",
    "labelEventId": "",
    "assessmentApiName": "<your assessment api name>",
    "assessmentName": "<your assessment name>"
}

イベントを監査する

監査イベントを使用して、ポータルのアクションを追跡し、監査ログを作成します。 監査イベントは現在、ルール、リスト、ベロシティ、および外部呼び出しに対する新規/編集/削除操作をサポートしています。

名前空間: FraudProtection.Audit。
"audit": {
    "entityId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
    "entityName": "Manual Review Rule",
    "entityType": "Rule",
    "operationName": "NewRule",
    "userId": "user@contoso.com"
},
"name": "FraudProtection.Audit",
"version": "1.0",
"metadata": {
    "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
    "timestamp": "2020-06-10T23:43:33.4526859Z"
}

監査ログ アクセス

監査ログにアクセスするには、2 つの方法があります。 イベント トレースを設定することも、カスタマー サポート チケットを作成して自動生成された監査ログの送信を要求することもできます。 イベント トレースを使用せず、代わりにサポート チケットを送信する場合、サポート チケットは Fraud Protection エンジニアリング チームにルーティングされます。 チームはログを抽出し、それらを返します。 監査ログは、環境をプロビジョニングするのと同じ geo にキャプチャされ、格納されます。 ログをキャプチャした後は編集できません。ログの保持期間は 365 日です。 365 日より前のログは自動的に削除されます。

監査ログを使用して追跡できる 5 つのイベントが生成されます。 これらのイベントは次のとおりです。

  • ユーザーは、初めて不正アクセス防止ロールに割り当てられます。
  • 既存のユーザーのロールが更新されます。
  • 特定のユーザーのすべてのロールの割り当てが削除されます。
  • ユーザーが FCRA の同意を受け入れます。
  • ユーザーがトランザクション受け入れブースター (TAB) 設定を更新します。 これらの設定を変更すると、更新プログラムと見なされます。

アクティビティ ログ イベント

アクティビティ ログ イベントを使用して、不正アクセス防止の一部のアクションについて、誰が何を、いつ、どこで実行したかの詳細なレコードを取得します。 たとえば、ルールの最後の変更を行ったユーザーを確認できます。 結果はアクティビティ ログの検索結果と一致します。

名前空間: FraudProtection.ActivityLog。
{
"eventId": "0c6e1948-75a9-4513-bb4c-4828c9a8ab05",
"operationType": "Create",
"resourceType": "Decision rule",
"resourceId": "a0a0a0a0-bbbb-cccc-dddd-e1e1e1e1e1e1",
"resourceName": "Rule Test",
"userId": "11bb11bb-cc22-dd33-ee44-55ff55ff55ff"
}

"userID" の後に、操作と特定のリソースの種類のフィールドが続きます。

イベントの監視

不正アクセス防止ポータルで使用可能なレポートを使用して、API と外部呼び出しのパフォーマンスに関するカスタム レポートとアラートの監視イベントを使用できます。 以下の各イベントは、各サービスの待機時間とエラーに関する分析情報を提供します。

名前空間: FraudProtection.Monitoring.RequestLatencyMsDistribution。

API 呼び出しの場合、要求数と待機時間の分布 (ミリ秒) は、このイベントで 20 秒ごとに送信されます。 これらのイベントには、必要に応じてメトリックをフィルター処理するために使用できる集計期間とディメンションの名前と値を決定する startTime フィールドと endTime フィールドが含まれます。


{
"Index": [
             1
],
"BucketSamples": [
             2
],
"NumberOfBuckets": 10000,
"BucketSize": 10,
"MinimumValue": 0,
"CounterName": "RequestLatencyMsDistribution",
"DimensionNames": [
   "EnvironmentId",
   "TenantId",
   "ApiName",
   "ExperienceType",
   "IsTestRequest",
   "RequestType",
   "HttpRequestStatus",
   "HttpStatusCode"
],
"DimensionValues": [
   "aaaabbbb-0000-cccc-1111-dddd2222eeee",
   "aaaabbbb-0000-cccc-1111-dddd2222eeee",
   "v1.0/Observe/Create",
   "N/A",
   "False",
   "REALTIME",
   "Success",
   "200"
],
"StartTime": "2020-06-22T23:43:20",
"EndTime": "2020-06-22T23:43:40",
"Samples": 2,
"Min": 3,
"Max": 7,
"name": "FraudProtection.Monitoring.RequestLatencyMsDistribution",
"version": "1.0",
"metadata": {
   "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
   "timestamp": "2020-06-22T23:43:20.0947542Z"
}
}

Samples フィールドは、API ごとの要求数を表します。

名前空間: FraudProtection.Monitoring.ExternalCalls

このイベントには、ルールからトリガーされる外部呼び出しドキュメント>への各外部呼び出し<リンクの待機時間 (ミリ秒) と HTTP 状態コードが含まれます。 呼び出しをトリガーするルールと句の追加ディメンションも提供されます。

外部呼び出しの場合、待機時間 (ミリ秒) と http 状態コードのメトリックは、このイベントの各要求と共に送信されます。 個々の呼び出しのパフォーマンスの調査に関心がある場合は、トラブルシューティング エクスペリエンスを向上させるために、呼び出しをトリガーするルールの追加ディメンションも用意されています。


{
    "name": "FraudProtection.Monitoring.ExternalCalls",
    "version": "1.0",
    "metadata": {
        "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "timestamp": "2020-06-10T23:43:33.4526859Z"
    },
    "externalCallName": "SampleExternalCall",
    "requestStatus": "Success",
    "httpStatusCode": 200,
    "correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
    "latencyMs": 123,
    "assessment": "PURCHASE",
    "rule": "SampleRule",
    "clause": "SampleClause"
}

名前空間: FraudProtection.Errors.ExternalCalls

このイベントは、失敗した外部呼び出しごとにエラーを記録し、外部呼び出しのパフォーマンスで発生する可能性がある問題をデバッグするのに役立ちます。 呼び出しの完全な要求と応答、および呼び出しがトリガーされた待機時間と規則と句がログに記録されます。


{
    "name": "FraudProtection.Errors.ExternalCalls",
    "version": "1.0",
    "metadata": {
        "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "timestamp": "2020-06-10T23:43:33.4526859Z"
    },
    "externalCallName": "SampleExternalCall",
    "requestStatus": "ResponseFailure",
    "httpStatusCode": 404,
    "correlationId": "bbbb1111-cc22-3333-44dd-555555eeeeee",
    "latencyMs": 123,
    "assessment": "PURCHASE",
    "rule": "SampleRule",
    "clause": "SampleClause",
    "response": "{}",
    "requestUri": "https://samplewebsite/sample",
    "requestBody": "{}"
}