DataCapture ポリシー

このページの内容は ApigeeApigee ハイブリッドに該当します。

Apigee Edge のドキュメントを表示する。

DataCapture アイコン

概要

DataCapture ポリシーは、アナリティクスで使用するために、API プロキシからデータ(ペイロード、HTTP ヘッダー、パスやクエリ パラメータなど)をキャプチャします。キャプチャしたデータをカスタム アナリティクス レポートで使用するだけでなく、収益化とモニタリングのルールを実装することもできます。

このポリシーは拡張可能なポリシーです。Apigee ライセンスによっては、このポリシーの使用によって費用や使用量に影響する場合があります。ポリシータイプと使用量への影響については、ポリシータイプをご覧ください。

データコレクタ リソース

DataCapture ポリシーを使用するには、まずデータコレクタ REST リソースを作成する必要があります。Apigee UI または Apigee API を使用してデータコレクタ リソースを作成する手順については、データコレクタの作成をご覧ください。

<DataCapture>

<DataCapture> 要素は DataCapture ポリシーを定義します。

<DataCapture async="true" continueOnError="true" enabled="true" name="DC">

ここで、DataCaptureポリシーの例を示します。

<DataCapture name="DC-1">
    <Capture>
        <DataCollector>dc_data_collector</DataCollector>
        <Collect ref="my_data_variable" />
    </Capture>
</DataCapture>

DataCapture ポリシーの主な要素は <Capture> 要素です。この要素は、データをキャプチャする方法を指定します。次の 2 つの必須の子要素があります。

この例では、別のプロキシで作成された my_data_variable という変数からデータが抽出されています。この変数は ref 属性によって指定します。

また、<Collect> 要素では、子要素を使用してさまざまなソースからデータをキャプチャする方法がいくつかあります。DataCapture ポリシーでデータをキャプチャするその他の例については、をご覧ください。

DataCapture 要素の構文は次のとおりです。

<DataCapture name="capturepayment" continueOnError="false" enabled="true"> 
  <DisplayName>Data-Capture-Policy-1</DisplayName>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <ThrowExceptionOnLimit>false</ThrowExceptionOnLimit>

  <!-- Existing Variable -->
  <Capture>
    <Collect ref="existing-variable" default="0"></Collect>
    <DataCollector>dc_1</DataCollector>
  </Capture>

  <!-- JSONPayload -->
  <Capture>
    <DataCollector>dc_2</DataCollector>
    <Collect default="0">
      <Source>request</Source>
      <JSONPayload>
        <JSONPath>result.var</JSONPath>
      </JSONPayload>
    </Collect>
  </Capture>

  <!-- URIPath -->
  <Capture>
    <DataCollector>dc_3</DataCollector>
    <Collect default="0">
      <URIPath>
        <!-- All patterns must specify a single variable to extract named $ -->
        <Pattern ignoreCase="false">/foo/{$}</Pattern>
        <Pattern ignoreCase="false">/foo/bar/{$}</Pattern>
      </URIPath>
    </Collect>
  </Capture>
</DataCapture>

この要素には、すべてのポリシーに共通する次の属性があります。

属性 デフォルト 必須かどうか 説明
name なし 必須

ポリシーの内部名。name 属性の値には、英字、数字、スペース、ハイフン、アンダースコア、ピリオドを使用できます。この値は 255 文字を超えることはできません。

管理 UI プロキシ エディタで <DisplayName> 要素を追加して、ポリシーのラベルに使用する別の自然言語名を指定することもできます。

continueOnError false 省略可 ポリシーが失敗したときにエラーを返す場合は、false に設定します。これは、ほとんどのポリシーで想定される動作です。ポリシーが失敗した後もフローの実行を続行する場合は、true に設定します。関連情報:
enabled true 省略可 ポリシーを適用するには、true に設定します。ポリシーを無効にするには、false に設定します。ポリシーがフローに接続されている場合でも適用されません。
async   false 非推奨 この属性は非推奨となりました。

次の表は、<DataCapture> の子要素の概要をまとめたものです。

子要素 必須 説明
<Capture> 必須 指定した変数のデータをキャプチャします。

次の例は、DataCapture ポリシーのさまざまな使用例を示しています。

組み込み変数のデータをキャプチャ

