有关SpringBoot网络流量项目的一些小问题,以及随着时间的推移一些指标增长过快的问题。
我们的web应用程序正在使用Netty,我们声明一个bean如下:
@Bean
public NettyServerCustomizer nettyServerCustomizer() {
return httpServer -> httpServer.metrics(true, () -> new MicrometerChannelMetricsRecorder("name", "name"));
}我们的web应用程序公开了一个用于轮询的/metrics端点。我们有许多有趣的度量标准,希望保留它们。
实际上,我们只是计算了指标的总数,在第1次投票中,我们得到了大约300次,一分钟后,在第2次投票中,我们得到了大约1300次,然后大约2300次,等等,你可以想象,经过一天的应用程序之后,这个端点响应和网络字节发送到了屋顶。
我注意到四种特定的指标正在无限期地增长,而且增长速度非常快。
tls_handshake_time_seconds_count
data_received_bytes_count
data_received_bytes_max
data_received_bytes_sum每次我们投票/metrics时,这四个指标结合在一起,每分钟就会增加1000个条目。随着轮询响应时间的不断增加,发送的字节数也在增加,这是令人震惊的。
我可以问一下如何禁用这四种特殊指标吗?我想让其他一切保持不变。
老实说,我发现这些指标非常有用,因为我们有一个警报设置,当SSL握手时间很高时,这是非常有用的。
不幸的是,增长太残酷了。我想问:
谢谢
发布于 2021-04-24 17:22:18
1.如何禁用特定指标
您可以使用MeterFilter按名称禁用特定指标。您需要将您的MeterFilter注册为一个spring托管bean。
@Bean
public MeterFilter myMeterFilter() {
return MeterFilter.deny(id -> id.getName().startsWith("data_received_bytes") ||
id.getName().startsWith("tls_handshake_time")
);
}2.如何控制/限制度量上的标记数
您还可以使用MeterFilter来实现这一点。可以使用MeterFilter对特定度量的特定标记设置基数限制,从而限制这些指标的增长,并限制它们对应用程序的影响。
@Bean
public MeterFilter myMeterFilter() {
return MeterFilter.maximumAllowableTags("data_received_bytes", "tagWithHighCardinality", 100,
MeterFilter.deny());
}上面的两个解决方案是针对您所观察到的问题的解决方案,您可能最终希望了解,为什么,这些特定度量的基数随着时间的推移而增加。
发布于 2021-04-27 07:44:25
我建议您使用HttpServer公开的API。
HttpServer.create().metrics(true, Function)这将启用与Micrometer的默认集成。
或
HttpServer.create().metrics(true, CustomHttpServerMetricsRecorder::new, Function)这向您公开了HttpServer指标。注意,在这个API中,CustomHttpServerMetricsRecorder实现了HttpServerMetricsRecorder,而不是像您的示例MicrometerChannelMetricsRecorder那样。
考虑检查参考指南和那里的建议。
https://stackoverflow.com/questions/67237854
复制相似问题