Javaアプリケーションの性能管理Glowrootの環境構築

IT系

Glowroot(グロウルート)は、Javaアプリケーション向けのオープンソースなAPM(アプリケーション・パフォーマンス管理・監視)ツールです。

Javaで構築されたWebサービスやアプリケーションの動作状況をリアルタイムで可視化し、ボトルネックの特定やトラブルシューティングを容易にするために設計されています。

主な特徴

  • 非常に低いオーバーヘッド: アプリケーションの実行速度やリソース(CPU、メモリ)への影響(負荷)を最小限に抑えるように作られています。
  • 簡単な導入: 基本的に対象のJavaアプリケーションを起動する際、オプションとして -javaagent:path/to/glowroot.jar を追加するだけで計測を開始できます。
  • ブラウザベースのUI: デフォルトでポート 4000(http://localhost:4000 など)にWebベースの管理画面が用意され、直感的にグラフやデータを閲覧できます。

主要な機能

  • トランザクション分析: 各APIのレスポンスタイム、スループット、時間のかかっている「遅いトレース(Slow Traces)」を追跡できます。
  • SQL・クエリの監視: データベースへのアクセスにかかった時間や、実行されたクエリの詳細を特定できます。
  • エラー情報のキャッチ: 発生したHTTPエラー(500や404エラーなど)やスタックトレースを記録・表示します。
  • JVMメトリクスの可視化: ヒープメモリの使用量スレッド数、ガベージコレクション(GC)の発生状況を監視できるほか、管理画面から直接スレッドダンプやヒープダンプを取得することも可能です。

2つの運用モード

  1. 埋め込みコレクターモード (Embedded-collector): 単一のスタンドアロンアプリケーション向け。データはアプリ内のローカルディレクトリに保存されます。 (今回はこちらをためします)
  2. 中央コレクターモード (Central-collector): 分散環境やマイクロサービス向け。各サーバーに配置したエージェントから「中央コレクター」にデータを集約し、Apache Cassandra などのデータベースに保存します。(今回はこちらは見送りです)

まず、公式サイトからAgentのZipファイルをダウンロードしてきます。

ZIPファイルを展開すると以下のようなファイルとディレクトリがあります。

設定は、Javaのアプリケーションの起動オプションに -javaagent:pathto/glowroot.jar として登録するだけです。最初に起動した際に、上記ホルダに、 admin.json、config.json、data/、lib/、logs/、tmp/ のファイルとディレクトリ作成されます。

初期設定では、 127.0.0.1:4000 として起動しますが、リモートからアクセスさせたい場合は、 admin.json を以下のように変更してアプリを起動し直します。

  "web": {
    "port": 4000,
    "bindAddress": " 0.0.0.0",      ← "127.0.0.1" を、"0.0.0.0" に変更する
    "contextPath": "/",
    "sessionTimeoutMinutes": 30,
    "sessionCookieName": "GLOWROOT_SESSION_ID"
  },

単に、Javaのアプリを起動させるだけだと負荷をかけたり時間のかかる処理をさせたりエラーやFailを発生させるのは結構大変なのですが、前の記事でつかったpinpointの中にquickstartという、試験用ツールがありこれを使うと簡単に問題状態を発生させどんな問題が発生した時にグラフがどう変化するかを確認できます。quickstartのツールの作り方については、前の記事を参考にしてください。ここでは、もうjarファイルが生成されている前提で進めます。

では、さっそくアプリを起動します。-javaagent: は一番先頭に指定してください。

% cd /opt
% unzip glowroot-0.14.0-dist.zip
% ls /opt/glowroot/
LICENSE  NOTICE  glowroot.jar  lib
% cd pinpoint-4.0.0
% java -javaagent:/opt/glowroot/glowroot.jar -Dserver.port=18080 \
      -jar ./quickstart/testapp/target/pinpoint-quickstart-testapp-4.0.0.jar
<snip>
2026-11-04 08:12:55.322 INFO  org.glowroot - UI listening on 127.0.0.1:4000 (to access the UI from remote machines, change the bind address to 0.0.0.0, either in the Glowroot UI under Configuration > Web or directly in the admin.json file, and then restart JVM to take effect)
^C
% vi /opt/glowroot/admin.json
"bindAddress": "0.0.0.0" に変更
もう一度起動
% java -javaagent:/opt/glowroot/glowroot.jar -Dserver.port=18080 \
      -jar ./quickstart/testapp/target/pinpoint-quickstart-testapp-4.0.0.jar
<snip>
2026-11-04 08:16:52.126 INFO  org.glowroot - UI listening on 0.0.0.0:4000

http://192.168.1.203:18080/
 敢て -Dserver.portでアプリのポート番号を変更しています。

上記で、sleepで時間のかかる処理を模擬したり、cpu負荷をかけたり、メモリを沢山使ったり、error やfailを発生させたりすることが出来ます。

glowrootはアプリと同じIPのポート4000で起動しています。admin.jsonを書き換えるまでは127.0.0.1つまりローカルホストからしかアクセスできませんが0.0.0.0でアプリとは別のホストからアクセスすることが出来るようになります。

http://192.168.1.203:4000/
で以下のような画面が表示されます。

以上でとりあえずグラフがか確認できるようになりました!どんな問題が発生した時にグラフにどう表れるか、どのように分析すればよいかはquickstartアプリをクリックしては戻ってグラフを見てを繰り返してコツをつかんでくださいませ!

タイトルとURLをコピーしました