jolokiaとhawtioでJavaアプリケーションをモニタリングする


はじめに

jolokiaとhawtioを使用して、JavaアプリケーションのMBeanの情報等を取得してみます。

jolokiaとは

http経由でMBeanにアクセスをするためのJavaエージェントです。
httpでアクセスできるので、curlなどで簡単にMBeanの情報を採取できます。採取した情報はJSONで返ってきます。

hawtioとは

hawtioはJavaアプリケーションをモニタリング・管理することができるWebコンソールです。標準で、Tomcat、Apache Camel、Apache ActiveMQなどに対応しています。そのほかのJavaアプリケーションでもJMXで取得したMBeanやJVMの情報を表示することができます。

JMXは、hawtioがアプリケーションとJMXで通信しているわけではなく、バックエンドのjolokiaとhttp通信してMBeanの情報を採取し、画面に表示しています。
つまり、hawtioとjolokiaを組み合わせれば、リモートの様々なJavaアプリケーションにJMXでアクセスることができます。

今回はモニタリング対象のJavaアプリケーションとして、たまたまサーバに起動していたkafkaを用いて動かしてみます。

なお、手順は以下の記事を参考にしました。

play + jolokia + hawtio

jolokia

jolokiaをダウンロードする

以下のサイトからjolokiaのAgentをダウンロードします。

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) Javaアプリケーションに組み込んでjolokiaを実行する

Javaの起動オプションに以下を追加します。
「jolokia-jvm-1.6.0-agent.jar」のパスは環境に合わせて変更します。

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

Jolokiaのバージョン確認

jolokiaにhttpでアクセスして、バージョン情報を取得してみます。

# 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 ~]# 

メトリクスを取得してみる

次に、jolokiaにhttpでアクセスして、メトリクスを取得してみます。

# 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」をダウンロードしました。

hawtioを実行する

以下のコマンドでhawtioを実行します。
「--port 8090」でhawtioが使用するポートを指定しています。
※デフォルトだと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は以下になります。

ブラウザで開くと以下のような画面が表示されます。

早速、jolokiaに接続してみます。

まずは、「Add connection」ボタンをクリックする。
jolokia接続情報を入力するダイアログが表示されるので、画面のように入力する。

「Test Connection」をクリックするとjolokiaのユーザIDとパスワードの入力ダイアログが表示されるので、jolokia起動時に設定した「jolokia」を入力します。

「Connected successfully」と表示されれば成功。
最後に「Add」ボタンを押下する。

Kafkaを見てみる

「Connect」ボタンを押下すると、別ウィンドウが起動します。

JMXのタブを選択すると、kafkaのMBeanの情報を見ることができます。

RuntimeでJVMのSystem Properties、スレッド、Class Histogramなどの情報を見ることができます。

参考