Java
spring
micrometer

Spring Boot + Micrometer + Prometheus Exporter で任意のメトリクスを簡単に取得する

ここでは Spring Boot + Micrometer + Prometheus Exporter の組みわせで任意のメトリクスの取得を行う方法について書きます。


Settings

Spring Boot が導入されている環境で Micrometer を有効にするには、pom や gradle などで必要なライブラリを設定します。


example

ここでは pom の例を書きます。


pom.xml

<!-- 必須 -->

<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>${micrometer.version}</version>
</dependency>
<!-- spring boot 1.5x を使っている場合は必要 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-spring-legacy</artifactId>
<version>${micrometer.version}</version>
</dependency>
<!-- 以下、Prometheus Exporter を有効にする場合は必要 -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>${micrometer.version}</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient</artifactId>
<version>${prometheus.version}</version>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_common</artifactId>
<version>${prometheus.version}</version>
</dependency>


micrometer-core

micrometer を使用する際に必須となるライブラリです。


micrometer-spring-legacy

micormeter は Spring Boot 2,x から公式のメトリクスツールの扱いになっています。その関係もあり、2.x より古いバージョン(1.5.x)を使用する場合は、バックポート用のライブラリが必要です。1.5.xの環境で動かしているのであればこちらを指定します。


micrometer-registry-prometheus / simpleclient /simpleclient_common

取得したメトリクスをどのような形で伝搬・表示させるかについては、micrometer-registry-** というライブラリで任意のものを選択します。

ここでは Prometheus Exporter を使いたいので、prometheus 関連の registry を指定します。

また、prometheus 関連の処理を Java で行う場合は、prometheus が提供しているライブラリ(simpleclient、simpleclient_common)も指定する必要があります。


Code

アプリケーションコードへの埋め込み方は以下です。


Counter を初期化

初期化した Counter を用いて increment


SadaController.java

@RestController

public class SadaController {
@Autowired
protected MeterRegistry meterRegistry;

private Counter metricsCounter;

@PostConstruct
public void init() {
metricsCounter = meterRegistry.counter("api.sada.count"); // initialize
}

@RequestMapping(path = "/sada", method = { RequestMethod.GET })
@ApiOperation(value = "sada")
@ApiResponses(value = { @ApiResponse(code = 200, response = String.class, message = "echo") })
public String sada(@RequestParam(name = "echo", required = false, defaultValue = "masashi") @Valid String echo) {
metricsCounter.increment(); // increment
return echo;
}



Prometheus Exporter

micrometer-registry-prometheus をライブラリに追加していると、Spring Boot 起動時に自動的に /prometheus エンドポイントが有効になります。

標準で JVM や Thread の状態についてメトリクスが取得できるようになっています。

それに加えて、上述のようなカスタムメトリクスについても、Prometheus Exporter 経由で取得可能となります。

# TYPE api_sada_count_total counter

api_sada_count_total 15.0

上記は、上述の Controller を呼び出した回数が、メトリクスとして取得された例です。

このような形で取得したメトリクスについては、Prometheus や Datadog に取り込むことが可能です。


まとめにかえて

Micrometer の最もシンプルな使い方は以上ですが、他にも多種多様な機能があるので、詳しく知りたい方は公式ドキュメントに Go だ。

https://micrometer.io/docs