使用WildFly 9和Jolokia监视DevOps样式

DevOps是当今最热门的话题之一。 而且围绕它的主题范围很广,因此很难真正找到完整的描述或涵盖体面粒度的所有内容。 可以肯定的一件事:最重要的部分之一是提供正确的度量标准和信息以监视应用程序。


Java EE和JMX

使用WildFly 9和Jolokia监视DevOps样式

监视Java EE服务器的标准方法是JMX。 使用JConsole,VisualVM或Oracle Mission-Control Suite等工具可以实现此目的。 这种方法有很多优点,并且大多数运营团队在过去实际上经常使用这种方法。 但这并不完全适用于DevOps方式。 它是一个单独的工具,在没有安装所有工具和操作系统(Nagios等)的情况下,DevOps团队没有一种好的方法来实际编写脚本。 如今,使用http端点公开配置和运行时信息感觉更加自然,而且使用起来也更加容易。

Jolokia –使用JSON的JMX到HTTP

对于JMX,一种非常方便的方法是使用Jolokia Jolokia是一个JMX-HTTP桥,可替代JSR-160连接器。 这是一种基于代理的方法,支持许多平台。 除了基本的JMX操作外,它还通过独特的功能(例如批量请求和细粒度的安全策略)增强了JMX远程处理功能。 最近,它与许多JBoss项目捆绑在一起(例如WIldFly-Camel子系统),并且可以轻松地在自己的应用程序中使用。

装有Jolokia的简单Java EE 7应用

只需创建一个简单的Java EE 7项目(也许使用Adam Bien的maven工件 )并向其中添加一个依赖项即可:

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

下一步是在web.xml中配置Jolokia AgentServlet并将其映射到适合您需求的模式:

  <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:// localhost:8080 / javaee-devops / metrics / read / java.lang:type = Memory / 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:// localhost:8080 / javaee-devops / metrics / read / jboss.as:core-service = server-environment

您不仅可以读取JMX属性,还可以执行操作,例如访问server.log文件的最新10行:

  • http:// localhost:8080 / javaee-devops / metrics / exec / jboss.as.expr:subsystem = logging / readLogFile / server.log / UTF-8 / 10/0 / true

使用WildFly 9和Jolokia监视DevOps样式

保护端点

如您所料,可以像访问应用程序一样访问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>

现在,无论何时尝试访问度量标准端点,服务器都会向您发出基本身份验证请求。

寻找更多?

这只是基于WildFly公开的标准JMX指标的一个简单示例。 您可以肯定地注册自己的MBean或通过将单个调用聚合为一个来扩展它。 另一个选择是,将hawt.io用作可立即使用的可扩展UI,该UI已经为WildFly和许多其他子系统提供了各种指标。 但这是非常简单的方法。 Jolokia的下一个主要版本可能会提供更多功能,使DevOps的使用更加便捷。

翻译自: https://www.javacodegeeks.com/2015/07/monitoring-devops-style-with-wildfly-9-and-jolokia.html