アクチュエーター
Spring Boot には Spring Boot Actuator が含まれます。このセクションでは、その使用からしばしば生じる質問に回答します。
アクチュエーターエンドポイントの HTTP ポートまたはアドレスを変更する
スタンドアロンアプリケーションでは、アクチュエーターの HTTP ポートはデフォルトでメイン HTTP ポートと同じになります。アプリケーションが別のポートでリッスンするようにするには、外部プロパティ management.server.port
を設定します。管理用の内部ネットワークとユーザーアプリケーション用の外部ネットワークがある場合など、完全に異なるネットワークアドレスでリッスンするために、management.server.address
をサーバーがバインドできる有効な IP アドレスに設定することもできます。
詳細については、「本番環境対応機能」セクションの ManagementServerProperties
(Javadoc) ソースコードと管理サーバーポートのカスタマイズを参照してください。
サニタイズのカスタマイズ
サニタイズを制御するには、SanitizingFunction
(Javadoc) Bean を定義します。関数が呼び出される SanitizableData
(Javadoc) は、キーと値、それらの取得元の PropertySource
(Javadoc) へのアクセスを提供します。これにより、たとえば、特定のプロパティソースから取得されるすべての値をサニタイズできます。関数がサニタイズ可能なデータの値を変更するまで、各 SanitizingFunction
(Javadoc) が順番に呼び出されます。
ヘルスインジケーターを Micrometer メトリクスにマップする
Spring Boot ヘルスインジケーターは、システム全体のヘルスを示す Status
(Javadoc) 型を返します。特定のアプリケーションのヘルスレベルを監視または警告する場合は、これらのステータスを Micrometer のメトリクスとしてエクスポートできます。デフォルトでは、ステータスコード "UP"、"DOWN"、"OUT_OF_SERVICE"、"UNKNOWN" が Spring Boot によって使用されます。これらをエクスポートするには、これらの状態を Micrometer Gauge
(英語) で使用できるように、いくつかの数値セットに変換する必要があります。
次の例は、そのようなエクスポーターを作成する 1 つの方法を示しています。
Java
Kotlin
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.actuate.health.HealthEndpoint;
import org.springframework.boot.actuate.health.Status;
import org.springframework.context.annotation.Configuration;
@Configuration(proxyBeanMethods = false)
public class MyHealthMetricsExportConfiguration {
public MyHealthMetricsExportConfiguration(MeterRegistry registry, HealthEndpoint healthEndpoint) {
// This example presumes common tags (such as the app) are applied elsewhere
Gauge.builder("health", healthEndpoint, this::getStatusCode).strongReference(true).register(registry);
}
private int getStatusCode(HealthEndpoint health) {
Status status = health.health().getStatus();
if (Status.UP.equals(status)) {
return 3;
}
if (Status.OUT_OF_SERVICE.equals(status)) {
return 2;
}
if (Status.DOWN.equals(status)) {
return 1;
}
return 0;
}
}
import io.micrometer.core.instrument.Gauge
import io.micrometer.core.instrument.MeterRegistry
import org.springframework.boot.actuate.health.HealthEndpoint
import org.springframework.boot.actuate.health.Status
import org.springframework.context.annotation.Configuration
@Configuration(proxyBeanMethods = false)
class MyHealthMetricsExportConfiguration(registry: MeterRegistry, healthEndpoint: HealthEndpoint) {
init {
// This example presumes common tags (such as the app) are applied elsewhere
Gauge.builder("health", healthEndpoint) { health ->
getStatusCode(health).toDouble()
}.strongReference(true).register(registry)
}
private fun getStatusCode(health: HealthEndpoint) = when (health.health().status) {
Status.UP -> 3
Status.OUT_OF_SERVICE -> 2
Status.DOWN -> 1
else -> 0
}
}