【发布时间】:2017-01-03 23:16:31
【问题描述】:
我有一个来自不同应用程序的指标图,我想将它们写入 AWSCloud watch。
我该怎么做?
PS:我尝试在解析整个地图后使用指标名称和指标值来放置它们,但这对我来说看起来不是一个好方法。
谢谢!
【问题讨论】:
标签: amazon-web-services aws-sdk amazon-cloudwatch aws-java-sdk amazon-cloudwatch-metrics
我有一个来自不同应用程序的指标图,我想将它们写入 AWSCloud watch。
我该怎么做?
PS:我尝试在解析整个地图后使用指标名称和指标值来放置它们,但这对我来说看起来不是一个好方法。
谢谢!
【问题讨论】:
标签: amazon-web-services aws-sdk amazon-cloudwatch aws-java-sdk amazon-cloudwatch-metrics
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());
【讨论】: