Про PMI и мониторинг WebSphere с помощью PerfServlet

   Вопрос о мониторинге инфраструктуры WebSphere Application Server всегда будет одним из наиболее важных для администраторов WAS. Этот вопрос всегда спорный и обсуждаемый, т.к. каждый сам определяет объекты, характеристики и параметры мониторинга в зависимости от ряда причин, обусловленных производственной необходимостью и поставленными задачами. На сегодняшний день существует множество способов и средств мониторинга инфраструктуры WAS, но все они в качестве источника данных используют метрики PMI (Performance Monitoring Infrastructure). Рассмотрим подробнее, что такое PMI.

PMI (Performance Monitoring Infrastructure)

  PMI – это встроенная в WAS система сбора информации, состоящая из метрик (счетчиков), отражающих функционирование различных компонент WAS. Активируя одни счетчики и выключая другие, Вы можете выбирать необходимые для мониторинга характеристики сервера приложений. Появление PMI обусловлено спецификацией JSR-077, определяющей набор статистических параметров для компонентов JEE (J2EE) как часть интерфейса StatisticProvider. Для определения уровня мониторинга в WebSphere существуют готовые наборы (сеты) активных счетчиков: None, Basic, Extended,  All, Custom. Подробнее о счетчиках PMI читайте здесь. Уровень мониторинга “Basic”, установлен по умолчанию и включает в себя все статистические данные, определенные в JSR-077.

   PMI использует архитектуру “клиент-сервер”. Ниже приведена общая схема архитектуры PMI. Сервер приложений собирает данные PMI в памяти, как говорилось ранее, это показания счетчиков, например, время отклика сервлета или использование (занятость) пула соединений к БД. Собранные данные могут быть получены Web-клиентами, Java-клиентами или Java Management Extensions (JMX) клиентами используя JMX API.

Overall-PMI-Architecture

   На общей схеме архитектуры PMI, в ее правой части, отражены сервера приложений, которые собирают данные PMI в памяти и администратор развертывания (Deployment Manager), через который осуществляется доступ к собранным данным, а так же управление PMI. Синяя стрелка между JMX клиентом и сервисом PMI сервера приложений означает, что доступ к собранным данным PMI возможен не только через Deployment Manager, но и напрямую из сервера приложений. В левой части схемы отражены различные клиенты, получающие собранные данные.

   В WebSphere Application Server встроен специальный инструмент – Tivoli Performance Viewer (TPV) – это Java-клиент, который отображает собранные данные, позволяет сохранить их в файл или прочитать из файла, а так же управляет мониторингом метрик PMI. Работа с TPV осуществляется через административную консоль WAS в разделе . Подробнее о работе с ним можно ознакомиться здесь.

  Если заглянуть глубже и попытаться представить из чего состоит PMI Service сервера приложений, то получится примерно следующая картина:

WAS-PMI-Service
То есть PMI Service состоит из трех уровней:

  • Interface – уровень, обеспечивающий доступ к PMI через JMX и MBean-ы.
  • Data Structure – уровень, обеспечивающий поддержку:
    • Performance Data Framework – фреймворк, входящий в JSR-077, определяющий метрики производительности, которые могут быть доступны для различных компонентов J2EE.
    • Расширения PMI для сбора дополнительных метрик компонентов J2EE и специфичных для WAS компонентов, например, таких как пулы нитей (thread pools) и workload management.
  • Runtime – среда выполнения PMI.

   Как было написано выше, уровни мониторинга WAS определяются наборами активных счетчиков PMI. Выбор более верхнего уровня включает в себя счетчики предыдущего уровня плюс дополнительные счетчики. Активация/деактивация счетчиков PMI определяется в специальном конфигурационном XML файле.

Включить PMI через административную консоль WAS можно двумя способами:

1. В административной консоли выбрать: “Monitoring and Tuning” –> “Performance Monitoring Infrastructure (PMI)“. Далее в появившемся списке серверов выбрать необходимый сервер приложений.

2. В административной консоли выбрать: “Servers” -> “Server Types” -> “WebSphere application servers” -> Имя_сервера. Далее на вкладке “Configuration“, в разделе “Performance“, выберите “Performance Monitoring Infrastructure (PMI)“.

   Не зависимо от способа которым был осуществлен переход в настройки PMI, в результате рабочая область изменит вид, как показано на рисунке ниже.

