【问题标题】:API Manager throws error when trying to view api statisticsAPI Manager 在尝试查看 api 统计信息时抛出错误
【发布时间】:2014-04-11 17:03:54
【问题描述】:

我正在尝试集成 BAM Server(2.4.0) 和 API Management(1.6),但出现错误:

TID:[0] [AM] [2014-04-11 08:45:17,838] 错误 {org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject} - 错误 在为 ProviderAPIUsage 调用 APIUsageStatisticsClient 时 {org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject} org.wso2.carbon.apimgt.usage.client.exception.APIMgtUsageQueryServiceClientException: BAM 数据源尚未初始化。确保数据源 在 APIUsageTracker 配置中正确配置。在 org.wso2.carbon.apimgt.usage.client.APIUsageStatisticsClient.queryFirstAccess(APIUsageStatisticsClient.java:1693) 在 org.wso2.carbon.apimgt.usage.client.APIUsageStatisticsClient.getFirstAccessTime(APIUsageStatisticsClient.java:1675) 在 org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_getFirstAccessTime(APIProviderHostObject.java:2911) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

我的数据源定义为

<datasource>
    <name>WSO2AM_STATS_DB</name>
    <description>The datasource used for getting statistics to API Manager</description>
    <jndiConfig>
        <name>jdbc/WSO2AM_STATS_DB</name>
    </jndiConfig>
    <definition type="RDBMS">
        <configuration>
            <url>jdbc:h2:C:/esb/wso2bam-2.4.0/repository/database/APIMGTSTATS_DB;AUTO_SERVER=TRUE</url>
            <username>wso2carbon</username>
            <password>wso2carbon</password>
            <driverClassName>org.h2.Driver</driverClassName>
            <maxActive>50</maxActive>
            <maxWait>60000</maxWait>
            <testOnBorrow>true</testOnBorrow>
            <validationQuery>SELECT 1</validationQuery>
            <validationInterval>30000</validationInterval>
        </configuration>
    </definition>
 </datasource>

另外,我注意到 BAM 服务器之后会抛出以下错误

错误 {org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation} - 无法将数据写入数据库 org.h2.jdbc.JdbcSQLException: NULL 不允许用于“CONSUMERKEY”列; SQL 语句:INSERT INTO API_REQUEST_SUMMARY (版本,consumerkey,max_request_time,api_version,时间,主机名,上下文,日,年,月,total_request_count,userid,apip ublisher,api) 值 (?,?,?,?,?,?,?,?,?,?,?,?,?,?) [90006-140]

我已按照以下说明进行操作 https://docs.wso2.org/display/AM160/Publishing+API+Runtime+Statistics

任何帮助将不胜感激

api-manager.xml

master-datasource.xml

Hive job log

wso2carbonlog.txt

【问题讨论】:

    标签: api wso2


    【解决方案1】:

    这个问题是因为将 consumerKey 作为 null 添加到数据库中。这已在 API 管理器 2.0.0 中修复。您可以找到与此问题相关的JIRA ticket APIMANAGER-2032

    要解决此问题,您需要修改可在 BAM 实例中找到的 API 管理器统计分析器配置单元脚本。打开它并编辑以下插入查询。然后 AM 会将空字符串添加为“匿名”,即预期值 (COALESCE(consumerKey,''))。

    insert overwrite table APIRequestSummaryData select api, api_version,version, apiPublisher, COALESCE(consumerKey,''),userId,context,max(requestTime) as max_request_time,sum(request) as total_request_count,hostName, year(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )) as year, month(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )) as month,day(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )) as day,concat(substring(from_unixtime(cast(requestTime/1000 as BIGINT), 'yyyy-MM-dd HH:mm:ss'),0,16),':00') as time from APIRequestData group by api,api_version,version,apiPublisher,consumerKey,userId,context,hostName,year(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )), month(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )),day(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )),hour(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )),minute(from_unixtime(cast(requestTime/1000 as BIGINT),'yyyy-MM-dd HH:mm:ss.SSS' )),substring(from_unixtime(cast(requestTime/1000 as BIGINT), 'yyyy-MM-dd HH:mm:ss'),0,16); 
    

    同样,修改 hive 脚本中的所有 insert 查询,它尝试写入 consumerKey。所有查询的结构几乎相同,因此应该不难更改。

    【讨论】:

    • 谢谢库桑。您知道脚本名称和文件夹位置吗?我找不到它。
    • 文件名为am_stats_analyzer,位于BAM_HOME/repository/deployment/server/bam-toolbox/API_Manager_Analytics.tbox。但是由于您已经上传了您的工具箱,如果您可以通过登录到您的 BAM 实例来修改它会更好。在 BAM mgt 控制台中,转到 Analytics -&gt; List,然后编辑 am_stats_analyzer_xxx 脚本。见screenshot
    • 再次感谢。此更改解决了在禁用身份验证时插入数据的第二个错误。第一个错误仍然存​​在。无法查看 BAM 统计信息。我尝试清理数据库并重新创建用户、api、订阅,但仍然出现相同的错误 - BAM 数据源尚未初始化。确保在 APIUsageTracker 配置中正确配置了数据源。感谢您的帮助。
    • 您是否确保 BAM 成功地将统计数据存储在您的 WSO2AM_STATS_DB 中?要了解 APIM 无法从数据库读取的原因,您能否附上 APIM 实例的 api-manager.xmlmaster-datasources.xml?我怀疑您的第一个问题是由于配置错误。 (如果需要,您可能希望从 conf 文件中删除敏感数据。)
    • 我通过 BAM 控制台检查了数据正在填充到 APIRequestData 和 APIResponseData 表中。 am_stats_analyzer_xxx 脚本中列出的所有其他表都是空的。这两个配置文件都已附加到我的原始帖子中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多