【问题标题】:How to pass map to AWS cloudwatch如何将地图传递给 AWS cloudwatch
【发布时间】:2017-01-03 23:16:31
【问题描述】:

我有一个来自不同应用程序的指标图,我想将它们写入 AWSCloud watch。

我该怎么做?

PS:我尝试在解析整个地图后使用指标名称和指标值来放置它们,但这对我来说看起来不是一个好方法。

谢谢!

【问题讨论】:

    标签: amazon-web-services aws-sdk amazon-cloudwatch aws-java-sdk amazon-cloudwatch-metrics


    【解决方案1】:

    Cloudwatch 应该能够轻松跟上您的指标量,因此我只需为从源应用程序传入的每个批次使用 1 个PutMetricDataRequest,并让 Cloudwatch 进行聚合。

    如果您查看PutMetricDataRequest,它需要一个Collection<MetricDatum>,它非常适合接收您在单个请求中从源应用程序接收到的任意数量的密钥。

    ====

    使用 Java8 流 API 将 HashMap 转换为 List 非常简单:

    假设您的地图是键 => 值地图:

    Map<String, Object> metricMap = new HashMap<>();
    metricMap.put("metricKey", 99);
    

    您可以将 Java8 流 API 与 map 和 collect 一起使用:

    List<MetricDatum> metrics = metricMap.entrySet().parallelStream()
            .map(map -> new MetricDatum()
                    .withMetricName(map.getKey())
                    .withUnit(StandardUnit.Count)
                    .withValue(Double.valueOf(map.getValue().toString()))
            ).collect(Collectors.toList());
    

    【讨论】:

    • 感谢您的回答。在我的例子中,数据以 HashMap 的形式出现。基本上我有一个具有不同订阅模式的外观(云手表就是其中之一)。地图被推送到 Facade,然后可供不同的订阅者使用。因此,在这种情况下,我得到了相同的哈希图。您是否建议我需要遍历 hashmap 中的所有键和值以将其转换为 MetricDatum 映射。?
    • @Lovey:我会使用 Java8 流 API,它应该可以让这变得非常简单。我在答案中添加了一个代码示例来说明操作。
    • 还是一样。但没关系。我得到了你想要在这里得出的结论。谢谢。
    • 对不起——也许我误解了这个问题。如果您能澄清一点,我们很乐意提供进一步的帮助。
    猜你喜欢
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2020-06-08
    • 2020-04-13
    • 2017-06-22
    相关资源
    最近更新 更多