如何从发送到 Cloudwatch 的指标中删除子节点名称?

How can I remove the child node name from the metrics sent to Cloudwatch?

我正在使用使用 Ktor 构建的 Java API。它使用 MicrometerMetrics 功能将指标发布到 CloudWatch。我的问题是我创建了一个拦截器,它使 CloudWatch 中的路由名称混乱。

拦截器如下:

fun Route.test(callback: Route.() -> Unit): Route {
    val routeTest = createChild(object : RouteSelector(1.0) {
        override fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation =
            RouteSelectorEvaluation.Constant
    })
    routeTest.intercept(ApplicationCallPipeline.Call) {
        call.response.header("X-Next-Polling-In", pollTime)
    }
    callback(routeTest)
    return routeTest
}

这里是请求 /users 的路由如何被前一个拦截器拦截,在 CloudWatch 中显示:

/users/my.package.TestInterceptor$test$routeTest@6cdas3a85

有什么方法可以删除子节点名称或硬编码一个唯一值而不是 my.package.TestInterceptor$test$routeTest$1@6cdas3a85?

我通过重写 RouteSelector 上的 toString 方法解决了这个问题,如下所示:

fun Route.test(callback: Route.() -> Unit): Route {
    val routeTest = createChild(object : RouteSelector(1.0) {
        override fun evaluate(context: RoutingResolveContext, segmentIndex: Int): RouteSelectorEvaluation =
            RouteSelectorEvaluation.Constant

        override fun toString() = "customName"

    })
    routeTest.intercept(ApplicationCallPipeline.Call) {
        call.response.header("X-Next-Polling-In", pollTime)
    }
    callback(routeTest)
    return routeTest
}

这导致以下路线名称:

/users/customName