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としてレンダリングした例は、デモサイトで確認できます。
値が何を意味しているのかは、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
になっているのは、静的リソースです。