ここでは Spring Boot + Micrometer + Prometheus Exporter の組みわせで任意のメトリクスの取得を行う方法について書きます。
Settings
Spring Boot が導入されている環境で Micrometer を有効にするには、pom や gradle などで必要なライブラリを設定します。
example
ここでは pom の例を書きます。
<!-- 必須 -->
<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
@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 だ。