Server-PMI

   Для активации PMI необходимо выбрать поставить “галочку” напротив соответствующей опции. Здесь же вы можете выбрать необходимый уровень мониторинга, т.е. набор счетчиков PMI, а так же посмотреть метрики, входящие в тот или иной набор счетчиков. Включение опции “Use sequential counter updates” активирует синхронизацию обновлений счетчиков PMI, т.е. все активные счетчики будут обновляться одновременно. Это влечет за собой некоторое увеличение накладных расходов и ухудшение производительности. По умолчанию эта опция неактивна.

  После выбора необходимого уровня мониторинга, нажмите “ОК“, после чего сохраните сделанные изменения, при необходимости синхронизируйте изменения с узлами, и обязательно перезапустите сервер приложений. Данные PMI будут собираться после перезапуска сервера приложений.

  Описание каждой метрики, т.е. информация о том, какая характеристика измеряется, приведено в поле “Описание“, например:

Server-PMI-Counters-Info
Работая с PMI необходимо понимать классификацию и организацию данных в PMI. Рассмотрим эти вопросы подробнее.

  Следуя спецификации JSR-077 Performance Data Framework, статистические данные PMI могут быть одного из следующих типов:

Тип статистики Определение Пример
Количественная (CountStatistic) Текущее количественное значение выбранного параметра Количество запросов сервлета
Средняя (AverageStatistic) Среднее значение выбранного параметра. Средний размер HTTP сессии в байтах
Временная (TimeStatistic) Среднее значение выбранного параметра в секундах или милисекундах Среднее время отклика сервлета
Интервальная (RangeStatistic) Среднее взвешенное по времени значение выбранного параметра Количество одновременных запросов к сервлету
Ограниченно-интервальная (BoundedRangeStatistic) Среднее взвешенное по времени значение выбранного параметра с учетом верхней и нижней границ Размер JDBC пула соединений

Каждый сервер организует собираемые данные PMI в модули (modules) и подмодули (submodules).

   Модуль представляет из себя одну из категорий ресурсов, для которой определенный набор счетчиков отражает производительность. Каждый модуль имеет конфигурационный файл в формате XML. В этом файле определена организация счетчиков и перечислены уникальные идентификаторы для каждого счетчика, входящего в модуль. Выделяют следующие модули: EJB, пулы соединений JDBC,  пул соединений J2C, Thread pool, Java Transaction API (JTA), среда JVM, servlet session manager, transaction manager, web applications, Object Request Broker (ORB), Web Services Gateway (WSGW), system data, dynamic cache, web services, alarm manager, object pool, scheduler.

   Счетчик (Count) – это собираемые для анализа данные одного типа, отражающие производительность какого либо компонента. Данные счетчиков в модуле передаются и запрашиваются с помощью MBean ObjectNames или PerfDescriptors.

  Подмодуль представляет детализацию категории ресурса в модуле. Например, ORB thread pool это подмодуль категории thread pool. Подмодули могут включать другие подмодули.

Рассмотрим схему, иллюстрирующую организацию данных в PMI (из IBM Infocenter):

PMI-module-tree

     Теперь, когда мы узнали, что такое PMI и как организован сбор данных, поговорим о том, какое влияние оказывает PMI на производительность сервера приложений.

  По данным IBM, при уровне мониторинга “Basic” (по умолчанию) накладные расходы составляют 3%, т.е. производительность сервера приложений ухудшается на 3%. Эти расходы включают активный Tivoli Performance Viewer. При использовании PMI вместе с ARM (через агента), без фильтров, накладные расходы составляют, приблизительно, 7% и зависят от использования фильтров. При использовании PMI и  request metrics производительность снижается на 10%.

   В документации, такой как “WebSphere Application Server Administration and Configuration Guide”, указаны следующие величины накладных расходов для различных уровней мониторинга PMI:

  • Basic – снижение производительности до 2%
  • Extended – снижение производительности до 3%
  • All – снижение производительности до 6%
  • Custom – снижение производительности зависит от выбранных счетчиков, приблизительно, между 2%-6%

  Стоит отметить, что фактическое воздействие каждого уровня PMI на производительность сервера меняется в зависимости от приложений, функционирующих на сервере, и рабочей нагрузки, обрабатываемой севером в данный момент.

  Это все, что я хотел рассказать о PMI. Вторая часть статьи будет посвящена базовому приложению PerfServlet, позволяющему получать данные счетчиков PMI.