次のコードサンプルは、組み込み変数 message.content でデータを取得する方法を示しています。この変数には、リクエスト、レスポンス、エラー メッセージの内容が含まれています。組み込み変数の詳細については、フロー変数をご覧ください。

<DataCapture name="DC-FullMessage">
    <Capture>
        <DataCollector>dc_data_collector</DataCollector>
        <Collect ref="message.content" />
    </Capture>
</DataCapture>

上記のコードでは、</Collect> 要素の ref 属性によって、キャプチャする変数(この例では "message.content")を指定しています。

サンプルでは、<Capture> 要素を使用してデータをキャプチャしています。この要素には、データコレクタ リソースの名前を指定する <DataCollector> 要素も含まれています。

インラインでのデータのキャプチャ

次の例は、<Collect> 要素の子要素である <JSONPayload> を使用してインラインでデータをキャプチャする方法を示しています。

<DataCapture name="DC-Currency">
    <Capture>
        <DataCollector>dc_data_collector<DataCollector>
        <Collect>
            <JSONPayload>
                <JSONPath>$.results[0].currency</JSONPath>
            </JSONPayload>
        </Collect>
    </Capture>
</DataCapture>

上記のコードでは、次の処理を行います。

  • <JSONPayload> 要素は、変数の値を抽出する JSON 形式のメッセージを指定します。
  • <JSONPath> 要素には、メッセージから値を抽出するために使用される JSON パスを指定します。この場合は $.results[0].currency です。

実例として、ここでは、メッセージが受信されたときに抽出された値が 1120 だとします。アナリティクスに送信されるエントリは次のようになります

{
    "dc_data_collector": "1120"
}

<Capture>

<Capture> 要素は、データを取得する方法を指定します。

<Capture />

次の表は、<Capture> の子要素の概要をまとめたものです。

子要素 必須かどうか 説明
<DataCollector> 必須 データコレクタ リソースを指定します。
<Collect> 必須 データを取得する方法を指定します。

<DataCollector>

<DataCollector> 要素には、データコレクタ リソースを指定します。

<DataCollector>dc_data_collector</DataCollector>
次の表に、<DataCollector> 要素の属性を示します。
属性 説明 デフォルト 要否
スコープ

収益化変数をキャプチャする場合は、この属性を指定し、値を monetization に設定します。キャプチャできる収益化変数の詳細については、収益化データの取得をご覧ください。

なし 省略可 String

<DataCollector> 要素の本文には、データコレクタ リソース名が含まれます。

<Collect>

<Collect> 要素は、データを取得する手段を指定します。

<Collect ref="existing-variable" default="0"/>

次の表は、<Collect> 要素の属性を示したものです。

属性 説明 デフォルト 要否
ref

データをキャプチャする変数。

該当なし 省略可 -refが省略されている場合は、次のいずれか 1 つを指定する必要があります。QueryParamHeaderFormParamURIPathJSONPayloadXMLPayload 文字列
デフォルト 変数の値が実行時に入力されない場合にアナリティクスに送信される値を指定します。たとえば、default="0" を設定すると、アナリティクスに送信される値は 0 になります。 defaultの値や変数の値を指定しない場合、実行時に入力されません。アナリティクスに送信された値は、数値変数のnullまたは文字列変数の"Not set"になります。 必須 文字列

データは、ref 属性または<Collect> 子要素を使用して、既存の変数からキャプチャできます。

<Collect> の子要素

次の表は、<Collect> の子要素の概要をまとめたものです。

子要素 必須かどうか 説明
<Source> 省略可 解析する変数を指定します。
<URIPath> 省略可 request ソース メッセージの proxy.pathsuffix から値を抽出します。
<QueryParam> 省略可 request ソース メッセージの指定されたクエリ パラメータから値を抽出します。
<Header> 省略可 指定された request メッセージまたは response メッセージの指定された HTTP ヘッダーから値を抽出します。
<FormParam> 省略可 指定されたリクエストまたはレスポンスメッセージの指定されたフォーム パラメータから値を抽出します。
<JSONPayload> 省略可 変数の値を抽出する JSON 形式のメッセージを指定します。
<XMLPayload> 省略可 変数の値を抽出する XML 形式のメッセージを指定します。

<Source>

