使用Jolokia和Hawtio来监控Java应用程序

首先

我將嘗試使用Jolokia和Hawtio來檢索Java應用程序的MBean信息。

jolokia 是什么?

这是一个用于通过HTTP访问MBean的Java代理。由于可以通过HTTP访问,因此可以轻松地使用curl等工具来采集MBean的信息。采集到的信息将以JSON格式返回。

hawtio是什么

hawtio是一个能够监控和管理Java应用程序的Web控制台。它支持Tomcat、Apache Camel、Apache ActiveMQ等。除此之外,它还可以显示通过JMX获取的MBean和JVM信息,适用于其他的Java应用程序。

JMX不是通过hawtio与应用程序进行通信,而是通过后端的jolokia进行HTTP通信来收集MBean的信息并在界面上显示。换句话说,通过使用hawtio和jolokia的组合,我们可以通过JMX远程访问各种Java应用程序。

这次我们将作为监控对象的Java应用程序,偶然使用了在服务器上启动的kafka来运行一下。

image.png

恕我直言,我根据以下文章中的步骤进行了参考。

播放 + Jolokia + Hawtio

茉莉花

下载jolokia。

您可以从以下网站下载Jolokia代理。

image.png

运行Jolokia

Jolokia有两种运行方式:独立运行和嵌入到Java应用程序中。

(1) 单独运行Jolokia。

运行以下命令,将显示Java应用程序的进程列表。

# java -jar jolokia-jvm-1.6.0-agent.jar 
3906   kafka.Kafka ../config/server.properties
4229   jolokia-jvm-1.6.0-agent.jar
1039   org.apache.zookeeper.server.quorum.QuorumPeerMain /opt/kafka/config/zookeeper.properties

另外,指令选项如下所示。

Usage: java -jar jolokia-jvm-1.6.0-agent.jar [options] <command> <pid/regexp>
where <command> is one of
    start     -- Start a Jolokia agent for the process specified
    stop      -- Stop a Jolokia agent for the process specified
    status    -- Show status of an (potentially) attached agent
    toggle    -- Toggle between start/stop (default when no command is given)
    list      -- List all attachable Java processes (default when no argument is given at all)
    encrypt   -- Encrypt a password which is given as argument or read from standard input

接下来,按照以下方式执行,jolokia将启动。最后的“3906”将成为监控目标Java应用程序的进程ID。
执行后在屏幕上显示的“http://127.0.0.1:8778/jolokia/”将成为jolokia的访问地址。
jolokia的认证用户ID和密码将设为“jolokia”。

# java -jar jolokia-jvm-1.6.0-agent.jar --user jolokia --password jolokia start 3906
Started Jolokia for PID 3906
http://127.0.0.1:8778/jolokia/

(2) 将jolokia嵌入Java应用程序中并进行执行。

在Java的启动选项中添加以下内容。
路径“jolokia-jvm-1.6.0-agent.jar”根据环境进行相应更改。

-javaagent:./jolokia-jvm-1.6.0-agent.jar=port=8778,host=localhost

确认Jolokia的版本。

我将通过HTTP访问Jolokia,并尝试获取版本信息。

# curl http://localhost:8778/jolokia/version
{"request":{"type":"version"},"value":{"agent":"1.6.0","protocol":"7.2","config":{"listenForHttpService":"true","maxCollectionSize":"0","authIgnoreCerts":"false","agentId":"192.168.10.141-4698-5b480cf9-jvm","debug":"false","agentType":"jvm","policyLocation":"classpath:\/jolokia-access.xml","agentContext":"\/jolokia","serializeException":"false","mimeType":"text\/plain","maxDepth":"15","authMode":"basic","discoveryEnabled":"true","streaming":"true","canonicalNaming":"true","historyMaxEntries":"10","allowErrorDetails":"true","allowDnsReverseLookup":"true","realm":"jolokia","includeStackTrace":"true","maxObjects":"0","useRestrictorService":"false","debugMaxEntries":"100"},"info":{"product":"jetty","vendor":"Eclipse","version":"9.2.24.v20180105"}},"timestamp":1542198764,"status":200}[root@kafkaserver1 ~]# 

试着获取指标数据

接下来,我们将通过HTTP访问jolokia并获取指标数据。

# curl http://localhost:8778/jolokia/read/java.lang:type=Memory/NonHeapMemoryUsage
{"request":{"mbean":"java.lang:type=Memory","attribute":"NonHeapMemoryUsage","type":"read"},"value":{"init":2555904,"committed":53477376,"max":-1,"used":50092648},"timestamp":1542198810,"status":200}[root@kafkaserver1 ~]# 

如果Jolokia正在独立运行,需要停止它。

如果要停止Jolokia,请执行以下命令。

# java -jar jolokia-jvm-1.6.0-agent.jar stop 3906
Stopped Jolokia for PID 3906

运行hawtio

下载hawtio

我会从以下网站下载hawtio模块。
这次我下载了”hawtio-app-2.3.0.jar”。

image.png

运行hawtio

使用以下命令执行hawtio:
指定hawtio使用的端口是“–port 8090”。
默认情况下会使用8080端口,为了避免与其他应用程序冲突,进行了更改。

java -jar hawtio-app-2.3.0.jar --port 8090

hawtio: Don't cha wish your console was hawt like me!
=====================================================

访问hawtio的Web控制台

hawtio的Web控制台的URL如下:

使用浏览器打开时,会显示如下的界面。

image.png

我立刻尝试连接到jolokia。

首先,点击“添加连接”按钮。
然后,会显示一个输入jolokia连接信息的对话框,按照屏幕上的示例进行输入。

image.png

点击「Test Connection」按钮后,将显示jolokia的用户ID和密码输入对话框,然后输入在jolokia启动时设置的「jolokia」。

image.png

如果显示为“连接成功”,则表示成功。
最后点击“添加”按钮。

image.png

试着看看卡夫卡。

按下「连接」按钮后,将启动一个新窗口。

当选择JMX选项卡时,您可以查看kafka的MBean信息。

image.png

您可以使用Runtime在JVM中查看System Properties、线程、Class Histogram等信息。

image.png
image.png
image.png
image.png

请用中文进行翻译,只需要一种选择:

参考:

    • play + jolokia + hawtio

 

    Tomcat9にデプロイしたCamelのWebアプリケーションをhawtioで可視化する
bannerAds