PerfServlet (Performance Monitoring Infrastructure Servlet)

   Администратору не всегда удобно осуществлять мониторинг серверов приложений через административную консоль и использовать для этого Tivoli Performance Viewer. Например, когда требуется быстро узнать количество активных сессий в определенном сервере приложений в данный момент времени. Каким еще способом, используя базовые средства, можно удобно получать данные PMI? Мало кто знает, но в поставке WAS уже есть специальное приложение для получения данных PMI через HTTP – это PerfServlet.

  PerfServlet (Performance Monitoring Infrastructure Servlet) – это приложение, которое по HTTP-запросу, используя интерфейсы администрирования и мониторинга, извлекает данные счетчиков PMI и отдает результат в виде XML-документа.

   Результат, который возвращает PerfServlet может использоваться сторонними утилитами для представления метрик PMI, например, в графическом виде. То есть при желании Вы можете разработать инструмент, который будет анализировать XML и представлять метрики PMI в любом удобном виде.

  Само приложение PerfServlet по умолчанию не установлено, ear-архив приложения PerfServletApp.ear находится в директории WAS_HOME/installableApps.

Вы можете скачать ear-архив приложения здесь:
Icon of Zip Archives PerfServletApp (42.3 KB)

  Внутри ear-архива приложения так же находится DTD-файл (document type definition), определяющий структуру выходного XML-файла с данными PMI. Для работы с приложением PerfServlet его необходимо установить на любой сервер приложений в ячейке. Процесс установки не сложен и не отличается от установки других приложений на WAS:

PerfServlet-install-01
PerfServlet-install-02
PerfServlet-install-03
PerfServlet-install-04
PerfServlet-install-05

Использование PerfServlet:

http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet[?node=&server=&module=]

Где:

  • perfServlet_Host:port – хост и порт сервера на котором функционирует приложение PerfServlet.
  • В квадратных скобках [ ] указана необязательная часть запроса, необходимая для уточнения/ограничения области запрашиваемых данных PMI.
  • , , – имя узла, сервера и модуля PMI соответственно.

Поле  может принимать следующие значения:

  • alarmManagerModule
  • beanModule
  • cacheModule
  • connectionPoolModule
  • jvmRuntimeModule
  • j2cModule
  • objectPoolModule
  • orbPerfModule
  • schedulerModule
  • servletSessionsModule
  • systemModule
  • threadPoolModule
  • transactionModule
  • webAppModule
  • webServicesModule
  • wlmModule
  • wsgwModule

Для вызова справки по использованию приложения необходимо выполнить запрос:
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?action=help

При запросе общего вида:
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet

будут собраны и показаны данные счетчиков PMI со всей ячейки WAS, т.е. со всех  серверов приложений и агентов узлов. В случае большой среды это может занять много времени, увеличить накладные расходы, а объем полученной информации может оказаться очень большим и непригодным для анализа. Поэтому рекомендуется использовать в запросе уточняющую часть, т.е. ограничивать область сбора и предоставления информации PMI. Так же стоит отметить, что при первом вызове PerfServlet получает список всех узлов и серверов приложений в ячейке, от которых могут быть получены данные PMI, и кэширует это в памяти. Если какой-либо сервер приложений или узел был выключен при первой инициализации PerfServlet, а потом был запущен, то PerfServlet не получит автоматически информацию о том, что появился еще один сервер, от которого могут быть получены данные PMI. Для того, что бы PerfServlet обновил конфигурацию, т.е. смог получать данные PMI от “нового” сервера, необходимо выполнить следующий запрос:

http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?refreshConfig=true

Далее рассмотрим несколько примеров использования PerfServlet:

Node

Получение данных PMI со всех серверов приложений в узле:
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?node=Node01

Server

Получение данных PMI со всех серверов приложений с именем Server01 в ячейке:
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?server=Server01

Получение данных PMI с сервера Server01 в узле Node01:
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?node=Node01&server=Server01

Module

Получение данных PMI модуля jvmRuntimeModule со всех серверов в ячейке (сервера приложений и агенты узлов):
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?module=jvmRuntimeModule

Получение данных PMI модулей jvmRuntimeModule и webAppModule с сервера Server01 в узле Node01:
http://perfServlet_Host:port/wasPerfTool/servlet/perfservlet?node=Node01&server=Server01&module=jvmRuntimeModule+webAppModule

Рассмотрим XML-ответ полученный при запросе данных PMI модуля jvmRuntimeModule с сервера ed2sr03 в узле ed2:

