Пример конфигурации: мониторинг среднего времени выполнения
и частоты вызовов методов сервисов¶
Автор: Виталий Шакуров
Компания: Janet systems
В приведенном примере мы создадим janet-модуль и настроим в его конфигурации фильтр на вызов метода invokeObject(..) системного сервиса jws.services.remoting.IRemotingService. Создаваемый модуль будет содержать два класса:
- Класс
RemoteDelayсодержащий единственный методdoDelay(Long millis), который останавливает своё выполнение на заданное число миллисекунд после чего происходит возврат; - Работа по расписанию
Worker, которая с заданной периодичностью вызывает методdoDelay(..)классаRemoteDelayс произвольным значениемmillis. Создание экземпляра классаRemoteDelayи вызов метода производятся с помощью методов системного сервисаjws.services.remoting.IRemotingService, в т.ч. с использованием методаinvokeObject(..).
- Пример конфигурации: мониторинг среднего времени выполнения
и частоты вызовов методов сервисов - Требования к окружению
- Создание и конфигурирование модуля
- Конфигурирование трассировщика, БД и фильтров
- Сборка и развёртывание модуля
Требования к окружению¶
- JDK версии 1.5 или выше можно загрузить по адресу. Рекомендуем использовать последнюю доступную версию JDK. Далее для ссылок на место установки JDK будем использовать следующее обозначение
$JAVA_HOME. - ant версии 1.6 или выше доступен по адресу. Рекомендуем использовать последнюю доступную версию ant. Далее для ссылок на место установки ant будем использовать следующее обозначение
$ANT_HOME. - Последнюю версию системной части платформы iJaNet можно загрузить по адресу (ссылки вида
janet-installer-5.x.x.jar). Процесс установки платформы iJaNet рассмотрен в п 3.3 Платформа iJaNet V5. Общее описание. Далее для ссылок на место установки системной части платформы будем использовать следующее обозначение$JANET_HOME. - Создать папку в которую будет помещён создаваемый janet-модуль. Далее ссылки на эту папку будем обозначать
$JANET_PROJECTS. - Последнюю версию 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. Вы увидите интерфейс системы для сконфигурированного фильтра
Работа с интерфейсом системы мониторинга производительности рассмотрена подробнее в Руководстве пользователя.