アクチュエーター
Spring Boot には Spring Boot Actuator が含まれます。このセクションでは、その使用からしばしば生じる質問に回答します。
アクチュエーターエンドポイントの HTTP ポートまたはアドレスを変更する
スタンドアロンアプリケーションでは、アクチュエーターの HTTP ポートはデフォルトでメイン HTTP ポートと同じになります。アプリケーションが別のポートでリッスンするようにするには、外部プロパティ management.server.port
を設定します。管理用の内部ネットワークとユーザーアプリケーション用の外部ネットワークがある場合など、完全に異なるネットワークアドレスでリッスンするために、management.server.address
をサーバーがバインドできる有効な IP アドレスに設定することもできます。
詳細については、ManagementServerProperties
(Javadoc) ソースコードおよび "Production-ready features" セクションの "管理サーバーポートのカスタマイズ" を参照してください。
「ホワイトラベル」エラーページをカスタマイズする
Spring Boot は、サーバーエラーが発生した場合にブラウザークライアントに表示される「ホワイトラベル」エラーページをインストールします(JSON およびその他のメディア型を使用するマシンクライアントは、適切なエラーコードで適切なレスポンスを確認する必要があります)。
server.error.whitelabel.enabled=false を設定して、デフォルトのエラーページをオフにします。これにより、使用しているサーブレットコンテナーのデフォルトが復元されます。Spring Boot は引き続きエラービューの解決を試みるため、完全に無効にするのではなく、おそらく独自のエラーページを追加する必要があります。 |
独自のエラーページを上書きするかどうかは、使用するテンプレート技術によって異なります。例: Thymeleaf を使用する場合、error.html
テンプレートを追加できます。FreeMarker を使用する場合は、error.ftlh
テンプレートを追加できます。一般に、error
という名前で解決される View
または /error
パスを処理する @Controller
が必要です。デフォルト構成の一部を置き換えない限り、ApplicationContext
に BeanNameViewResolver
が見つかるはずです。そのため、error
という名前の @Bean
がその 1 つの方法です。その他のオプションについては、ErrorMvcAutoConfiguration
[GitHub] (英語) を参照してください。
サーブレットコンテナーにハンドラーを登録する方法の詳細については、"エラー処理" のセクションも参照してください。
サニタイズのカスタマイズ
サニタイズを制御するには、SanitizingFunction
Bean を定義します。関数が呼び出される SanitizableData
は、キーと値、それらの元の PropertySource
へのアクセスを提供します。これにより、たとえば、特定のプロパティソースからのすべての値をサニタイズできます。関数がサニタイズ可能なデータの値を変更するまで、各 SanitizingFunction
が順番に呼び出されます。
ヘルスインジケーターを Micrometer メトリクスにマップする
Spring Boot ヘルスインジケーターは、システム全体のヘルスを示す Status
型を返します。特定のアプリケーションのヘルスレベルを監視または警告する場合は、これらのステータスを 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
}
}