我想将 StepCounter 从基于秒的速率转换为每分钟的速率(我们有一个每分钟运行的监视器)。
当我尝试将它们从每秒 1 次轮询切换到每 60 秒一次时,它将取而代之的是,将增量值除以 60 并创建每秒的速率。
任何人都知道如何通过 Netflix Servo 包公开 JMX 值来代替 60s 度量?有 CounterToRateMetricTransform 但没有关于如何将 Counter 指标转换为 Rate 的示例。
StepCounter 是一个单独的指标,但 CounterToRateMetricTransform 应用于 MetricObserver,并返回一个新的观察者,该观察者观察所有转换为速率的计数器
例如,创建一个观察者,将计数器作为速率进行观察,并将其添加到 pollrunnable 任务中
MetricObserver observer = new CloudWatchMetricObserver(...) // existing observer
MetricObserver transformedObserver = new CounterToRateMetricTransform(observer, 60, TimeUnit.SECONDS);
PollRunnable task = new PollRunnable(..., Immutable.listOf(transformedObserver));
不幸的是,这个变换也返回每秒的速率(参见 CounterToRateMetricTransform.computeRate)
据我所知,无法通过现有库获得每分钟速率,您需要根据您的用例实现自己的指标(如 StepCounter)或在观察者上实现自己的转换(如 CounterToRateMetricTransform) .
最好的方法可能是在您的监控系统中将每秒速率乘以 60,而不是更改报告