Env: Springboot-2.0.7.RELEASE (埋め込み tomcat-8.5.35)、JDK-1.8.0_181、micrometer-registry-prometheus-1.0.8
説明: @Timed
on controller メソッドとWebMvcMetricsFilter
customを使用します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/there
curl -i localhost:8080/hi/blah/there