解析するメッセージの名前を指定する変数を指定します。<Source> の値がデフォルトの message に設定されます。message 値はコンテキストに依存します。リクエスト フローで、message がリクエスト メッセージに解決されます。レスポンス フローの中では、message はレスポンス メッセージになります。

<Source> で指定された変数を解決できない場合、またはメッセージ以外のタイプに解決される場合、ポリシーはレスポンスを返しません。

デフォルト値 なし
必須かどうか 省略可
文字列
親要素 <Collect>
子要素 なし
<Source >request</Source>

<URIPath>

request ソース メッセージの proxy.pathsuffix から値を抽出します。パターンに適用されるパスは proxy.pathsuffix で、API プロキシのベースパスは含まれません。ソース メッセージが response であるメッセージ タイプに解決された場合、要素は何もしません。

デフォルト値 なし
必須かどうか 省略可
複合施設
親要素 <Collect>
子要素 <Pattern>

属性

属性 説明 デフォルト 要否
ignoreCase パターンとのマッチングで大文字と小文字を区別しないように指定します。

いいえ

省略可 ブール値
<Collect>
    <URIPath>
        <Pattern ignoreCase="false">/foo/{$}</Pattern>
    </URIPath>
</Collect>

複数の <Pattern> 要素を使用できます。

<URIPath>
   <Pattern ignoreCase="false">/foo/{$}</Pattern>
   <Pattern ignoreCase="false">/foo/bar/{$}</Pattern>
</URIPath>

<QueryParam>

request ソース メッセージの指定されたクエリ パラメータから値を抽出します。ソース メッセージが response のメッセージ タイプに解決される場合、要素は何もしません。

デフォルト値 なし
必須かどうか 省略可
複合施設
親要素 <Collect>
子要素 <Pattern>

属性

属性 説明 デフォルト 要否
name クエリ パラメータの名前を指定します。複数のクエリ パラメータの名前が同じ場合、インデックス付きの参照を使用し、クエリ パラメータの最初のインスタンスはインデックスなし、2 番目は 2、3 番目は 3 のようにインデックスを追加します。

該当なし

必須 文字列
<Collect>
    <QueryParam name="code">
        <Pattern ignoreCase="true">{$}</Pattern>
    </QueryParam>
</Collect>

同じ名前のクエリ パラメータが複数ある場合は、インデックスを使用してパラメータを参照します。

<Collect>
    <QueryParam name="code.2">
        <Pattern ignoreCase="true">{$}</Pattern>
    </QueryParam>
</Collect>

注: {$} という名前の単一の変数を指定する必要があります。一意の Pattern 要素は複数指定できますが、最初に一致したパターンは特定のリクエストで解決されます。

<Header>

指定された request メッセージまたは response メッセージにある、指定された HTTP ヘッダーから値を抽出します。複数のヘッダーの名前が同じ場合、その値は配列に保存されます。

デフォルト値 なし
必須かどうか 省略可
複合施設
親要素 <Collect>
子要素 <Pattern>

属性

属性 説明 デフォルト 要否
name 値を抽出するヘッダーの名前を指定します。複数のヘッダーの名前が同じ場合、インデックス付きの参照を使用し、ヘッダーの最初のインスタンスはインデックスなし、2 番目は 2、3 番目は 3 のようにインデックスを追加します。配列内のすべてのヘッダーを取得するには、.values を使用します。

該当なし

必須 文字列
<Collect>
    <Header name="my_header">
        <Pattern ignoreCase="false">Bearer {$}</Pattern>
    </Header>
</Collect>

複数のヘッダーの名前が同じ場合、インデックスを使用して配列内の個々のヘッダーを参照します。

<Collect>
    <Header name="my_header.2">
        <Pattern ignoreCase="true">{$}</Pattern>
    </Header>
</Collect>

または次のようにして、配列内のすべてのヘッダーを一覧表示します。

<Collect>
    <Header name="my_header.values">
        <Pattern ignoreCase="true">{$}</Pattern>
    </Header>
</Collect>

<FormParam>

指定された request または response メッセージにある、指定されたフォーム パラメータから値を抽出します。フォーム パラメータは、指定されたメッセージの Content-Type ヘッダーが application/x-www-form-urlencoded の場合にのみ抽出できます。

デフォルト値 なし
必須かどうか 省略可
複合施設
親要素 <Collect>
子要素 <Pattern>

