Статьи

Мониторинг стиля DevOps с WildFly 9 и Jolokia

DevOps — одна из самых горячих тем в наши дни. А широкий спектр тем вокруг него затрудняет поиск полного описания или чего-то, что охватывает все на достойной детализации. Одно можно сказать наверняка: одна из самых важных частей — это предоставление правильных метрик и информации для мониторинга приложения.

Java EE и JMX

Стандартный способ мониторинга серверов Java EE — это JMX. Это возможно с такими инструментами, как JConsole, VisualVM или Oracle Mission-Control Suite. У этого подхода есть ряд преимуществ, и большинство операционных команд фактически использовали это в прошлом. Но это не совсем работает DevOps-способ. Это отдельный инструментарий, и команды DevOps не имеют хорошего способа на самом деле написать сценарий, если не установлены все инструментарий и операционные системы (Nagios и т. Д.). Сегодня это кажется намного более естественным и проще в использовании, чтобы иметь конечные точки http, которые предоставляют информацию о конфигурации и времени выполнения.

Jolokia — JMX в HTTP с JSON

Очень удобный способ сделать это для JMX — использовать  Jolokia . Jolokia — это мост JMX-HTTP, предоставляющий альтернативу разъемам JSR-160. Это агентный подход с поддержкой многих платформ. В дополнение к базовым операциям JMX он расширяет удаленное взаимодействие JMX с уникальными функциями, такими как массовые запросы и детализированные политики безопасности. В последнее время он поставляется с большим количеством проектов JBoss (например, подсистема WIldFly-Camel) и может быть легко использован в ваших собственных приложениях.

Простое приложение Java EE 7 с Jolokia

Просто создайте простой проект Java EE 7 (возможно, с  артефактом Адама Бена maven ) и добавьте к нему одну зависимость:

<dependency>
     <groupId>org.jolokia</groupId>
     <artifactId>jolokia-core</artifactId>
     <version>1.3.1</version>
 </dependency>

Следующим шагом является настройка Jolokia AgentServlet в вашем web.xml и сопоставление его с шаблоном, который соответствует вашим потребностям:

  <servlet>
        <servlet-name>jolokia-agent</servlet-name>
        <servlet-class>org.jolokia.http.AgentServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>jolokia-agent</servlet-name>
        <url-pattern>/metrics/*</url-pattern>
    </servlet-mapping>

Создайте свое приложение как обычно и получайте доступ к соответствующим метрикам по мере необходимости. Полный. Jolokia ссылка объясняет различные операции и типы .

Разверните ваше приложение в WildFly 9

Загрузите и разархивируйте WildFly 9  в папку по вашему выбору. Запуск с bin / standalone.xml.

Пример метрики

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

Использование памяти кучи:

HTTP: // локальный: 8080 / JavaEE-DevOps / метрики / чтения / java.lang: тип = Память / HeapMemoryUsage

{
    "request": {
        "mbean": "java.lang:type=Memory",
        "attribute": "HeapMemoryUsage",
        "type": "read"
    },
    "value": {
        "init": 67108864,
        "committed": 241696768,
        "max": 477626368,
        "used": 141716336
    },
    "timestamp": 1437392335,
    "status": 200
}

Обзор вашей серверной среды:

HTTP: // локальный: 8080 / JavaEE-DevOps / метрики / чтения / jboss.as: ядро-сервис = серверной среды

Вы можете не только читать атрибуты JMX, но и выполнять такие операции, как доступ к последним 10 строкам файла server.log:

HTTP: // локальный: 8080 / JavaEE-DevOps / метрики / Exec / jboss.as.expr: подсистема = регистрация / readLogFile / server.log / UTF-8/10/0 / верно

Обеспечение конечной точки

Как и следовало ожидать, AgentServlet доступен, как и ваше приложение. Чтобы предотвратить это, вам нужно будет это обезопасить. Хорошей новостью является то, что это возможно при базовой аутентификации и области приложения в WildFly. Первый шаг — добавить пользователя в область приложения. Это можно сделать с помощью сценария bin / add-user.sh | bat. Обязательно добавьте роль «SuperUser». Теперь добавьте следующее в ваш web.xml:

    <security-constraint>
        <display-name>Metrics Pages</display-name>
        <web-resource-collection>
            <web-resource-name>Protected Metrics Site</web-resource-name>
            <description>Protected Metrics Site</description>
            <url-pattern>/metrics/*</url-pattern>
        </web-resource-collection>
        <auth-constraint>
            <description/>
            <role-name>SuperUser</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>NONE</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
     <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>ApplicationRealm</realm-name>
    </login-config>
    <security-role> 
        <role-name>SuperUser</role-name> 
    </security-role> 

Последнее, что нужно сделать здесь, это добавить файл в WEB-INF / с именем jboss-web.xml. Это будет просто содержать три строки:

<jboss-web>
    <security-domain>other</security-domain>
</jboss-web>

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

Ищете больше?

Пока это просто простой пример, основанный на стандартных метриках JMX, которые предоставляет WildFly. Вы можете точно зарегистрировать свой собственный MBeans или расширить его, объединяя отдельные вызовы в один. Другой вариант — использовать  hawt.io  в качестве готового к использованию расширяемого пользовательского интерфейса, который уже предоставляет все виды метрик для WildFly и многих других подсистем. Но это очень прямой путь. В следующем крупном релизе Jolokia может появиться еще больше, чтобы сделать DevOps более удобным.