Micrometerアダプタ

Micrometer(外部サイト、英語) を使用したメトリクス収集を行うためのアダプタを提供する。

本アダプタを使うことで、次のようなことができるようになり、アプリケーションの運用監視がしやすくなるというメリットが得られる。

モジュール一覧

<!-- Micrometerアダプタ -->
<dependency>
  <groupId>com.nablarch.integration</groupId>
  <artifactId>nablarch-micrometer-adaptor</artifactId>
</dependency>

補足

Micrometerのバージョン1.5.4を使用してテストを行っている。 バージョンを変更する場合は、プロジェクト側でテストを行い問題ないことを確認すること。

Micrometerアダプタを使用するための設定を行う

Micrometerでメトリクスを収集するためには、 レジストリ(外部サイト、英語) と呼ばれるクラスを作成する必要がある。 本アダプタでは、このレジストリを システムリポジトリ に登録するための ComponentFactory を提供している。

ここでは、 LoggingMeterRegistry(外部サイト、英語) をコンポーネントとして登録する LoggingMeterRegistryFactory を例にして設定方法について説明する。

補足

LoggingMeterRegistry(外部サイト、英語) は、 SLF4J または Java Util Logging を使ってメトリクスをログに出力する機能を提供する。 特に設定をしていない場合は、 Java Util Logging を使って標準出力にメトリクスが出力されるため、簡単な動作確認をするのに適している。

他のレジストリは連携先のサービスの準備や、収集したメトリクスを出力する実装を作りこむなどの手間がかかる。 このため、この説明では最も簡単に動作を確認できる LoggingMeterRegistry(外部サイト、英語) を使用している。

なお、ベースとなるアプリケーションには ウェブアプリケーションのExample(外部サイト) を使用する。

DefaultMeterBinderListProviderをコンポーネントとして宣言する

Micrometerには、 MeterBinder(外部サイト、英語) というインタフェースが存在する。

