2014-04-11 6 views
2

Я пытаюсь интегрировать BAM Server (2.4.0) и API управления (1.6) получать сообщение об ошибке:API менеджер бросает ошибку при попытке просмотреть статистику Api

TID: [0] [AM] [2014-04-11 08:45:17,838] ERROR {org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject} - Error while invoking APIUsageStatisticsClient for ProviderAPIUsage {org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject} org.wso2.carbon.apimgt.usage.client.exception.APIMgtUsageQueryServiceClientException: BAM data source hasn't been initialized. Ensure that the data source is properly configured in the APIUsageTracker configuration. at org.wso2.carbon.apimgt.usage.client.APIUsageStatisticsClient.queryFirstAccess(APIUsageStatisticsClient.java:1693) at org.wso2.carbon.apimgt.usage.client.APIUsageStatisticsClient.getFirstAccessTime(APIUsageStatisticsClient.java:1675) at org.wso2.carbon.apimgt.hostobjects.APIProviderHostObject.jsFunction_getFirstAccessTime(APIProviderHostObject.java:2911) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 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 бросками следующее сообщение об ошибке после

ERROR {org.wso2.carbon.hadoop.hive.jdbc.storage.db.DBOperation} - Failed to write data to database org.h2.jdbc.JdbcSQLException: NULL not allowed for column "CONSUMERKEY"; SQL statement: INSERT INTO API_REQUEST_SUMMARY (version,consumerkey,max_request_time,api_version,time,hostname,context,day,year,month,total_request_count,userid,apip ublisher,api) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?) [90006-140]

Я следовал инструкции по https://docs.wso2.org/display/AM160/Publishing+API+Runtime+Statistics

Любая помощь будет принята с благодарностью

api-manager.xml

master-datasource.xml

Hive job log

wso2carbonlog.txt

ответ

1

Эта проблема является там из-за добавления consumerKey в нуль в т o база данных. Это было исправлено в диспетчере API 2.0.0. Вы можете найти связанный с этим вопрос JIRA ticket APIMANAGER-2032.

Чтобы устранить эту проблему, вам необходимо изменить скрипт анализатора сценария API-менеджера API, который вы можете найти в вашем экземпляре BAM. Откройте его и отредактируйте следующий запрос на вставку. Затем 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); 

Аналогично, изменить все insert запросы в улей сценарии, где он пытается писать consumerKey. Структура почти одинакова для всех запросов, поэтому ее не должно быть трудно изменить.

+0

Спасибо Kusan. Вы знаете имя сценария и папку? Я не могу найти его. – user1664338

+0

Имя файла 'am_stats_analyzer' и находится в BAM_HOME/репозитории/развертывании/сервере/bam-toolbox/API_Manager_Analytics.tbox. Но поскольку вы уже загрузили свой набор инструментов, лучше, если вы можете его изменить, войдя в ваш экземпляр BAM. В консоли BAM mgt перейдите в 'Analytics -> List' и отредактируйте скрипт' am_stats_analyzer_xxx'. См. [Скриншот] (https://docs.wso2.org/download/attachments/30540983/list-analytics.png?version=1&modificationDate=1376816429000) –

+0

Еще раз спасибо. Изменение решило вторую ошибку при вставке данных, когда аутентификация отключена. Первая ошибка сохраняется. Невозможно просмотреть статистику BAM. Я попытался очистить базу данных и воссоздал пользователей, apis, подписки, но по-прежнему ту же ошибку - источник данных BAM не был инициализирован. Убедитесь, что источник данных правильно настроен в конфигурации APIUsageTracker. Спасибо за вашу помощь. – user1664338

Смежные вопросы