afnf.net

Spring Bootのmetricsをアプリから参照する

Spring Boot Actuator metrics 2015/05/25 23:24

actuatorによるmetrics取得

Spring Bootには、metrics(メトリクス、測定基準)のためのサービスがあります。

http://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-metrics.html

例のごとくspring-boot-starter-actuatorをpom.xmlのdependencyに追加して・・・

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

次に、application.propertiesに以下を追加し・・・

management.port=8081
management.security.enabled=false

http://localhost:8081/metrics にアクセスすると、以下のようなJSONが取得できます。

{"mem":363520,"mem.free":260831,"processors":4,"instance.uptime":93084,
"uptime":104866,"systemload.average":-1.0,"heap.committed":363520,
"heap.init":126976,"heap.used":102688,"heap":1795072,"threads.peak":31,
"threads.daemon":28,"threads":31,"classes":7755,"classes.loaded":7757,
"classes.unloaded":2,"gc.ps_scavenge.count":14,"gc.ps_scavenge.time":195,
"gc.ps_marksweep.count":2,"gc.ps_marksweep.time":196,
"httpsessions.max":-1,"httpsessions.active":1,"datasource.primary.active":0,
"datasource.primary.usage":0.0,"counter.status.200._admin.entries.root":1,
"counter.status.200._admin.metrics":1,"counter.status.200._admin.pub.login":1,
(中略)
"gauge.response.root":57.0,"gauge.response.star-star":74.0,
"gauge.response.star-star.favicon.ico":36.0,"gauge.response.t.tag":145.0}

アプリから利用する

上記のJSONは、management.port=-1、つまりmanagement serverを停止している場合は取得できません。アプリから利用するためには、PublicMetricsを使います。

@Service
public class MetricsService {

  @Autowired
  private Collection<PublicMetrics> publicMetrics;

  public List<Pair> getMetricsList() {

    List<Pair> list = new ArrayList<Pair>();

    Iterator<PublicMetrics> ite1 = publicMetrics.iterator();
    while (ite1.hasNext()) {
      PublicMetrics publicMetrics = (PublicMetrics) ite1.next();
      Iterator<Metric<?>> ite2 = publicMetrics.metrics().iterator();
      while (ite2.hasNext()) {
        Metric<?> metric = (Metric<?>) ite2.next();
        list.add(new MutablePair (metric.getName(), metric.getValue().toString()));
      }
    }

    return list;
  }
}



これをHTMLとしてレンダリングした例は、デモサイトで確認できます

20150525_metrics


各値の意味について

値が何を意味しているのかは、SystemPublicMetrics.javaとかDataSourcePoolMetadata.javaを見ればだいたい分かります。

name 意味
httpsessions.max セッション数の上限(-1は上限無し)
httpsessions.active 現在のセッション数
datasource.(DB).active DBのアクティブセッション数
datasource.(DB).usage DBの使用率(0.0~1.0)
mem 確保済みのメモリサイズ[KB]
mem.free mem内の空きサイズ[KB]
processors CPUコア数
instance.uptime Spring Bootとしての起動時間[ms]
uptime JVMの起動時間[ms]
systemload.average OSのload average値(Windowsだと-1)
heap.committed Javaヒープのコミット済サイズ[KB]
heap.init Javaヒープの初期サイズ[KB]
heap.used Javaヒープの使用中サイズ[KB]
heap Javaヒープの最大サイズ[KB]
threads.peak ピーク時のスレッド数
threads.daemon デーモンスレッド数
threads 現在のスレッド数
classes クラス数
classes.loaded ロード済のクラス数
classes.unloaded アンロードされたクラス数
gc.ps_scavenge.count マイナーGCの回数
gc.ps_scavenge.time マイナーGCの累積時間[ms]
gc.ps_marksweep.count メジャーGC(Full GC)の回数
gc.ps_marksweep.time メジャーGC(Full GC)の累積時間[ms]
counter.status.(code).(path) pathとステータスコード毎のアクセス数
gauge.response.(path) pathの最新のレスポンス時間[ms]

簡単にセッション数が取れるのは嬉しいですね。

counter.status.200.star-starのように、pathがstar-starになっているのは、静的リソースです。

Spring Boot Actuator metrics 2015/05/25 23:24
comments (0)

blog-java2 engine (build:2019-02-23 17:57 JST)