LoginSignup
6
4

More than 5 years have passed since last update.

Elasticsearch 6.3.0 リリース記念 APM JavaAgentでintra-martの状態を見てみる

Posted at

概要

Elasticsearch6.3.0がリリースされ、クラスメソッドさんなど多くのブログで新しい機能があらかた紹介されたところです。
今回は、X-Pack(Basic)に含まれるAPM(Application Performance Management)を試してみようと思います。

ただ、その紹介だけなら他のブログで触れられているので、n番煎じで面白味が少ないので、
誰もやってないだろう特殊性を出すために以下の2点を付け加えます。

  • α版のJava Agentを使う
  • 日本国内では、あんまりメジャーでない(と思う) resinをAPサーバとして使う

resinは、intra-martでよく見かけるやつですね。それ以外で見たことはまだありません。
今回はintra-martに仕込んだ例を示します。
NewRelicやDatadogでやればよろしい、というのはもっともなご意見ですが、Elastic Stackの勉強がてらにやっておりますので、そこはご容赦ください。

resinがメジャーでないとした理由は、「Elastic APM Java survey」にresinの選択肢がなかったためです。

環境

product version
Elasticsearch 6.3.0 (Windows版)
kibana 6.3.0 (Windows版)
Elastic APM 6.3.0 (Windows版)
resin 4.0.56

Elastic APMとは

簡単におさらいですが、何ができるの?というのは、公式サイトの記述やクラスメソッドさんのブログを参考にすると、イメージが掴めると思います。まずは公式を見るのが一番ですな。

APMサーバとAgentを用意すればいいんだな?となりますね。
APMサーバは、今回Windows版を使用します。

JavaAgentを用意しよう

kibanaにログイン後、APMのメニューを最初に開くと、Setup手順を紹介した画面が表示されます。
ここのAPM Agentsを見ていただくと、Node.js、Djanco・・・JSとタブがありますが、Javaはまだありません。

2.png

しかし、公式にマニュアルはあるので、ここを参考にしてAgentを取得します。
https://www.elastic.co/guide/en/apm/agent/java/current/index.html

3.png

これを書いている時点では「elastic-apm-agent-0.5.1.jar」が取得できました。
http://repo1.maven.org/maven2/co/elastic/apm/elastic-apm-agent/0.5.1/

いざ実践!

resinのJVM引数を変更する

公式のConfigurationの記述を確認します。
https://www.elastic.co/guide/en/apm/agent/java/current/configuration.html

In order to get started with Elastic APM, the most important configuration options are service_name (required), server_url and application_packages.

そして例として、このように書かれています。

-Delastic.apm.service_name=my-cool-service
-Delastic.apm.application_packages=org.example
-Delastic.apm.server_url=http://localhost:8300

これをresinのJVM引数に設定しましょう。

resinのインストール場所/conf/resin.propertiesを開いて、javaagentの設定と、上のapmの設定の記述を追加します。

4.png

Windows版のAPMサーバを立ち上げて待ち受けポートを見たところ、8200番だったため、今回はserver_urlを8200として指定しました。

この記述が終ったらファイルを保存し、resinを起動しなおします。

アプリケーションにアクセスする

いつものようにアプリケーションにアクセスし、いろんなGETやPOSTリクエストを送ります。

APM UIの確認

kibanaのAPMメニューを押すと、さきほど-Delastic.apm.service_nameで指定したものが現れました。
Agent列を確認すると、「java」とあり、JavaAgnetで送られたもの、と識別できます。

5.png

Nameのところがリンクとなっているので、クリックすると、次の画面に遷移します。

6.png

POSTのリクエストに注目することにして、POSTの文字列のリンクをクリックします。
Response time distributionに注目すると、濃い青色になっている(2,000ms付近の)ものが現在選択されているもので、
Transaction sampleに詳細が表示されています。

6秒を越えているリクエストが1つあるのが気になりますね。
ここを選択してみます。

7.png

Timeline(not Timelion)を見ると、処理が開始されてから終了するまで、どんな処理をやっていたのか、を時系列で可視化してくれます。
いっぱいSELECT文を投げていることが分かります。
8.png

INSERTの処理に時間がかかってるな!ということが見えたり。
9.png

その部分をクリックすると、どんなINSERT文だったのか、全体に占める処理時間の割合などを教えてくれます。

10.png

ずーっと下にスクロールしていくと、3秒ぐらい空白期間があることが分かりました。
11.png

帳票サーバでPDFをしこたま作っている時間、というのがこの空白期間にあたるのですが、
可視化した結果、6秒ぐらいの処理のうち、半分ぐらいの時間が帳票の出力にあてられていた、と考えることができました。

まとめに代えての雑感

もう処理数が多すぎて、遅いって言われてもどこが遅いのかワケワカメ! 汚いソースを追うのは嫌だ!
という方にとって、遅いSQLがあるのか、サーバのどこかの処理で遅いのか、外部のサービス呼び出しで遅いのかなどなど、
目星をつけるのに良いツールだと思います。

既にElastic製品をお使いの方であれば、あとはJavaAgentを仕込むだけで簡単に始められるという点も良いですね。

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4