logo

11 нояб. 2009 г.

BIEE: анализ системной статистики совместно с данными UsageTracking

Наверняка, вы пользовались формой просмотра текущих характеристик вашего приложения BIEE.

Зачастую данные, показываемые этой формой, интересны для анализа. Особенно в совокупности с данными, предоставляемыми UsageTacking.
Согласитесь, было бы интересно узнать какое количество физических соединений открыто в момент пиковой нагрузки на BI Server, а также какие именно логические запросы были запущены.


Задача в том, чтобы каким-либо образом «натравить» BI Server на данные, отображаемые формой «Контроль характеристик».

Небольшие изыскания в коде javascript-файлов Presentation Server’а подсказывают, что если обратиться к форме perfmon, указав дополнительный параметр «action=counters», то в ответ придет XML, содержащий нужные данные.

На первый взгляд GET-запрос ничего не возвращает. Но если посмотреть HTML-код, то данные есть.

Скопируем HTML содержимое в XML-редактор. Отформатируем текст.
Очевидно, что XML содержит данные о показаниях счетчиков. Где счетчики представлены некими кодами.

Как понять, что за счетчик представлен конкретным кодом.

Вернемся к исходной форме «Контроль характеристик». Откроем ее HTML-код.

Скопируем и вставим его в XML-редактор и отформатируем (придется удалить узел HEAD и немножко подправить ряд атрибутов, чтобы HTML-код воспринялся как XML).

Видим, что в коде представлены и коды счетчиков и их описание.
Вычленим их. Для этого сохраним файл как XML и создадим простенький XSL-файл.

<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:for-each select="//table/tr[position() > 3]">
<xsl:value-of select="../tr[1]/td/b" />
;
<xsl:value-of select="../tr[2]/td" />
;
<xsl:value-of select="td[1]" />
;
<xsl:value-of select="td[2]" />
;
<xsl:value-of select="td[5]" />
;
<xsl:value-of select="td[4]/@id" />
+++
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>



Запускаем XSL-трансформацию над XML с данными. На выходе получим следующий XML.

Удалим заголовок XML и сохраним полученные данные как CSV-файл.

Теперь загрузим полученные данные об именах и кодах счетчиков в БД Oracle.
Создадим директорию:

create or replace directory xtern_data_dir as 'D:\EXT_DIR';


Создадим external-таблицу:

create table SH.extern_tbl
( perf_obj_name varchar2(256),
perf_obj_desc varchar2(1024),
perf_counter_name varchar2(256),
perf_counter_unit varchar2(50),
perf_counter_desc varchar2(1024),
perf_counter_id varchar2(256)
)
organization external
( default directory xtern_data_dir
access parameters
( records delimited by '+++'
fields terminated by ';'
)
location ('external_tbl.csv')
);


Создадим таблицу заголовков по загруженным данным:

create table SH.BIEE_PERF_CAPTIONS as
select * from extern_tbl t


Следующий этап – создание таблицы фактов.

create table SH.BIEE_PERF_FACTS
(
CID VARCHAR(512),
VAL NUMBER,
CREATE_DATE DATE
)


Создадим процедуру, которая будет обращаться по HTTP к PresentationServer’у и возвращать XML с данными по счетчикам:
(явно задаем логин-пароль доступа к странице PERFMON)

create or replace procedure SYS.RETRIEVE_BIEE_PERF_STATS is

l_http_request UTL_HTTP.req;
l_http_response UTL_HTTP.resp;
l_clob CLOB;
l_xml xmltype;

l_text VARCHAR2(32767);

l_url varchar2(512) := 'http://localhost:9704/analytics/saw.dll?perfmon&action=counters&nqUser=Administrator&nqPassword=Administrator';
begin
DBMS_LOB.createtemporary(l_clob, FALSE);

l_http_request := UTL_HTTP.begin_request(l_url);
l_http_response := UTL_HTTP.get_response(l_http_request);

BEGIN
LOOP
UTL_HTTP.read_text(l_http_response, l_text, 32767);
DBMS_LOB.writeappend(l_clob, LENGTH(l_text), l_text);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.end_of_body THEN
UTL_HTTP.end_response(l_http_response);
END;

l_xml := XMLTYPE(l_clob);

INSERT INTO SH.BIEE_PERF_FACTS
SELECT EXTRACT(VALUE(xmlt), '/counter/@cid') .getStringVal() AS cid,
EXTRACT(VALUE(xmlt), '/counter/@val') .getNumberVal() AS val,
sysdate
FROM TABLE(XMLSEQUENCE(EXTRACT(l_xml, '//counter'))) xmlt;

EXCEPTION
WHEN OTHERS THEN
UTL_HTTP.end_response(l_http_response);
DBMS_LOB.freetemporary(l_clob);
RAISE;
end;


Запустим job, который раз в минуту помещает данные по счетчикам в нашу таблицу фактов.


BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'BIEE_JOB',
job_type => 'STORED_PROCEDURE',
job_action => 'SYS.RETRIEVE_BIEE_PERF_STATS',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=1',
comments => 'retrieve BIEE performance data',
enabled => true);
END;




Импортируем таблицы заголовков и показаний счетчиков в рабочий репозиторий, содержащий также предметную область Usage Tracking.


Чтобы данные можно было анализировать в разрезе не только даты, но и времени –изменим тип таблицы фактов на SQL-запрос с вычленением времени.


«Протянем» новые таблицы на логический и презентационный слой.
Выставим правило агрегации для показаний счетчиков в «среднее».



Создадим простенький «answer», показывающий показания счетчиков и данные UsageTracking в разрезе времени.




В следующем посте опишу как создать административную информационную панель, из которой вызывать запуск и остановку job’а, собирающего статистику по счетчикам.

5 комментариев:

  1. Добрый день!
    Снова пристаю к вам с вопрсоами.)
    1) Собственно, очень интересует тема "административная информационную панель, из которой вызывать запуск и остановку job’а, собирающего статистику по счетчикам"
    2) Статистика юзеров - и подробная (про Usage Tracking Слышал, интересны еще варианты - не хочется зря плодить логи - база нагружена и так прилично), и не очень - что-то вроде сводки по юзерам и сессиям - кто какой отчет читал, сколько времени выполнялись запросы, кто в какой отчет писал, кто дашбоард делал

    ОтветитьУдалить
  2. Добрый день! Посмотрите на sql.ru - http://www.sql.ru/forum/1125977/analitika-hranilishha-integraciya-dannyh-i-bolshie-dannye-ot-oracle-v-pitere-20-noyabrya
    Там внизу Андрей выложил архив презентаций с последнего питерского Oracle BI Day.
    Я как раз там рассказывал о применении zabbix для мониторинга OBIEE11g.

    ОтветитьУдалить
    Ответы
    1. Общая идеология ясна, но к сожалению, текущий работодатель не приемлет решения типа zabbix-сервера))
      Просто не пропустит СБ.
      Да и вообще здесь несколько строго))
      Кстати, сижу буквально в одной остановке автобуса от офиса servplus на Варшавской)
      Как насчет личной консультации, под пиво или кофе, например?

      Удалить
    2. Плохо, что zabbix не разрешают использовать. Удобная штука.
      И я работаю не в Москве, а в Петербурге ;)
      Будете в северной столице - обязательно встретимся!

      Удалить
  3. Спасибо, но к сожалению, при смене места работы пришлось пересесть на 10-ку)

    ОтветитьУдалить