1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[小ネタ] ElasticのAPMでコードに手を入れずにメソッド監視する方法

Last updated at Posted at 2022-12-05

はじめに

本記事はElasticのAPM Java Agentにおいて使用できる技になります。
執筆時点のJava Agentのバージョン1.34.1で試しています。

やりたいこと

Elastic APM Java Agentをデフォルトの状態で使用すると、トレースの中のスパンとして可視化されるのはサポートされているテクノロジーのポイントとなるメソッドです。

例としてこの簡単なHello Worldコードを使います。

package com.example.springbootdocker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringBootDockerApplication {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootDockerApplication.class, args);
	}

    @RequestMapping("/")
    public String home() {
        randomSleep();
        return "Hello World!";
    }
    private void randomSleep() {
        try {
            Thread.sleep((long)(Math.random() * 1000));
        } catch (java.lang.InterruptedException e) {
        }
    }
}

上記コードはデフォルトでは以下のように可視化されます。Spring BootのWebリクエストのエントリポイントとして定義されているメソッドが可視化されています。
image.png

しかし、例えば業務アプリのコードの特定のクラスメソッドを可視化し、性能を見たい場合があると思います。サンプルコードだと、プライベートメソッドrandonSleepを追加で可視化するように。

image.png

コードの変更が可能ならJava AgentのAPIを使って明示的に可視化可能ですが、今回はコード変更が難しい場合のauto instrumentationの方法について紹介します。

手順

手順は簡単で、以下のelasticapm.propertiesファイルを作成し、Java AgentのJARファイルelastic-apm-agent.jarと同じディレクトリに配置するだけです。

elasticapm.properties
trace_methods=com.example.springbootdocker.SpringBootDockerApplication#randomSleep

記述の方法は以下のドキュメントに詳しくあります。
https://www.elastic.co/guide/en/apm/agent/java/current/config-core.html#config-trace-methods

リストとして複数を設定する時の方法が読んだだけではわからなかったのですが、以下のようにカンマ区切りで可能でした。また、改行する際はバックスラッシュで可能でした。

elasticapm.properties
trace_methods=com.example.springbootdocker.SpringBootDockerApplication#randomSleep1, \
com.example.springbootdocker.SpringBootDockerApplication#randomSleep2, \
com.example.springbootdocker.SpringBootDockerApplication#randomSleep3 \

image.png

まとめ

Elastic APMでの任意のJavaメソッドの性能可視化の方法について紹介しました。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?