Java 如何发布采样计数为0的cloudwatch值?
一段时间以来,我们一直在努力将内部指标正确发布到服务中。我们有许多不同类型的内部指标,可以映射并发布 每个Java 如何发布采样计数为0的cloudwatch值?,java,amazon-web-services,amazon-cloudwatch,Java,Amazon Web Services,Amazon Cloudwatch,一段时间以来,我们一直在努力将内部指标正确发布到服务中。我们有许多不同类型的内部指标,可以映射并发布 每个MetricDatum实例都有一个双值,还有一个统计集,它接受采样计数、总和和最小值/最大值。对于诸如Httpd 200页计数器之类的计数器,更适合使用StatisticSet,并将sampleCount和sum设置为计数器的值。例如,如果你看一下ELB统计数据,这就是亚马逊发布它们的方式。这使得在绘制结果时,总和、平均值和其他图形视图能够正确工作 问题是当计数器的值为0时,因为CloudW
MetricDatum
实例都有一个双值
,还有一个统计集
,它接受采样计数
、总和
和最小值/最大值。对于诸如Httpd 200页计数器之类的计数器,更适合使用StatisticSet
,并将sampleCount
和sum
设置为计数器的值。例如,如果你看一下ELB统计数据,这就是亚马逊发布它们的方式。这使得在绘制结果时,总和、平均值和其他图形视图能够正确工作
问题是当计数器的值为0时,因为CloudWatch不允许您发布采样计数为0的统计集
。ELB所做的是在该期间不发布任何会在图表中造成漏洞的内容。这是一种痛苦,因为当计数器在该时间段内为0时,您会收到数据不足
警告。如果您有关于错误的通知
,并想知道何时返回到正常
,则数据不足到正常
警报会让您彻夜未眠
您在美国东部(北弗吉尼亚)地区有1个警报处于数据不足状态
问题:我如何正确发布CloudWatch指标,以便您不会看到数据不足的警告,但仍然使用sampleCount
和值为0的指标。尽管您无法发布sampleCount
为0的统计集
,您可以使用非常小的sampleCount
来发布它,因为它是一个double
。我们发现0.00000000 1
的sampleCount
似乎在图形上显示为0,但它仍然适当地填补了图形中的漏洞,并且不会导致数据不足
报警的发生
double sampleCount = numSamples;
// our values come in as value and numSamples but StatisticSet wants a sum
double sum = value * numSamples;
if (numSamples == 0) {
// special case here, CloudWatch does not allow a 0 sample count so we have to
// set it to be slightly more
sampleCount = 0.000000001D;
// but sum can be 0
}
StatisticSet statisticSet =
new StatisticSet().withMinimum(min)
.withMaximum(max)
.withSampleCount(sampleCount)
.withSum(sum);
顺便说一句,我已经将这些逻辑编码到我的数据库中,以便轻松跟踪和发布指标。我感到困惑。如果min、max和sum都是相同的(在这个间隔/样本/数据点中没有可报告的事件),那么我认为任何非零样本计数都会给出相同的平均值。你能不能干脆用1.0?您是否希望绘制累积事件与时间的关系图或时间导数图(例如#事件/秒)?然而,我们所看到的要多于平均值。我们不想用无效的样本计数影响最小/最大或其他图形。实际上,我们不想在一个样本中发布一个值为0的值,这可能在@JayCarlton中是非常不正确的。