springwebflux2.4.4-度量随着时间无限增长

ppcbkaq5  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(343)

关于springbootwebflux项目的小问题,以及一些指标随着时间的推移增长过快。
我们的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

每一次我们投票/指标,这四个指标结合起来,每分钟会增加1000个条目。随着轮询响应时间的不断增加,发送的字节数也在不断增加,这是一个警告。
请问如何禁用这四个特定指标?我想把其他的东西都保持原样。
老实说,我发现这些指标非常有用,因为我们在ssl握手时间很长时设置了警报,这非常有用。
不幸的是,增长太残酷了。我想问:
如何禁用这四个(如果可能,不要无意中禁用其他一些有用的度量)
对于未来,如何使它们保持启用状态,但又不会随着时间的推移而出现无法控制的新指标增长。
谢谢您

h43kikqp

h43kikqp1#

1.如何禁用特定指标
你可以使用 MeterFilter 按名称禁用特定度量。你需要注册你的 MeterFilter 作为一个Spring管理的豆子

@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());
    }

上面的两个解决方案是您正在观察的问题的解决方法,您最终可能想了解为什么这些特定度量的基数会随着时间的推移而增加。
计量过滤器文件

相关问题