Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何发布采样计数为0的cloudwatch值?_Java_Amazon Web Services_Amazon Cloudwatch - Fatal编程技术网

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中是非常不正确的。