0

У меня есть карта показателей, поступающая из разных приложений, и я хочу записать их в часы AWSCloud.Как проехать карту в AWS cloudwatch

Как я могу это сделать?

PS: Я попытался поместить их, используя имя и значение метрики после разбора всей карты, но это не выглядит хорошим подходом ко мне.

Спасибо!

ответ

0

Cloudwatch должен быть в состоянии не отставать от вашего метрического тома, поэтому я бы просто использовал 1 PutMetricDataRequest для каждой партии, поступающей из исходных приложений, и Cloudwatch делает агрегацию.

Если вы посмотрите на PutMetricDataRequest, он принимает Collection<MetricDatum>, который отлично подходит для получения любого количества ключей, которые вы получаете от исходных приложений, в одном запросе.

====

Преобразование HashMap в список довольно просто с Java8 потоков API:

Предполагая, что ваша карта является ключом карте => значение:

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

You может использовать API-интерфейс Java8 с картой и собирать:

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()); 
+0

Спасибо за ответ. В моем случае данные поступают в виде HashMap . В основном у меня есть фасад с различными режимами подписки (один из них - Cloud watch). Карта переместится в Facade, а затем доступна для разных подписчиков. Таким образом, в этом случае я получаю такой же хэш-файл. Вы предлагаете мне перебрать все ключи и значения в hashmap, чтобы преобразовать их в карту MetricDatum? – Lovey

+0

@ Lovey: Я бы использовал API потоков Java8, который должен сделать это довольно простым. Я добавил образец кода в ответ, иллюстрирующий операцию. –

+0

все тот же. Но это нормально. У меня есть то, что вы пытаетесь сделать здесь. Благодарю. – Lovey

Смежные вопросы