アクチュエーター

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
	}

}