使用 WildFly 9 和 Jolokia 监控 DevOps 风格

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

DevOps 是当今最热门的话题之一。围绕它的广泛主题使得很难真正找到完整的描述或涵盖所有内容的合适粒度的内容。有一件事是肯定的:最重要的部分之一是提供正确的指标和信息以监控应用程序。


Java EE 和 JMX

监视 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 并将其映射到适合您需要的模式:


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

像往常一样构建您的应用程序,并根据需要访问相关指标。完整的。 Jolokia 参考解释了不同的操作和类型


将您的应用程序部署到 WildFly 9

下载 WildFly 9 并将其解压缩 到您选择的文件夹中。使用 bin/standalone.xml 启动。


示例指标

虽然您可以访问服务器中定义的每个 JMX MBean,但这里有一个指标列表,可能会帮助您开箱即用。


堆内存使用:

http://localhost:8080/javaee-devops/metrics/read/java.lang:type=Memory/HeapMemoryUsage


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

服务器环境概览:

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



保护端点

如您所料,AgentServlet 可以像您的应用程序一样访问。为了防止这种情况,您必须保护它。好消息是,这可以通过 WildFly 中的基本身份验证和应用程序领域实现。第一步是将用户添加到应用程序领域。这可以通过 bin/add-user.sh|bat 脚本来完成。确保添加角色“SuperUser”。现在将以下内容添加到您的 web.xml 中:


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

这里要做的最后一件事是向 WEB-INF/ 添加一个名为 jboss-web.xml 的文件。这将只包含三行:


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

每当您尝试访问指标端点时,服务器现在都会向您发出基本身份验证请求。


寻找更多?

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