如何从发送到 Cloudwatch 的指标中删除子节点名称?
Posted
技术标签:
【中文标题】如何从发送到 Cloudwatch 的指标中删除子节点名称?【英文标题】:How can I remove the child node name from the metrics sent to Cloudwatch? 【发布时间】:2021-07-09 15:23:15 【问题描述】:我正在使用使用 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$1@6cdas3a85
有什么方法可以删除子节点名称或硬编码一个唯一值而不是 my.package.TestInterceptor$test$routeTest$1@6cdas3a85?
【问题讨论】:
【参考方案1】:我设法通过覆盖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
【讨论】:
以上是关于如何从发送到 Cloudwatch 的指标中删除子节点名称?的主要内容,如果未能解决你的问题,请参考以下文章
AWS CloudWatch 中的指标、日志和事件之间有啥区别? [关闭]
如何使用 AWS CLI 访问跨账户的 cloudwatch 指标
通过 CDK 从 CfnDeliveryStream 获取 cloudwatch 警报的指标