属性

属性 説明 デフォルト 要否
name 値を抽出するフォーム パラメータの名前。

該当なし

省略可 文字列
<Collect>
    <FormParam name="greeting">
        <Pattern>hello {$}</Pattern>
    </FormParam>
</Collect>

<JSONPayload>

変数の値を抽出する JSON 形式のメッセージを指定します。JSON 抽出は、メッセージの Content-Type ヘッダーが application/json の場合にのみ実行されます。

デフォルト値 なし
必須かどうか 省略可
複合施設
親要素 <Collect>
子要素 <JSONPath>
<Collect>
    <JSONPayload>
        <JSONPath>$.results[0].currency</JSONPath>
    </JSONPayload>
</Collect>

<JSONPath>

<JSONPayload> 要素の必須の子要素。JSON 形式のメッセージから値を抽出するために使用される、JSON パスを指定します。

デフォルト値 なし
必須かどうか 必須
文字列
親要素 <JSONPayload>
子要素 なし
<JSONPath>$.rss.channel.title</JSONPath>

<XMLPayload>

変数の値を抽出する XML 形式のメッセージを指定します。XML ペイロードは、メッセージの Content-Type ヘッダーがtext/xmlapplication/xml、または application/*+xml の場合にのみ抽出されます。

デフォルト値 なし
必須かどうか 省略可
複合施設
親要素 <Collect>
子要素 <Namespaces>
<XPath>

次の表は、<XMLPayload> の子要素の概要をまとめたものです。

子要素 必須かどうか 説明
<Namespaces> 省略可 XPath 評価で使用する 0 個以上の名前空間を指定します。
<XPath> 必須 変数に定義された XPath を指定します。
<Collect>
    <XMLPayload>
        <Namespaces>
            <Namespace prefix="soap">http://schemas.xmlsoap.org/soap/envelope/</Namespace>
            <Namespace prefix="ns1">http://ns1.example.com/operations</Namespace>
        </Namespaces>
        <!-- get the local name of the SOAP operation -->
        <XPath>local-name(/soap:Envelope/soap:Body/ns1:*[1])</XPath>
    </XMLPayload>
</Collect>

<Namespaces>

XPath 式で使用できる名前空間のセットを指定します。例

<Collect>
    <XMLPayload>
        <Namespaces>
            <Namespace prefix="maps">http://maps.example.com</Namespace>
            <Namespace prefix="places">http://places.example.com</Namespace>
        </Namespaces>
        <XPath>/maps:Directions/maps:route/maps:leg/maps:endpoint/places:name</XPath>
    </XMLPayload>
</Collect>

XPath 式で名前空間を使用しない場合は、次の例のように <Namespaces> 要素を省略またはコメントアウトできます。

<Collect>
    <XMLPayload>
        <!-- <Namespaces/> -->
        <XPath>/Directions/route/leg/name</XPath>
    </XMLPayload>
</Collect>

<Namespace>

XPath 式で使用する名前空間と対応する接頭辞を 1 つずつ指定します。例

デフォルト値 なし
必須かどうか 省略可
文字列
親要素 <Namespaces>
子要素 なし

属性

属性 説明 デフォルト 要否 タイプ
prefix

xpath 式で名前空間を参照するために使用される接頭辞。 この接頭辞は、元の XML ドキュメントで使用されている接頭辞と同じにする必要はありません。

該当なし

必須 文字列
<Collect>
    <XMLPayload>
        <Namespaces>
            <Namespace prefix="maps">http://maps.example.com</Namespace>
        </Namespaces>
        <XPath>/maps:Directions/maps:route/maps:leg/maps:endpoint</XPath>
    </XMLPayload>
</Collect>

<XPath>

XMLPayload 要素の必須子要素。変数に定義された XPath を指定します。XPath 1.0 式のみがサポートされています。

デフォルト値 なし
必須かどうか 必須
文字列
親要素 <XMLPayload>
子要素 なし
   <XPath>/test/example</XPath>

注: XPath 式で名前空間を使用する場合、ポリシーの <XMLPayload><Namespaces> セクションで名前空間を宣言する必要があります。

<ThrowExceptionOnLimit>

<ThrowExceptionOnLimit> 要素は、変数のキャプチャ上限または変数の最大サイズに達した場合の動作を指定します。キャプチャ上限の適用をご覧ください。

<ThrowExceptionOnLimit> の値は、次のいずれかです。

  • false: 変数のデータはアナリティクスに送信されます。
  • true: エラー メッセージが返されます。データはアナリティクスに送信されません

エラー リファレンス

ランタイム エラー

次の表では、ポリシーの実行時に発生する可能性のあるランタイム エラーについて説明します。

障害コード 原因
DataCollectorTypeMismatch

取得する値が DataCollector のタイプと一致しませんでした。

ExtractionFailure データを抽出できませんでした。
UnresolvedVariable 変数が存在しません。
VariableCountLimitExceeded 取得された変数の数が、変数数の上限の 100 個を超えています
VariableValueLimitExceeded 取得された値のサイズが 1 つの変数の上限(400 バイト)を超えています。
MsgContentParsingFailed メッセージの内容を XML または JSON に解析できませんでした。
InvalidMsgContentType メッセージ コンテンツ タイプが、ポリシー キャプチャ句内の想定されるメッセージ コンテンツ タイプと一致しません。
NonMsgVariable <Source> 要素の値がメッセージ変数を参照していません。
JSONPathQueryFailed JSONPath クエリが値を解決できませんでした。
PrivateVariableAccess 限定公開変数にアクセスできませんでした。
XPathEvaluationFailed XPath は値を解決できませんでした。

ランタイム エラーは次の 2 つの方法で返されます。

  • クライアントへのエラー レスポンス(continueOnError=false

    ポリシーの continueOnError 属性が false に設定されている場合、ポリシー実行中に発生したエラーはメッセージ処理を中止し、わかりやすいエラー メッセージを返します。ポリシーを使用して、メッセージを返す前にデータ キャプチャ ポリシーに関連するすべてのエラーをキャプチャしようとします。

  • DataCapture エラー分析項目

    dataCapturePolicyErrors フィールドには、発生したすべてのエラーの一覧が含まれています。分析データマップでの表示例を次に示します。

    # Example payload
    [
         {
             errorType: TypeMismatch,
             policyName: MyDataCapturePolicy-1,
             dataCollector: purchaseValue
         },
         {
             errorType: MaxValueSizeLimitReached,
             policyName: MyDataCapturePolicy-1,
             dataCollector: purchasedItems
         },
    ]

このフィールドには、400 バイトの変数サイズの上限が適用されます。

デプロイエラー

障害コード 原因
DeploymentAssertionError ポリシーで参照されている Data Collector が、デプロイ時に組織内で見つかりませんでした。
JsonPathCompilationFailed 指定された JSONPath のコンパイルに失敗しました。
XPathCompilationFailed XPath 要素で使用される接頭辞や値がポリシー内の宣言された名前空間の一部でない場合、API プロキシのデプロイは失敗します。
PatternCompilationFailed パターンのコンパイルに失敗しました。

デバッグツールで DataCaptureDataCapture エラーを検出する

dataCapturePolicyErrors 変数はデバッグツールで使用できます。これは、アナリティクスにアクセスせずにエラーを検出するためのツールです。たとえば、ハイブリッド ランタイムのバージョンをアップグレードし、すでにデプロイされているプロキシで分析が意図せず中断すると、発生するエラーを検出できます。

キャプチャ上限の適用

Apigee では、キャプチャされたデータの変数に次の上限が適用されます。

  • 変数の数は 最大で100 です。
  • 各変数(リスト値を含む)の最大サイズは 400 バイトです。

データ キャプチャ ポリシーが実行された場合は、メッセージ コンテキストのデータ キャプチャ マップに値が追加される前に、次の処理が行われます。

  • 変数の数が上限に達すると、新しい変数は破棄されます。
  • 変数のサイズの上限に達すると、値は該当する上限に合わせてカットされます。

どちらの場合も、次のようになります。

  • デバッグ メッセージが Message Processor のログに記録されます。
  • limit reached エラー メッセージが dataCapturePolicyErrors に追加されます。これは、アナリティクスとデバッグの両方で利用できます。注: 許容される変数の最大数に達した場合、エラー メッセージが 1 つのみ追加されます。
  • <ThrowExceptionOnLimit> が true の場合、データはアナリティクスに送信されず、クライアントにエラーが返されます。

関連トピック