Пример конфигурации: мониторинг среднего времени выполнения
и частоты вызовов методов сервисов

Автор: Виталий Шакуров
Компания: Janet systems

В приведенном примере мы создадим janet-модуль и настроим в его конфигурации фильтр на вызов метода invokeObject(..) системного сервиса jws.services.remoting.IRemotingService. Создаваемый модуль будет содержать два класса:

  1. Класс RemoteDelay содержащий единственный метод doDelay(Long millis), который останавливает своё выполнение на заданное число миллисекунд после чего происходит возврат;
  2. Работа по расписанию Worker, которая с заданной периодичностью вызывает метод doDelay(..) класса RemoteDelay с произвольным значением millis. Создание экземпляра класса RemoteDelay и вызов метода производятся с помощью методов системного сервиса jws.services.remoting.IRemotingService, в т.ч. с использованием метода invokeObject(..).

Требования к окружению

  1. JDK версии 1.5 или выше можно загрузить по адресу. Рекомендуем использовать последнюю доступную версию JDK. Далее для ссылок на место установки JDK будем использовать следующее обозначение $JAVA_HOME.
  2. ant версии 1.6 или выше доступен по адресу. Рекомендуем использовать последнюю доступную версию ant. Далее для ссылок на место установки ant будем использовать следующее обозначение $ANT_HOME.
  3. Последнюю версию системной части платформы iJaNet можно загрузить по адресу (ссылки вида janet-installer-5.x.x.jar). Процесс установки платформы iJaNet рассмотрен в п 3.3 Платформа iJaNet V5. Общее описание. Далее для ссылок на место установки системной части платформы будем использовать следующее обозначение $JANET_HOME.
  4. Создать папку в которую будет помещён создаваемый janet-модуль. Далее ссылки на эту папку будем обозначать $JANET_PROJECTS.
  5. Последнюю версию iJaNet SDK for java можно загрузить по адресу (ссылки вида janet-sdk-5.x.x.zip).

Создание и конфигурирование модуля

Перейдите в папку $JANET_PROJECTS

cd $JANET_PROJECTS

Распакуйте содержимое архива SDK в текущую папку.

unzip -o janet-sdk-5.x.x.zip

В результате операции будет создана папка $JANET_PROJECTS/template. Скопируйте файлы RemoteDelay.java и Worker.java в папку $JANET_PROJECTS/template/src. Отредактируйте файл $JANET_PROJECTS/template/build.xml. Найдите в нём строку:

<project name="module" default="build-deploy" basedir=".">

и измените её на

<project name="template" default="build-deploy" basedir=".">

Затем найдите строку

<target name="build-deploy" depends="build-ear" if="server.deploydir">

и перед ней вставьте

<property name="server.deploydir" value="$JANET_HOME/server/janet/deploy" />

Замечание: здесь и далее все ссылки в конфигурационных файлах на переменные окружения вида $JANET_HOME нужно заменять значениями этих переменных. Так в примере выше значение атрибута value="/path/to/janet/Server/server/janet/deploy"

Для работы создаваемого janet-модуля необходимо сконфигурировать работу по расписанию Worker в файле $JANET_PROJECTS/template/resources/jws-module.xml. Для этого внутри блока <scheduled-jobs> нужно добавить следущее описание работы:

1 <job start-delay="1000" interval="1000">
2     <job-class>Worker</job-class>
3 </job>

Перед использованием системной службы remoting необходимо сконфигурировать транспорт и прокси-службу. Обе этих настройки задаются в разделе <remote-module-ref>. Для задания url транспорта нужно изменить значение параметра

<param name="transport.http.url" type="string">http://host:port/module/service</param>

на

<param name="transport.http.url" type="string">http://localhost:8080/template/service</param>

Для задания локального имени прокси-службы нужно изменить

<service-proxy remote-name="remoting" local-name="module.remoting">

на

<service-proxy remote-name="remoting" local-name="remoting.local">

Конфигурирование трассировщика, БД и фильтров

Перед заданием фильтров для осуществления мониторинга необходимо сконфигурировать трассировщик. Для этого внутри блока <local-services> нужно добавить следующее описание сервиса:

 1 <service name="apm" publish="true">
 2     <factory-class>jws.core.services.GenericServiceFactory</factory-class>
 3     <service-interface>janet.services.apm.ITracerService</service-interface>
 4     <parameters>
 5         <param name="impl.class" type="string">janet.services.apm.impl.TracerServiceImpl</param>
 6         <param name="backend" type="janet.services.apm.impl.conf.TracerServiceBackendConf">
 7             <backend-class>janet.services.apm.impl.tracer.backend.DbBackend</backend-class>
 8             <parameters>
 9                 <param name="datasource" type="jws.services.common.DirectDataSourceConf">
