Statistics Collector 政策部署错误问题排查

您正在查看 Apigee X 文档。
查看 Apigee Edge 文档。

UnsupportedDatatype

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

Error Deploying Revision [revision_number]
StatisticsCollection [datatype]: Datatype Revision:[revision_number];APIProxy:[api_proxy];Organization:[org_name];Environment:[env_name] is unsupported . Context [context].

错误消息示例

Error Saving Revision 1
StatisticsCollection char: Datatype Revision:1;APIProxy:StatCollector;Organization:aprabhashankar-eval;Environment:test is unsupported . Context {2}.

示例屏幕截图

不受支持的数据类型错误消息。

原因

如果 Statistics Collector 政策的 <Statistic> 元素中的 ref 属性指定的变量类型不受支持,则 API 代理的部署将失败。

支持的数据类型有 stringintegerfloatlongdoubleboolean

例如,如果在 Statistics Collector 政策的 <Statistic> 元素中将变量类型指定为 char,则 API 代理的部署将失败。

诊断

  1. 标识出现故障的特定 API 代理中的 Statistics Collector 政策。
  2. 标识 Statistics Collector 政策中使用的不受支持的数据类型。您可以从错误消息中找到此信息。例如,在以下错误中,不受支持的数据类型是 char

    StatisticsCollection char: Datatype Revision:1;APIProxy:StatCollector;Organization:aprabhashankar-eval;Environment:test is unsupported . Context {2}.
    
  3. 验证失败的 Statistics Collector 政策中使用的类型属性与错误消息中指定(上面的第 2 步)的数据类型相匹配。例如,以下政策将数据类型指定为 char,它与错误消息中的内容匹配:

    <StatisticsCollector async="false" continueOnError="false" enabled="true" name="Statistics-Collector-1">
      <DisplayName>Statistics Collector 1</DisplayName>
      <Statistics>
          <Statistic name="statName" ref="varName" type="char">defaultStatValue</Statistic>
      </Statistics>
    </StatisticsCollector>
    
  4. 如果类型属性不是受支持的数据类型,则会导致错误。

    在上面所示的 Statistics Collector 政策示例中,回想一下,type 属性被设置为不受支持的 char 属性。因此,API 代理的部署失败并显示以下错误:

    StatisticsCollection char: Datatype Revision:1;APIProxy:StatCollector;Organization:aprabhashankar-eval;Environment:test is unsupported . Context {2}.
    

解决方法

确保在 Statistics Collector 政策的 <Statistic> 元素中的 ref 属性指定的变量的数据类型受支持且有效。例如:

<StatisticsCollector async="false" continueOnError="false" enabled="true" name="Statistics-Collector-1">
    <DisplayName>Statistics Collector 1</DisplayName>
    <Statistics>
        <Statistic name="statName" ref="varName" type="string">defaultStatValue</Statistic>
    </Statistics>
</StatisticsCollector>

InvalidName

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

Error Deploying Revision [revision_number]
StatisticsCollection: Name: [name] conflicts with system defined variables. Context policy: [policy_name]

错误消息示例

Error Saving Revision 1
StatisticsCollection: Name: organization conflicts with system defined variables. Context policy: StatCollector.

示例屏幕截图

无效名称错误消息。

原因

如果用于引用为在 Statistics Collector 政策的 <Statistic> 元素中定义的指定变量收集的数据的名称与系统定义的变量冲突,则 API 代理的部署将失败。

一些已知的系统定义的变量有 organizationenvironment

例如,如果在 Statistics Collector 政策的 <Statistic> 元素中将名称属性指定为 organization,则 API 代理的部署将失败。

诊断

  1. 标识发生错误的 Statistics Collector 政策,以及与系统定义的变量冲突的 <Statistic> 元素名称。您可以在错误消息中找到这两项。例如,在以下错误中,政策名称为 StatCollector,与系统定义的变量冲突的 <Statistic> 元素的名称为 organization

    StatisticsCollection: Name: organization conflicts with system defined variables. Context policy: StatCollector.
    
  2. 验证失败的 Statistics Collector 政策 XML 中使用的 <Statistic> 元素的名称是否与错误消息中标识(上面的步骤 1)的名称相匹配。例如,以下政策在 <Statistic> 元素中将名称指定为 organization,这与错误消息中的内容匹配:

    <StatisticsCollector name="StatCollector">
      <Statistics>
          <Statistic name="organization" ref="organization" type="string">myorg</Statistic>
          <Statistic name="traffic" ref="traffic" type="string">999999</Statistic>
      </Statistics>
    </StatisticsCollector>
    
  3. 检查每个 <Statistic> 元素的定义。如果有 <Statistic> 元素,其中 name 属性与系统变量冲突,则会导致错误。

在上面所示的 Statistics Collector 政策示例中,回想一下,使用的 <Statistic> 的名称属性是 organization,这恰巧是系统变量名称。因此,API 代理的部署失败并显示以下错误:

StatisticsCollection: Name: organization conflicts with system defined variables. Context policy: StatCollector.

解决方法

确保用于引用为 Statistics Collector 政策的 <Statistic> 元素中定义的指定变量收集的数据的 <Statistic> 元素的名称与系统定义的变量不同。例如:

<StatisticsCollector name="StatCollector">
    <Statistics>
        <Statistic name="org" ref="org" type="string">myorg</Statistic>
        <Statistic name="traffic" ref="traffic" type="string">999999</Statistic>
    </Statistics>
</StatisticsCollector>

DatatypeMissing

错误消息

通过 Apigee 界面或 API 部署 API 代理失败并显示以下错误消息:

Error Deploying Revision [revision_number]
StatisticsCollection [ref]: Datatype of Revision:[revision_number];APIProxy:[api_proxy];Organization:[org_name];Environment:[env_name] is missing . Context [context].

错误消息示例

Error Deploying Revision 2 to test
StatisticsCollection product.id: Datatype of Revision:2;APIProxy:StatCollector;Organization:aprabhashankar-eval;Environment:test is missing. Context {2}.

示例屏幕截图

缺少数据类型错误消息。

原因

如果缺少 Statistics Collector 政策的 <Statistic> 元素中的 ref 属性指定的变量类型,则 API 代理的部署将失败。

诊断

  1. 标识出现故障的特定 API 代理中的 Statistics Collector 政策。
  2. 检查 Statistics Collector 政策 XML 中每个 <Statistic> 元素的定义。如果存在缺少类型属性的任何 <Statistic> 元素,则会导致错误。

下面是一个 Statistics Collector 政策示例:

  <StatisticsCollector name="publishPurchaseDetails"
      <Statistics>
          <Statistic name="productID" ref="product.id">999999</Statistic>
          <Statistic name="price" ref="product.price" type="string">1000</Statistic>
      </Statistics>
  </StatisticsCollector>
  

在上面所示的 Statistics Collector 政策示例中,请注意两个 <Statistic> 元素缺少类型属性。因此,API 代理的部署失败。

解决方法

确保 Statistics Collector 政策的 <Statistic> 元素中的 ref 属性指定的变量的类型属性始终已指定且是受支持的数据类型。

支持的数据类型有 stringintegerfloatlongdoubleboolean

例如:

<StatisticsCollector name="publishPurchaseDetails">
    <Statistics>
        <Statistic name="productID" ref="product.id" type="string">999999</Statistic>
        <Statistic name="price" ref="product.price"  type="string">1000</Statistic>
    </Statistics>
</StatisticsCollector>