JVMのメモリ使用量やCPU使用率など、よく利用するメトリクスの収集は、このインタフェースを実装したクラスとしてあらかじめ用意されている。 (例:JVMのメモリ使用量は JvmMemoryMetrics(外部サイト、英語) 、CPU使用率は ProcessorMetrics(外部サイト、英語)

DefaultMeterBinderListProvider は、この MeterBinder(外部サイト、英語) のリストを提供するクラスで、本クラスを使用することでJVMのメモリ使用量やCPU使用率などのメトリクスを収集できるようになる。

まず src/main/resources/web-component-configuration.xml に、この DefaultMeterBinderListProvider の宣言を追加する。

<component name="meterBinderListProvider"
           class="nablarch.integration.micrometer.DefaultMeterBinderListProvider" />

収集されるメトリクスの具体的な説明については、 DefaultMeterBinderListProviderで収集されるメトリクス を参照。

DefaultMeterBinderListProviderを廃棄処理対象にする

DefaultMeterBinderListProvider は廃棄処理が必要なコンポーネントなので、下記のように廃棄処理対象として宣言する。

<component name="disposer"
    class="nablarch.core.repository.disposal.BasicApplicationDisposer">

  <property name="disposableList">
    <list>
      <component-ref name="meterBinderListProvider"/>
    </list>
  </property>

</component>

オブジェクトの廃棄処理については、 オブジェクトの廃棄処理を行う を参照

レジストリのファクトリクラスをコンポーネントとして宣言する

<component class="nablarch.integration.micrometer.logging.LoggingMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />
</component>

次に、使用するレジストリごとに用意されているファクトリクラスをコンポーネントとして宣言する。

このとき、 meterBinderListProviderapplicationDisposer の2つのプロパティを設定する。 それぞれのプロパティには、上で宣言した DefaultMeterBinderListProviderBasicApplicationDisposer を設定する。

なお、本アダプタが提供しているファクトリクラスについては レジストリファクトリ に一覧を記載している。

設定ファイルを作成する

最後に、 src/main/resources の下に micrometer.properties という名前のテキストファイルを作成する。

ここでは、中身を次のように記述する。

# 5秒ごとにメトリクスを出力する
nablarch.micrometer.logging.step=5s

重要

micrometer.properties は内容が空であっても必ず配置しなければならない。

実行結果

以上で、 LoggingMeterRegistry を用いたメトリクスの収集ができるようになる。

アプリケーションを起動すると、以下のように収集されたメトリクスが標準出力に出力されていることを確認できる。

2020-09-04 15:33:40.689 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.gc.count{memory.manager.name=PS Scavenge} throughput=2.6/s
2020-09-04 15:33:40.690 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.gc.count{memory.manager.name=PS MarkSweep} throughput=0.4/s
2020-09-04 15:33:40.691 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.buffer.count{id=mapped} value=0 buffers
2020-09-04 15:33:40.691 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.buffer.count{id=direct} value=2 buffers
2020-09-04 15:33:40.692 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.buffer.memory.used{id=direct} value=124 KiB
2020-09-04 15:33:40.692 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.buffer.memory.used{id=mapped} value=0 B
2020-09-04 15:33:40.692 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.buffer.total.capacity{id=mapped} value=0 B
2020-09-04 15:33:40.692 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.buffer.total.capacity{id=direct} value=124 KiB
2020-09-04 15:33:40.693 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.classes.loaded{} value=9932 classes
2020-09-04 15:33:40.693 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.gc.live.data.size{} value=0 B
2020-09-04 15:33:40.693 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.gc.max.data.size{} value=2.65918 GiB
2020-09-04 15:33:40.694 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.committed{area=heap,id=PS Old Gen} value=182.5 MiB
2020-09-04 15:33:40.694 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.committed{area=heap,id=PS Survivor Space} value=44 MiB
2020-09-04 15:33:40.694 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.committed{area=heap,id=PS Eden Space} value=197 MiB
2020-09-04 15:33:40.694 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.committed{area=nonheap,id=Code Cache} value=29.125 MiB
2020-09-04 15:33:40.694 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.committed{area=nonheap,id=Compressed Class Space} value=6.796875 MiB
2020-09-04 15:33:40.695 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.committed{area=nonheap,id=Metaspace} value=55.789062 MiB
2020-09-04 15:33:40.695 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.max{area=heap,id=PS Old Gen} value=2.65918 GiB
2020-09-04 15:33:40.695 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.max{area=heap,id=PS Survivor Space} value=44 MiB
2020-09-04 15:33:40.696 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.max{area=nonheap,id=Code Cache} value=240 MiB
2020-09-04 15:33:40.696 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.max{area=nonheap,id=Metaspace} value=-1 B
2020-09-04 15:33:40.696 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.max{area=heap,id=PS Eden Space} value=1.243652 GiB
2020-09-04 15:33:40.696 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.max{area=nonheap,id=Compressed Class Space} value=1 GiB
2020-09-04 15:33:40.697 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.used{area=nonheap,id=Code Cache} value=28.618713 MiB
2020-09-04 15:33:40.697 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.used{area=nonheap,id=Compressed Class Space} value=6.270714 MiB
2020-09-04 15:33:40.697 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.used{area=nonheap,id=Metaspace} value=54.118324 MiB
2020-09-04 15:33:40.698 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.used{area=heap,id=PS Old Gen} value=69.320663 MiB
2020-09-04 15:33:40.698 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.used{area=heap,id=PS Survivor Space} value=7.926674 MiB
2020-09-04 15:33:40.698 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.memory.used{area=heap,id=PS Eden Space} value=171.750542 MiB
2020-09-04 15:33:40.698 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.daemon{} value=28 threads
2020-09-04 15:33:40.698 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.live{} value=29 threads
2020-09-04 15:33:40.699 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.peak{} value=31 threads
2020-09-04 15:33:40.702 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.states{state=blocked} value=0 threads
2020-09-04 15:33:40.703 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.states{state=runnable} value=9 threads
2020-09-04 15:33:40.703 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.states{state=new} value=0 threads
2020-09-04 15:33:40.703 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.states{state=timed-waiting} value=3 threads
2020-09-04 15:33:40.703 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.states{state=terminated} value=0 threads
2020-09-04 15:33:40.704 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: jvm.threads.states{state=waiting} value=17 threads
2020-09-04 15:33:41.199 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: process.cpu.usage{} value=0.111672
2020-09-04 15:33:41.199 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: process.start.time{} value=444222h 33m 14.544s
2020-09-04 15:33:41.199 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: process.uptime{} value=26.729s
2020-09-04 15:33:41.200 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: system.cpu.count{} value=8
2020-09-04 15:33:41.200 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: system.cpu.usage{} value=0.394545

レジストリファクトリ

本アダプタでは、以下のレジストリのファクトリクラスを提供している。

レジストリ ファクトリクラス 提供しているアダプタのバージョン
SimpleMeterRegistry(外部サイト、英語) SimpleMeterRegistryFactory 1.0.0 以上
LoggingMeterRegistry(外部サイト、英語) LoggingMeterRegistryFactory 1.0.0 以上
CloudWatchMeterRegistry(外部サイト、英語) CloudWatchMeterRegistryFactory 1.0.0 以上
DatadogMeterRegistry(外部サイト、英語) DatadogMeterRegistryFactory 1.0.0 以上
StatsdMeterRegistry(外部サイト、英語) StatsdMeterRegistryFactory 1.0.0 以上

設定ファイル

配置場所

本アダプタの設定ファイルは、クラスパス直下に micrometer.properties という名前で配置されるように作成する。

フォーマット

このファイルに記載する設定は、以下のフォーマットで記述する。

nablarch.micrometer.<subPrefix>.<key>=設定する値

ここで、 <subPrefix> に設定する値は、使用するレジストリファクトリごとに異なる値を指定する。

レジストリファクトリごとに、 <subPrefix> で指定する値を下記表に記載する。

レジストリファクトリ subPrefix
SimpleMeterRegistryFactory simple
LoggingMeterRegistryFactory logging
CloudWatchMeterRegistryFactory cloudwatch
DatadogMeterRegistryFactory datadog
StatsdMeterRegistryFactory statsd

また、 <key> には Micrometer がレジストリごとに提供している 設定クラス(外部サイト、英語) で定義されたメソッドと同じ名前を指定する。

例えば、 DatadogMeterRegistry(外部サイト、英語) に対しては DatadogConfig(外部サイト、英語) という設定クラスが用意されている。 そして、この設定クラスには apyKey(外部サイト、英語) というメソッドが定義されている。

したがって、 micrometer.properties に次のように記述することで、 apiKey を設定できる。

nablarch.micrometer.datadog.apiKey=XXXXXXXXXXXXXXXXXXXX

OS環境変数・システムプロパティで上書きする

micrometer.properties に記述した設定の値は、OS環境変数およびシステムプロパティで上書きできる。

設定値は、優先度の高い順に次の順番で採用される。

  1. システムプロパティで指定した値
  2. OS環境変数で指定した値
  3. micrometer.properties の設定値

例えば、次のような条件で設定したとする。

micrometer.properties

nablarch.micrometer.example.one=PROPERTIES
nablarch.micrometer.example.two=PROPERTIES
nablarch.micrometer.example.three=PROPERTIES

OS環境変数

$ export NABLARCH_MICROMETER_EXAMPLE_TWO=OS_ENV

$ export NABLARCH_MICROMETER_EXAMPLE_THREE=OS_ENV

システムプロパティ

-Dnablarch.micrometer.example.three=SYSTEM_PROP

この場合、それぞれの設定値は最終的に次の値が採用される。

key 採用される値
one PROPERTIES
two OS_ENV
three SYSTEM_PROP

OS環境変数で上書きするときの名前のルールについては、 OS環境変数の名前について を参照。

設定のプレフィックスを変更する

設定のプレフィックス (nablarch.micrometer.<subPrefix>) は、各レジストリファクトリごとに prefix プロパティを指定することで変更できる。

以下に、プレフィックスを変更する例を記載する。

<component name="meterRegistry" class="nablarch.integration.micrometer.logging.LoggingMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />

  <!-- prefix プロパティに任意のプレフィックスを設定する -->
  <property name="prefix" value="sample.prefix" />
</component>

この場合、 micrometer.properties は次のように設定できるようになる。

sample.prefix.step=10s

設定ファイルの場所を変更する

設定ファイル(micrometer.properties)の場所は、以下の方法で変更できる。

まず、レジストリファクトリの xmlConfigPath プロパティに、設定ファイルを読み込むXMLファイルのパスを指定する。

<component name="meterRegistry" class="nablarch.integration.micrometer.logging.LoggingMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />

  <!-- 設定ファイルを読み込むXMLファイルのパスを指定 -->
  <property name="xmlConfigPath" value="config/metrics.xml" />
</component>

そして、 xmlConfigPath プロパティで指定した場所に、設定ファイルを読み込むXMLファイルを配置する。 下記設定では、クラスパス内の config/metrics.properties が設定ファイルとして読み込まれるようになる。

<?xml version="1.0" encoding="UTF-8"?>
<component-configuration
        xmlns="http://tis.co.jp/nablarch/component-configuration"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://tis.co.jp/nablarch/component-configuration https://nablarch.github.io/schema/component-configuration.xsd">

  <!-- Micrometerアダプタの設定を読み込む -->
  <config-file file="config/metrics.properties" />

</component-configuration>

補足

このXMLファイルはコンポーネント設定ファイルと同じ書式で記述できる。

ただし、このファイルでコンポーネントを定義しても、システムリポジトリから参照を取得することはできない。

DefaultMeterBinderListProviderで収集されるメトリクス

DefaultMeterBinderListProvider が生成する MeterBinder(外部サイト、英語) のリストには、以下のクラスが含まれている。

これにより、下記メトリクスが収集されるようになる。

メトリクス名 説明
jvm.buffer.count バッファプール内のバッファの数
jvm.buffer.memory.used バッファプールの使用量
jvm.buffer.total.capacity バッファプールの合計容量
jvm.memory.used メモリープールのメモリー使用量
jvm.memory.committed メモリープールのコミットされたメモリー量
jvm.memory.max メモリープールの最大メモリー量
jvm.gc.max.data.size OLD領域の最大メモリー量
jvm.gc.live.data.size Full GC 後の OLD 領域のメモリー使用量
jvm.gc.memory.promoted GC 前後で増加した、 OLD 領域のメモリー使用量の増分
jvm.gc.memory.allocated 前回の GC 後から今回の GC までの、 Young 領域のメモリー使用量の増分
jvm.gc.concurrent.phase.time コンカレントフェーズの処理時間
jvm.gc.pause GC の一時停止に費やされた時間
jvm.threads.peak スレッド数のピーク数
jvm.threads.daemon 現在のデーモンスレッドの数
jvm.threads.live 現在の非デーモンスレッドの数
jvm.threads.states 現在のスレッドの状態ごとの数
jvm.classes.loaded 現在ロードされているクラスの数
jvm.classes.unloaded JVM が起動してから今までにアンロードされたクラスの数
system.cpu.count JVM で使用できるプロセッサーの数
system.load.average.1m 最後の1分のシステム負荷平均 (参考: OperatingSystemMXBean(外部サイト)
system.cpu.usage システム全体の直近の CPU 使用率
process.cpu.usage JVM の直近のCPU使用率
process.files.open 開いているファイルディスクリプタの数
process.files.max ファイルディスクリプタの最大数
process.uptime JVM の稼働時間
process.start.time JVM の起動時刻(UNIX 時間)
jvm.gc.count GC の回数

実際に収集されるメトリクスのイメージは 実行結果 を参照。

共通のタグを設定する

レジストリファクトリの tags プロパティで、すべてのメトリクスに共通するタグを設定できる。

この機能は、アプリケーションが稼働しているホスト、インスタンス、リージョンなどを識別できる情報を設定するといった用途として使用できる。

以下に設定方法を記載する。

<component name="meterRegistry" class="nablarch.integration.micrometer.logging.LoggingMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />

  <!-- tags プロパティで共通のタグを設定 -->
  <property name="tags">
    <map>
      <entry key="foo" value="FOO" />
      <entry key="bar" value="BAR" />
    </map>
  </property>
</component>

tags プロパティの型は Map<String, String> となっており、 <map> タグを使って設定できる。 このとき、マップのキーがタグの名前、マップの値がタグの値に対応付けられる。

上記設定の場合、収集されるメトリクスは次のようになる。

(省略)
2020-09-04 17:30:06.656 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: process.start.time{bar=BAR,foo=FOO} value=444224h 29m 38.875000064s
2020-09-04 17:30:06.656 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: process.uptime{bar=BAR,foo=FOO} value=27.849s
2020-09-04 17:30:06.656 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: system.cpu.count{bar=BAR,foo=FOO} value=8
2020-09-04 17:30:06.657 [INFO ]      i.m.c.i.l.LoggingMeterRegistry: system.cpu.usage{bar=BAR,foo=FOO} value=0.475654

全てのメトリクスに、 foo=FOO, bar=BAR のタグが設定されていることが確認できる。

監視サービスと連携する

監視サービスと連携するためには、大きく次の設定を行う必要がある。

  1. 監視サービスごとに用意された Micrometer のモジュールを依存関係に追加する
  2. 監視サービス用のレジストリファクトリをコンポーネントとして定義する
  3. その他、監視サービスごとに独自の設定を行う

ここでは、それぞれの監視サービスと連携する方法について説明する。

Datadog と連携する

依存関係を追加する
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-datadog</artifactId>
  <version>1.5.4</version>
</dependency>
レジストリファクトリを宣言する
<component name="meterRegistry" class="nablarch.integration.micrometer.datadog.DatadogMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />
</component>
APIキーを設定する
nablarch.micrometer.datadog.apiKey=XXXXXXXXXXXXXXXX

API キーは nablarch.micrometer.datadog.apyKey で設定できる。

その他の設定については DatadogConfig(外部サイト、英語) を参照。

CloudWatch と連携する

依存関係を追加する
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-cloudwatch2</artifactId>
  <version>1.5.4</version>
</dependency>
レジストリファクトリを宣言する
<component name="meterRegistry" class="nablarch.integration.micrometer.cloudwatch.CloudWatchMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />
</component>
リージョンやアクセスキーを設定する
$ export AWS_REGION=ap-northeast-1

$ export AWS_ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXXX

$ export AWS_SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYYYYYYY

micrometer-registry-cloudwatch2 モジュールは AWS SDK を利用している。 したがって、リージョンやアクセスキーなどの設定は AWS SDK の方法に準拠する。

上記は、LinuxでOS環境変数を使って設定する場合の例を記載している。 より詳細な情報は、 AWSのドキュメント(外部サイト) を参照。

名前空間を設定する
nablarch.micrometer.cloudwatch.namespace=test

メトリクスのカスタム名前空間は nablarch.micrometer.cloudwatch.namespace で設定できる。

その他の設定については CloudWatchConfig(外部サイト、英語) を参照。

より詳細な設定

OS環境変数や設定ファイルでは指定できない、より詳細な設定を行いたい場合は、 CloudWatchAsyncClientProvider を実装したカスタムプロバイダを作ることで対応できる。

package example.micrometer.cloudwatch;

import nablarch.integration.micrometer.cloudwatch.CloudWatchAsyncClientProvider;
import software.amazon.awssdk.services.cloudwatch.CloudWatchAsyncClient;

public class CustomCloudWatchAsyncClientProvider implements CloudWatchAsyncClientProvider {
    @Override
    public CloudWatchAsyncClient provide() {
        return CloudWatchAsyncClient
                .builder()
                .asyncConfiguration(...) // 任意の設定を行う
                .build();
    }
}

CloudWatchAsyncClientProviderCloudWatchAsyncClient を提供する provide() メソッドを持つ。 カスタムプロバイダでは、任意の設定を行った CloudWatchAsyncClient を構築して返すように provide() メソッドを実装する。

<component name="meterRegistry" class="nablarch.integration.micrometer.cloudwatch.CloudWatchMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />

  <!-- cloudWatchAsyncClientProvider プロパティにカスタムプロバイダを設定する -->
  <property name="cloudWatchAsyncClientProvider">
    <component class="example.micrometer.cloudwatch.CustomCloudWatchAsyncClientProvider" />
  </property>
</component>

作成したカスタムプロバイダは、 CloudWatchMeterRegistryFactorycloudWatchAsyncClientProvider プロパティに設定する。

これにより、カスタムプロバイダが生成した CloudWatchAsyncClient がメトリクスの連携で使用されるようになる。

補足

デフォルトでは、 CloudWatchAsyncClient.create() (外部サイト、英語) で作成されたインスタンスが使用される。

StatsD で連携する

Datadog は DogStatsD(外部サイト) という StatsD(外部サイト、英語) プロトコルを使った連携をサポートしている。 したがって、 micrometer-registry-statsd モジュールを用いることで、 StatsD で Datadog と連携することもできる。

ここでは、 Datadog に StatsD プロトコルで連携する場合を例にして説明する。 なお、DogStatsD のインストール方法などについては Datadogのサイト(外部サイト) を参照。

依存関係を追加する
<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-registry-statsd</artifactId>
  <version>1.5.4</version>
</dependency>
レジストリファクトリを宣言する
<component name="meterRegistry" class="nablarch.integration.micrometer.statsd.StatsdMeterRegistryFactory">
  <property name="meterBinderListProvider" ref="meterBinderListProvider" />
  <property name="applicationDisposer" ref="disposer" />
</component>
必要に応じて設定ファイルを記述する

StatsD デーモンと連携するための設定は、デフォルト値が DogStatsD をデフォルト構成でインストールした場合と一致するように調整されている。

したがって、 DogStatsD をデフォルトの構成でインストールしている場合は、特に設定を明示しなくても DogStatsD による連携が動作する。

もしデフォルト構成以外でインストールしている場合は、 StatsdConfig(外部サイト、英語) を参照して、実際の環境に合わせた設定を行うこと。

# ポートを変更
nablarch.micrometer.statsd.port=9999