JavaではJMXという仕組みがあり、外部から任意の値を取得したり、設定したりすることができるようになっています。
New RelicのJava agentもデフォルトでJMX経由で各種値が取れるようになっております。
ただし、お客様自身でMBeanを作成して外部取得できるようにしていたり、前述のページに記載のないメトリクスなど取得されたいケースがあります。その場合は、カスタムJMX YAMLを使って取得していただくことができます。本ブログでは、カスタムJMXに記載するための情報の取得及び、設定に関して記載します。
前提
- New RelicのJava agentがすでに計装済みでJVMのデータが取得できる状態になっている
- Javaアプリケーションがローカルで起動できるあるいは、リモートで起動する場合SSH経由でポートフォワーディングしてJMXポートに接続できる
- ローカルにJavaがインストールされている
なお本ブログでは、Petclinicを用いて確認しています。
jconsoleを使った情報の取得
JMX経由でのデータ取得の場合、オブジェクト名と属性名が必要になります。これらをjconsoleを使って取得します。まず、対象となるJavaアプリケーションをローカルあるいは、リモートで起動してください。続いて、ローカルのterminalからjconsoleとタイプして、jconsoleを起動してください。すると次のようなUIが表示されます。
ローカルでJavaアプリを起動している場合は対象のプロセスを選択し、リモートで起動している場合は接続に必要な情報を入力して接続を選択してください。
SSL接続ができない場合、SSLなしでの接続が促されます。今回SSL対応していないのでSSLなしで接続します。すると次のような画面が表示されるかと思います。
画面右上のMBeansのタブを選択すると、Mbeanの情報を確認してもらうことができます。
今回は、httpリクエストのリクエスト数や最大時間を取得してみたいと思います。jconsoleの画面内左側にてTomcat > GlobalRequestProcessor > "http-nio-8080" を開くと以下のように確認できると思います。
"http-nio-8080"を選択し、画面右側に表示されるObjectNameをコピーしてください。
今回は、Tomcat:type=GlobalRequestProcessor,name="http-nio-8080"
になります。
続いて、属性名もコピーします。今回はmaxTimeとrequestCountです。
なお、対象の属性名を左画面で選択すると、次の図のように現在の値などが確認できます。
どちらも数値ですが、maxTimeは最大値の数値が記録され、requestCountは積算のリクエスト数が記録されることに注意してください。
設定の追加方法
続いて、手順に従い設定を追加します。
まず、対象のアプリのagent(newrelic.jar)が保存されているフォルダ直下にextensionsというフォルダを作成してください。
作成したextensionsフォルダの下に、.ymlという拡張子をもつファイルを作成してください。(なお、設定で変更されている場合は、extensions.dirにて設定したフォルダに作成してください)
作成した、.ymlファイルをテキストエディタ等で開き、先程コピーした値を使って以下のように設定に記載します。
object_nameには、先程取得したオブジェクト名、attributesには先ほど取得した属性名を設定してください。なお、requestCountは前述の通り積算された値のため、typeにmonotonically_increasingを設定しています。monotonically_increasingを設定することで、差分の数のみをMetricとして取得することができます。またmaxTimeは単純なそれまでの最大値のため、simpleを設定しています。
こちらを保存し、設定を反映するため、Javaアプリケーションを再起動してください。
動作確認
Javaアプリケーションを再起動後少し経過すると、UI上で確認できるようになります。対象のアプリのMetric explorerで「jmx/tomcat」などと入力すると以下のように表示されることが確認できるかと思います。
なお、右側で表示されるチャートに関して、デフォルトで1,000倍されていることにご注意ください。特にrequestCountは1,000倍する必要はないので、以下のようなクエリーでご確認いただくのが良いかと思います。
もし、正しく設定したのに、うまく取得できないなどあれば、お気軽にお問い合わせください。
이 블로그에 표현된 견해는 저자의 견해이며 반드시 New Relic의 견해를 반영하는 것은 아닙니다. 저자가 제공하는 모든 솔루션은 환경에 따라 다르며 New Relic에서 제공하는 상용 솔루션이나 지원의 일부가 아닙니다. 이 블로그 게시물과 관련된 질문 및 지원이 필요한 경우 Explorers Hub(discuss.newrelic.com)에서만 참여하십시오. 이 블로그에는 타사 사이트의 콘텐츠에 대한 링크가 포함될 수 있습니다. 이러한 링크를 제공함으로써 New Relic은 해당 사이트에서 사용할 수 있는 정보, 보기 또는 제품을 채택, 보증, 승인 또는 보증하지 않습니다.