Env: Springboot-2.0.7.RELEASE (埋め込み tomcat-8.5.35)、JDK-1.8.0_181、micrometer-registry-prometheus-1.0.8
説明: @Timedon controller メソッドとWebMvcMetricsFiltercustomを使用しますWebMvcTagsProvider。
デモプロジェクト: https://github.com/kenix/resp-mix
タグのセットを持つメーターを既に作成している場合PrometheusMeterRegistry、同じ名前で異なるタグのセットを持つ別のメーターは作成されません。IllegalArgumentException前述の理由でスローします。これは、正常に処理されたリクエストの正常な処理の後に発生します (レスポンスには変換された JSON が含まれるようになりました)。例外はSpringではキャッチされませんWebMvcMetricsFilter(つまり、catch-clauseで例外をキャッチします。ところで、役に立ちControllerAdviceません)が、TomcatのによってキャッチされStandardHostValve、独自のエラーメッセージ(この例外がどこから来たのかを知ることができません)を応答にレンダリングしますそれも。これにより、レンダリングされた結果として不正な JSON が生成されます。
質問 1:WebMvcMetricsFilterによってスローされたこの例外をキャッチして処理し、PrometheusMeterRegistryそれ以上スローしないようにする必要がありますか?
質問 2: 実際の処理に入る前にフィルター チェーンで例外が想定どおりに処理されることを確認しました。実際の処理が成功した後の例外はどうですか? 参照はありますか?
このケースをトリガーするには:
curl -i localhost:8080/hi/foo/therecurl -i localhost:8080/hi/blah/there