이 페이지는 Apigee 및 Apigee Hybrid에 적용됩니다.
Apigee Edge 문서를 보세요.
개요
DataCapture 정책은 분석에 사용할 API 프록시에서 데이터(예: 페이로드, HTTP 헤더, 경로 또는 쿼리 매개변수)를 캡처합니다. 커스텀 애널리틱스 보고서에서 캡처된 데이터를 사용할 수 있을 뿐만 아니라 수익 창출 및 모니터링 규칙을 구현할 수 있습니다.
이 정책은 확장 가능한 정책이며, 이 정책을 사용하면 Apigee 라이선스에 따라 비용 또는 사용률이 영향을 받을 수 있습니다. 정책 유형 및 사용 영향에 대한 자세한 내용은 정책 유형을 참조하세요.
데이터 수집기 리소스
DataCapture
정책을 사용하려면 먼저 데이터 수집기 리소스를 만들어야 합니다. 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>
요소이며 이 요소에서 데이터 캡처 방법을 지정합니다. 여기에는 두 가지 필수 하위 요소가 있습니다.
- 데이터 수집기 REST 리소스를 지정하는
<DataCollector>
요소. 이 경우 리소스 이름은dc_data_collector
입니다. - 데이터 캡처 방법을 지정하는
<Collect>
요소
이 간단한 예시에서는 데이터가 프록시의 다른 곳에서 생성된 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 |
해당 없음 | 필수 |
정책의 내부 이름입니다. 원하는 경우 |
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"
입니다.
이 샘플에서는 데이터 수집기 리소스 이름을 지정하는 <DataCollector>
요소도 포함된 <Capture>
요소를 사용하여 데이터를 캡처합니다.
데이터 인라인 캡처
다음 예시에서는 <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>
요소 속성을 설명합니다.
속성 | 설명 | 기본값 | 필수 여부 | 유형 |
---|---|---|---|---|
범위 |
수익 창출 변수를 캡처하려면 이 속성을 지정하고 값을 |
해당 사항 없음 | 선택사항 | 문자열 |
<DataCollector>
요소 본문에는 데이터 수집기 리소스 이름이 포함됩니다.
<Collect>
<Collect>
요소는 데이터 캡처 방법을 지정합니다.
<Collect ref="existing-variable" default="0"/>
다음 표에서는 <Collect>
요소 속성을 설명합니다.
속성 | 설명 | 기본값 | 필수 여부 | 유형 |
---|---|---|---|---|
ref |
데이터를 캡처하는 변수입니다. |
해당 사항 없음 | 선택사항—ref 를 생략하면 QueryParam , Header , FormParam , URIPath , JSONPayload 또는 XMLPayload 중 하나를 정확하게 지정해야 합니다.
|
문자열 |
기본값 | 런타임 시 변수 값이 채워지지 않으면 애널리틱스로 전송되는 값을 지정합니다. 예를 들어 default="0" 을 설정하면 애널리틱스에 전송된 값은 0이 됩니다.
|
default 값을 지정하지 않고 런타임 시 변수 값이 채워지지 않으면 애널리틱스로 전송된 값은 숫자 변수의 경우 null , 문자열 변수의 경우 "Not set" 이 됩니다.
|
필수 | 문자열 |
ref
속성이나 하위 요소 <Collect>
를 사용하여 기존 변수에서 데이터를 캡처할 수 있습니다.
<Collect>
하위 요소
다음 표에서는 <Collect>
하위 요소를 간략하게 설명합니다.
하위 요소 | 필수 여부 | 설명 |
---|---|---|
<Source> |
선택사항 | 파싱할 변수를 지정합니다. |
<URIPath> |
선택사항 | 요청 소스 메시지의 proxy.pathsuffix 에서 값을 추출합니다. |
<QueryParam> |
선택사항 | 요청 소스 메시지의 지정된 쿼리 매개변수에서 값을 추출합니다. |
<Header> |
선택사항 | 지정된 요청 또는 응답 메시지의 지정된 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 | 패턴이 일치할 경우 대소문자를 무시하도록 지정합니다. |
false |
선택사항 | 불리언 |
<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, 세 번째는 색인 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, 세 번째는 색인 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/xml
, application/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 표현식 내에서 사용할 하나의 네임스페이스와 해당 프리픽스를 지정합니다. 예시는 다음과 같습니다.
기본값 | 해당 사항 없음 |
필수 여부 | 선택사항 |
유형 | 문자열 |
상위 요소 |
<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 |
캡처할 값이 |
ExtractionFailure |
데이터 추출이 실패했습니다. |
UnresolvedVariable |
변수가 없습니다. |
VariableCountLimitExceeded |
캡처된 변수 개수가 변수 개수 한도인 100개를 초과했습니다. |
VariableValueLimitExceeded |
캡처된 값의 크기가 단일 변수 한도인 400바이트를 초과했습니다. |
MsgContentParsingFailed |
메시지 콘텐츠를 XML 또는 JSON으로 파싱할 수 없습니다. |
InvalidMsgContentType |
메시지 콘텐츠 유형이 정책 캡처 절의 예상 메시지 콘텐츠 유형과 일치하지 않습니다. |
NonMsgVariable |
<Source> 요소 값이 메시지 변수를 참조하지 않았습니다. |
JSONPathQueryFailed |
JSONPath 쿼리를 값으로 확인할 수 없습니다. |
PrivateVariableAccess |
비공개 변수에 액세스를 시도하지 못했습니다. |
XPathEvaluationFailed |
XPath 를 값으로 확인할 수 없습니다. |
런타임 오류는 두 가지 방식으로 반환됩니다.
- 클라이언트로 다시 응답 오류(
continueOnError=false
)정책의
continueOnError
속성이false
로 설정된 경우 정책 실행 중에 오류가 발생하면 메시지 처리가 중단되고 설명이 있는 오류 메시지가 반환됩니다. 정책은 메시지를 반환하기 전에 데이터 캡처 정책에서 관련된 모든 오류를 캡처하려고 합니다. DataCapture
오류 분석 필드dataCapturePolicyErrors
필드에는 발생한 모든 오류의 목록이 포함됩니다. 다음 예시에서는 분석 데이터 맵에 어떻게 표시되는지 보여줍니다.# Example payload [ { errorType: TypeMismatch, policyName: MyDataCapturePolicy-1, dataCollector: purchaseValue }, { errorType: MaxValueSizeLimitReached, policyName: MyDataCapturePolicy-1, dataCollector: purchasedItems }, ]
이 필드에는 400바이트 변수 크기 제한이 적용됩니다.
배포 오류
오류 코드 | 원인 |
---|---|
DeploymentAssertionError |
배포 중에 정책에서 참조된 DataCollector를 조직에서 찾을 수 없습니다. |
JsonPathCompilationFailed |
지정된 JSONPath 로 컴파일할 수 없습니다. |
XPathCompilationFailed |
XPath 요소에 사용된 프리픽스 또는 값이 정책에 선언된 네임스페이스의 일부가 아닌 경우 API 프록시 배포가 실패합니다. |
PatternCompilationFailed |
패턴 컴파일이 실패했습니다. |
디버그 도구에서 DataCapture
오류 찾기
디버그 도구에서 dataCapturePolicyErrors
변수를 사용할 수 있습니다.
이 도구는 애널리틱스로 이동하지 않고도 오류를 포착할 수 있는 추가 도구입니다.
예를 들어 하이브리드 런타임 버전을 업그레이드하고 실수로 이미 배포된 프록시에서 분석을 중단하는 경우에 발생하는 오류를 포착할 수 있습니다.
캡처 한도 적용
Apigee는 캡처된 데이터의 변수에 다음 한도를 적용합니다.
- 허용되는 변수의 수는 100개입니다.
- 각 변수의 최대 크기(목록 값 포함)는 400바이트입니다.
데이터 캡처 정책을 실행할 때 값이 메시지 컨텍스트의 데이터 캡처 맵에 추가되기 전에 다음을 수행하세요.
- 변수 수 한도에 도달하면 새 변수가 삭제됩니다.
- 변수 크기 한도에 도달하면 값이 원하는 한도에 맞게 잘립니다.
두 경우 모두에 해당하는 사항:
- 디버그 메시지가 메시지 프로세서 로그에 로깅됩니다.
limit reached
오류 메시지가dataCapturePolicyErrors
에 추가되며, 애널리틱스와 디버그 모두에서 사용할 수 있습니다. 참고: 최대 허용 변수 수에 도달하도록 하나의 오류 메시지만 추가됩니다.- <ThrowExceptionOnLimit>이
true
이면 데이터가 애널리틱스로 전송되지 않고 대신 오류가 클라이언트에 반환됩니다.