|
|
WebOTX Manual V11.1 (第6版) 目次を表示 |
MicroProfile Metrics 3.0(以降、Metrics と記載)は、マイクロサービスの さまざまなデータを定量化し、定量化したデータを管理しやすいように加工して 提供するための仕様です。
Health では主に、アプリケーションが正常かどうかを UP/DOWN で通知しますが、 Metrics では、Heal の健全性を判断するために役立ちます。 例えば、ディスク容量が制限なしに増加していく、といったケースにおいて Metrics は問題の発見を容易にします。
Metrics ではメタデータの保管場所を提供する必要があり、次の 3 つのスコープとして定義されています。
ここでは、監視エージェントがメトリクスを受信するために使用する REST-API について説明します。 REST-API では、JSON フォーマットと OpenMetrics フォーマットをサポートしています。以下では、それぞれについて説明します。
JSON フォーマット
JSON フォーマットを使用した場合、サブリソース用のサブツリーをツリー形式のデータフォーマットで GET リクエストに応答します。 データを含まないサーブツリーは省略されます。
JSON 形式の取得例:
{
"thread.count" : 33,
"thread.max.count" : 47,
"memory.maxHeap" : 3817863211,
"memory.usedHeap" : 16859081,
"memory.committedHeap" : 64703546
}
OpenMetrics フォーマット
JSON フォーマットとは異なり、OPTIONS リクエストはサポートしません。
OpenMetrics 形式の取得例:
# TYPE base_foo_val_seconds gauge
# HELP base_foo_val_seconds The average duration of foo requests during last 5 minutes
base_foo_val_seconds{app="webshop"} 12.345
# TYPE base_bar_val_bytes gauge
base_bar_val_bytes{component="backend", app="webshop"} 42000
ここでは、WebOTX V11.1 でサポートしている base、vendor、application スコープについて説明します。
bese(ベース)メトリクスは、全ての MicroProfile 準拠ベンダーが提供しなければならないメトリクスの一覧です。 base(ベース)メトリクスは「/metrics/base」で公開されます。
WebOTX V11.1 で提供している base スコープの一覧は以下の通りです。
| 名前 | 表示名 | タイプ | 単位 | 複数 | 説明 | MBean |
|---|---|---|---|---|---|---|
| memory.usedHeap | Used Heap Memory | Gauge | Bytes | - | ヒープメモリの使用量を表示する。 | java.lang:type=memory/HeapMemoryUsage#used |
| memory.committedHeap | Committed Heap Memory | Gauge | Bytes | - | Java 仮想マシンが使用するためにコミットされたメモリ量を表示する。 | java.lang:type=Memory/HeapMemoryUsage#committed |
| memory.maxHeap | Max Heap Memory | Gauge | Bytes | - | ヒープメモリの最大量を表示する。最大ヒープサイズが未定義の場合 -1 を表示する。 | java.lang:type=Memory/HeapMemoryUsage#max |
| gc.total | Garbage Collection Count | Counter | - | True | 発生したコレクションの総数を表示する。 このコレクタのコレクション数が未定義の場合は -1 を表示する。 | java.lang:type=GarbageCollector,name=%s/CollectionCount |
| gc.time | Garbage Collection Time | Gauge | ミリ秒 | True | コレクションのおおよその累積経過時間を表示する。 | java.lang:type=GarbageCollector,name=%s/CollectionTime |
| jvm.uptime | JVM Uptime | Gauge | ミリ秒 | - | 仮想マシンが開始してからの経過時間を表示する。 | java.lang:type=Runtime/Uptime |
| thread.count | Thread Count | Counter | - | - | デーモンスレッドと非デーモンスレッドの両方を含むライブスレッドの現在の数を表示する。 | java.lang:type=Threading/ThreadCount |
| thread.daemon.count | Daemon Thread Count | Counter | - | - | デーモンスレッドの現在の数を表示する。 | java.lang:type=Threading/DaemonThreadCount |
| thread.max.count | Peak Thread Count | Counter | - | - | Java 仮想マシンが開始されたか、もしくはピークがリセットされてからのピークライブスレッドの数を表示する。 これには、デーモンスレッドと非デーモンスレッドの両方が含まれる。 | java.lang:type=Threading/PeakThreadCount |
| classloader.loadedClasses.count | Current Loaded Class Count | Counter | - | - | Java 仮想マシンに現在ロードされているクラスの数を表示する。 | java.lang:type=ClassLoading/LoadedClassCount |
| classloader.loadedClasses.total | Total Loaded Class Count | Counter | - | - | Java 仮想マシンの実行が開始されてからロードされたクラスの総数を表示する。 | java.lang:type=ClassLoading/TotalLoadedClassCount |
| classloader.unloadedClasses.total | Total Unloaded Class Count | Counter | - | - | Java 仮想マシンの実行が開始されてからアンロードされたクラスの総数を表示する。 | java.lang:type=ClassLoading/UnloadedClassCount |
| cpu.availableProcessors | Available Processors | Gauge | - | - | Java 仮想マシンが使用できるプロセッサの数を表示する。 | java.lang:type=OperatingSystem/AvailableProcessors |
| cpu.systemLoadAverage | System Load Average | Gauge | - | - | 最後の 1 分間のシステム平均負荷を表示する。 システム負荷平均は、使用可能なプロセッサにキューイングされた実行可能エンティティの数と、 一定期間にわたって平均化された使用可能なプロセッサ上で実行されている実行可能 エンティティの数の合計です。 | java.lang:type=OperatingSystem/SystemLoadAverage |
vendor(ベンダー)メトリクスは、MicroProfile 準拠ベンダーが独自に提供するメトリクスの一覧です。 vendor(ベンダー)メトリクスは「/metrics/vendor」で公開されます。
WebOTX V11.1 で既定値として提供している vendor スコープの一覧は以下の通りです。
既定値では出力していない、マシンのCPU情報(*1)、JavaVM(基本情報/プロセス毎のメモリ情報/GC情報/クラスロード情報/スレッド情報)(*1)、
アプリケーションのデータソース情報(*2)/リクエスト数情報(*3)/HTTPセッション情報(*4)
を出力するように設定することが可能です。
これらの情報を有効にするには次の定義ファイルでコメントアウト(行頭が#)しているものを項目単位で有効にしてください。ドメインを再起動することで設定を反映します。
・{ドメインディレクトリ}/config/vendor-metrics.properties
(*1) 予め対応するJVMのモニタリングレベルをHIGHに設定しておく必要があります。
(*2) 予め対応するJDBCデータソースのモニタリングレベルをHIGHに設定しておく必要があります。
(*3) 予め対応するHTTPサービスのモニタリングレベルをHIGHに設定しておく必要があります。
(*4) 予め対応するWebコンテナのモニタリングレベルをHIGHに設定しておく必要があります。
モニタリングレベルの変更については、構築・運用 > モニタリング > モニタリング情報の採取を参照してください。
| 名前 | 表示名 | タイプ | 単位 | 複数 | 説明 | MBean |
|---|---|---|---|---|---|---|
| license.count | Number of licenses | Counter | - | - | WebOTXに登録されたライセンス数を表示する。 | amx:pp=/J2EEDomain[amx],type=J2EEServer,name=server,j2eeType=J2EEServer/LicenseCount |
| license.code | Product code | Gauge | - | - | ライセンス登録されている製品コードを表示する。 | amx:pp=/J2EEDomain[amx],type=J2EEServer,name=server,j2eeType=J2EEServer/LicenseCode |
| license.availableCores | Available CPU Cores | Gauge | - | - | JavaVMが利用可能なCPUコア数を表示する。 | amx:pp=/J2EEDomain[amx],type=J2EEServer,name=server,j2eeType=J2EEServer/AvailableCores |
| machine.os.availableProcessors | Available Processors Number | Counter | - | - | Java 仮想マシンで使用可能なプロセッサーの数。このメソッドは、ランタイム.availableProcessors() メソッドと同等です。 | java.lang:type=OperatingSystem/AvailableProcessors |
| machine.disk.totalDiskSpace | Total capacity of the disk | Gauge | Bytes | - | ディスクの合計容量を表します。(単位: バイト) | amx:pp=/mon/server-mon[server],type=domain-mon,name=domain/TotalDiskSpace#current |
| machine.disk.freeDiskSpace | Free disk space | Gauge | Bytes | - | ディスクの空き領域の量を表します。(単位: バイト) | amx:pp=/mon/server-mon[server],type=domain-mon,name=domain/FreeDiskSpace#current |
| machine.disk.usableFreeDiskSpace | Available disk space | Gauge | Bytes | - | 使用可能ディスク空き容量(Byte)を表示する。 | amx:pp=/mon/server-mon[server],type=domain-mon,name=domain/UsableFreeDiskSpace#current |
| machine.disk.diskUsedRate | Disk usage | Gauge | - | - | ディスクの使用率を表します。(単位: %) | amx:pp=/mon/server-mon[server],type=domain-mon,name=domain/DiskUsedRate#current |
| javaVm.memory.all.applicationServerPhysicalMemSize | Physical memory | Gauge | Bytes | - | アプリケーション サーバーが使用する物理メモリの量を表します。(単位: キロバイト) | amx:pp=/,type=J2EEDomain,j2eeType=J2EEDomain,name=amx/applicationServerPhysicalMemSize |
| javaVm.memory.all.applicationServerVirtualMemSize | Virtual memory | Gauge | Bytes | - | アプリケーション サーバーが使用する仮想メモリの量を表します。(単位: キロバイト) | amx:pp=/,type=J2EEDomain,j2eeType=J2EEDomain,name=amx/applicationServerVirtualMemSize |
アプリケーション固有のメトリクスは、実行時にアプリケーションにより提供されるもので、サーバーに固定されるものではありません。 このスコープは「/metrics/application」で公開されます。
アプリケーションスコープで公開できる値は、アプリケーション上で以下のようにアノテーションを定義することで /metrics/application から取得できるようになります。
@Gauge(name = "queueSize")
public int getQueueSize() {
return queueSize;
}
アプリケーション上で使用できるアノテーションは、以下のものです。
| アノテーション | 適用先 | 説明 | デフォルトの単位 |
|---|---|---|---|
| @Counted | M, C, T | アノテートされたオブジェクトの呼び出しをカウントするカウンターを示します。 | なし |
| @Gauge | M | アノテートされたオブジェクトのサンプリングするゲージを示します。 | ユーザーが提供する必要があります。 |
| @Metered | M, C, T | アノテートされたオブジェクトの呼び出しを追跡するメーターを示します。 | MetricUnits.PER_SECOND |
| @Metric | M, F, P | メトリクスをインジェクションするよう要求するアノテーションです。 このアノテーションは「メーター」「タイマー」「カウンター」「ヒストグラム」の各フィールドで使用できます。 | なし |
| @Timed | M, C, T | アノテートされたオブジェクトの存続時間を追跡するタイマーを示します。 | MetricUnits.NANOSECONDS |
(C=コンストラクタ、F=フィールド、M=メソッド、P=パラメータ、T=タイプ)
全てのアノテーションは、メタデータフィールドに対応する次のフィールドを持っています。
| ・String name | オプション。メトリクスの名前を設定します。 もし、明示的に指定されていない場合は、アノテートされたオブジェクトの name が使用されます。 |
| ・boolean absolute | オプション。メトリクスの名前を設定します。 true の場合、指定された name をメトリクスの絶対名として使用します。 False の場合、指定された名前の前にパッケージ名とクラスが付加されます。 既定値では、false です。 |
| ・String displayName | オプション。メトリクスの表示名です。 |
| ・String description | オプション。メトリクスの説明です。 |
| ・String unit | メトリクスの単位。@Gauge では既定値はありません。 MetricsUnits クラスで事前定義された単位をチェックします。 |
| ・String[] tags | オプション。 個別のタグをメトリクスに提供するための <key>=<value> 形式の文字列の配列です。 |
アノテートされたメトリクスは、アプリケーションの MetricRegistry にアノテーションの名前と絶対フィールドに基づく名前で登録されます。
例:
package com.example;
import javax.inject.Inject;
import org.eclipse.microprofile.metrics.Counter;
import org.eclipse.microprofile.metrics.annotation.Metric;
public class Colours {
@Inject
@Metric
Counter redCount;
@Inject
@Metric(name="blue")
Counter blueCount;
@Inject
@Metric(absolute=true)
Counter greenCount;
@Inject
@Metric(name="purple", absolute=true)
Counter purpleCount;
}
上記の bean は、MetricRegistry で次のエントリを生成します。
com.example.Colours.redCount
com.example.Colours.blue
greenCount
purple
MetricRegistry は、メトリクスとメタデータのコレクションを保持するために使用されます。 スコープ(アプリケーション、ベース、ベンダー)毎に MetricRegistry の共有シングルトンが 1 つ存在します。 アプリケーションを使用してメトリクスを登録すると、アプリケーション MetricRegistry にアノテーションの名前と絶対フィールドに基づく名前で登録されます。
また、インジェクトすると、@RegistryType は修飾子として使用され、アプリケーション、ベース、ベンダーレジストリの いずれかを選択的にインジェクトします。 修飾子を使用しない場合、返却される既定値の MetricRegistry はアプリケーションレジストリです。
アプリケーションタイプとなる MetricRegistry の指定方法
アプリケーションタイプとして、MetricRegistry を指定する場合は、以下のようにします。
@Inject
MetricRegistry metricRegistry;
@Inject
@RegistryType(type=MetricRegistry.Type.APPLICATION)
MetricRegistry metricRegistry;
ベースタイプとなる MetricRegistry の指定方法
ベースタイプとして、MetricRegistry を指定する場合は、以下のようにします。
@Inject
@RegistryType(type=MetricRegistry.Type.BASE)
MetricRegistry baseRegistry;
Metrics には以下の設定項目があります。設定の反映には、ドメインの再起動が必要です。
| dotted-name(CLINAME) | 説明 | 既定値 |
|---|---|---|
| server.microprofile.microprofile-metrics.enabled | /metrics を有効にするかどうかを設定します。true の場合は有効。false の場合は無効。 | true |
| server.microprofile.microprofile-metrics.secure | HTTPS でのみ /metrics を有効にするかどうかを設定します。true の場合は有効。false の場合は無効。 | true |