10                     <driver-class>org.hsqldb.jdbcDriver</driver-class>
11                     <connection-url>jdbc:hsqldb:$JANET_HOME/server/janet/data/hypersonic/janet</connection-url>
12                     <driver-parameters>
13                         <param name="user" type="string">sa</param>
14                         <param name="password" type="string"></param>
15                     </driver-parameters>
16                 </param>
17                 <param name="backend.db.tableName" type="string">APM_TRACER_MEASUREMENTS</param>
18             </parameters>
19         </param>
20     </parameters>
21 </service>

Значения всех параметров в описании сервиса более подробно рассмотрены в разделе Реализация Руководства пользователя.

Для правильной работы сервиса нужно также сконфигурировать работу по расписанию:

1 <job start-delay="10000" interval="20000">
2     <job-class>janet.services.apm.impl.core.TraceInfoCollectorJob</job-class>
3     <parameters>
4         <param name="janet.apm.tracer_service_name" type="string">apm</param>
5     </parameters>
6 </job>

и разместить её внутри блока <scheduled-jobs>.

Трассировщик сконфигурирован таким образом, что собираемые им измерения сохраняются в БД (Hypersonic) поставляемой вместе с сервером приложений JBoss. Для работы трассировщика в этой БД должна быть создана таблица APM_TRACER_MEASUREMENTS. Перед созданием таблицы нужно выполнить первоначальную инициализацию БД для этого запустите сервер приложений JBoss:

$JANET_HOME/bin/run.sh

а затем остановите нажав Ctrl+C. Для создания таблицы APM_TRACER_MEASUREMENTS перейдите в папку $JANET_PROJECTS

cd $JANET_PROJECTS

и создайте в ней файл с именем janet.rc и следующим содержимым:

urlid janet
url jdbc:hsqldb:file:$JANET_HOME/server/janet/data/hypersonic/janet
username sa
password

После этого выполните следующую команду:

$JAVA_HOME/bin/java -cp $JANET_HOME/server/janet/lib/hsqldb.jar org.hsqldb.util.SqlTool --rcfile ./janet.rc janet

На экране появится интерфейс SqlTool. Выполните следующий скрипт:

CREATE TABLE APM_TRACER_MEASUREMENTS(SERVICE_NAME VARCHAR(256),FILTER_ID VARCHAR(256),START_TIME BIGINT,FINISH_TIME BIGINT);

и выйдите

q

Конфигурация фильтров производится в блоке описания сервиса для которого необходимо осуществлять мониторинг методов. В нашем случае это системный сервис jws.services.remoting.IRemotingService. Для мониторинга выполнения метода invokeObject(..) в подблоке <parameters> блока <service name="remoting" publish="true"> нужно добавить следующее описание фильтра:

1 <param name="MyFilter1" type="janet.services.apm.impl.conf.TracedMethodFilterConf">
2     <traced-method-signature>invokeObject(java.lang.String, java.lang.String, jws.core.ValueList)</traced-method-signature>
3     <arg index="1" operation="regex" value="p{Alpha}*"/>
4 </param>

Сборка и развёртывание модуля

Перейдите в папку модуля $JANET_PROJECTS/template

cd $JANET_PROJECTS/template

и выполните ant

ant

После сборки и развёртывания модуля запустите сервер приложений JBoss

$JANET_HOME/bin/run.sh

После старта сервера перейдите по ссылке http://localhost:8080/template/apm. В открывшемся интерфейсе монитора производительности перейдите на вкладку Perfomance и разверните панель MyFilter1. Вы увидите интерфейс системы для сконфигурированного фильтра

Работа с интерфейсом системы мониторинга производительности рассмотрена подробнее в Руководстве пользователя.

perfmon_iface.png (46.2 KB) Виталий Шакуров, 04/29/2010 08:16 pm

Worker.java (815 Bytes) Виталий Шакуров, 04/30/2010 12:22 pm

RemoteDelay.java (262 Bytes) Виталий Шакуров, 04/30/2010 12:22 pm

Also available in: HTML TXT