Читать полученный XML можно следующим способом:

  1. По тегу найти необходимый узел
  2. По тегу найти необходимый сервер приложений
  3. По тегу найти необходимый модуль или подмодуль PMI
  4. В поле name найти имя интересующего счетчика PMI
  5. Посмотреть на начало строки и определить тип статистики PMI. Типы данных PMI мы рассмотрели ранее. Это может быть один из следующих типов:
      • CountStatistic
      • TimeStatistic
      • RangeStatistic
      • BoundedRangeStatistic

  Дальнейший анализ зависит от типа данных и сводится к поиску значения одного или нескольких счетчиков. Рассмотрим возможные виды записей различных типов PMI:

CountStatistic – на примере данных модуля jvmRuntimeModule

count=”692258″ lastSampleTime=”1398077279787″ name=”UsedMemory” startTime=”1397542850094″ unit=”KILOBYTE”/>

  • ID – идентификатор PMI для этого представления
  • count – значение счетчика PMI
  • lastSampleTime – время в милисекундах, когда была получена информация PMI в последний раз
  • name – имя счетчика PMI
  • startTime – время в милисекундах, прошедшее с момента запуска сервера (начала сбора PMI)
  • unit – единицы измерения
TimeStatistic – на примере данных модуля connectionPoolModule

name=”UseTime” startTime=”1397542856318″ totalTime=”1297087″ unit=”MILLISECOND”/>

  • ID – идентификатор PMI для этого представления
  • lastSampleTime – время в милисекундах, когда была получена информация PMI в последний раз
  • max – максимальное значение счетчика
  • min – минимальное значение счетчика
  • name – имя счетчика PMI
  • startTime – время в милисекундах, прошедшее с момента запуска сервера (начала сбора PMI)
  • totalTime – значение счетчика PMI
  • unit – единицы измерения
RangeStatistic – на примере данных модуля servletSessionsModule

name=”LiveCount” startTime=”1397543116610″ unit=”N/A” value=”0″/>

  • ID – идентификатор PMI для этого представления
  • highWaterMark – максимальная отметка значений счетчика за определенный интервал
  • integral – значение интеграла
  • lastSampleTime – время в милисекундах, когда была получена информация PMI в последний раз
  • lowWaterMark – минимальная отметка значений счетчика за определенный интервал
  • mean – среднее значение показаний счетчика
  • name – имя счетчика PMI
  • startTime – время в милисекундах, прошедшее с момента запуска сервера (начала сбора PMI)
  • unit – единицы измерения
  • value – значение счетчика PMI
BoundedRangeStatistic – на примере данных модуля jvmRuntimeModule

name=”HeapSize” startTime=”1397542850091″ unit=”KILOBYTE” upperBound=”1048576″ value=”851408″/>

  • ID – идентификатор PMI для этого представления
  • highWaterMark –  максимальная отметка значений счетчика за определенный интервал
  • integral – значение интеграла
  • lastSampleTime – время в милисекундах, когда была получена информация PMI в последний раз
  • lowWaterMark – минимальная отметка значений счетчика за определенный интервал
  • lowerBound – значение нижней границы показаний счетчика
  • mean – среднее значение показаний счетчика
  • name – имя счетчика PMI
  • startTime – время в милисекундах, прошедшее с момента запуска сервера (начала сбора PMI)
  • unit – единицы измерения
  • upperBound – значение верхней границы показаний счетчика
  • value – значение счетчика PMI

   В этой статье мы подробно рассмотрели систему сбора информации PMI, узнали внутренние механизмы ее работы, познакомились с организацией данных PMI и приложением PerfServlet, позволяющим получать доступ к данным PMI через HTTP, а так же научились читать возвращаемый XML с данными PMI.

   Стоит отметить, что IBM не рекомендует использовать PerfServlet как средство постоянного real-time мониторинга в производственных средах и в средах с большой топологией. Для этих сред рекомендуется использовать ITCAM (IBM Tivoli Composite Application Manager) for WebSphere Application Server. Однако приложение PerfServlet послужит администраторам отличным средством периодического мониторинга  и анализа производительность WAS.

VN:F [1.9.22_1171]
Rating: 5.0/5 (5 votes cast)
Tagged with: , , , ,
Posted in WebSphere Application Server, Monitoring
One comment on “Про PMI и мониторинг WebSphere с помощью PerfServlet
  1. Алексей says:

    Приложению perfServletApp во вкладке
    “Приложения J2EE > perfServletApp > Отображение роли защиты в пользователя или группу” нужно не забыть добавить пользователя.

    VA:F [1.9.22_1171]
    Rating: +2 (from 2 votes)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Language: