2

一段时间以来,我们一直在努力将内部指标正确发布到Amazon 的 CloudWatch服务中。我们有许多不同类型的内部指标,我们将它们映射到CloudWatch 的MetricDatum中并发布。

每个MetricDatum实例都有 adouble value和 a StatisticSet,它们接受 a sampleCountsumminimum/maximum值。对于诸如 Httpd 200 页面计数器之类的计数器,使用 并将和StatisticSet设置为计数器的值更为合适。例如,如果您查看 ELB 统计数据,亚马逊就是这样做的。这使总和、平均值和其他图表视图在您绘制结果时正常工作。sampleCountsum

问题是当计数器的值为 0 时,因为 CloudWatch 不允许您发布 a 为 0。ELB 所做的StatisticSetsampleCount在该期间不发布任何内容,这会在图表中产生漏洞。这很痛苦,因为INSUFFICIENT_DATA当该时间段内的计数器为 0 时,您会收到警告。如果您有通知ERROR并想知道何时转换回OK,则INSUFFICIENT_DATA to OK警报将使您彻夜难眠。

您在美国东部(弗吉尼亚北部)地区的数据不足状态中有 1 个警报。

问题:如何正确发布 CloudWatch 指标,以便您看不到INSUFFICIENT_DATA警告但仍使用sampleCount值为 0 的指标。

4

1 回答 1

1

虽然您不能发布 aStatisticSetsampleCount0,但您可以发布非常小的 a,sampleCount因为它是 a double。我们发现 a sampleCountof0.000000001似乎在图表上给出了 0 的外观,但它仍然适当地填充了图表中的孔并且不会导致INSUFFICIENT_DATA警报发生。

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);

顺便说一句,我已将其中一些逻辑编码到我的SimpleMetrics 库中,该库旨在轻松跟踪和发布指标。

于 2013-10-31T00:11:33.567 回答