Как я могу создать пользовательские метрики в Beam для каждого значения определенного атрибута сообщения?

# #google-cloud-dataflow #apache-beam

Вопрос:

У нас есть потоковый конвейер Apache Beam, который работает на потоке данных Google Cloud. Каждое сообщение, поступающее в конвейер, является документом JSON и содержит атрибут типа события. Я хотел бы отслеживать количество сообщений для каждого значения типа события. (В конечном счете, я хочу отобразить диаграмму в Google Cloud Monitoring, которая отображает столбчатую диаграмму подсчета каждого типа событий.)

Я нашел документацию по созданию пользовательской метрики счетчика в Apache Beam: https://beam.apache.org/documentation/programming-guide/#types-of-metrics который предоставляет этот код:

 Counter counter = Metrics.counter( "namespace", "counter1");

@ProcessElement
public void processElement(ProcessContext context) {
  // count the elements
  counter.inc();
  //...
}
 

однако этот код просто увеличит счетчик для каждого сообщения в конвейере, он не предоставляет счетчик для каждого типа события, что мне нужно. Есть ли способ подсчитать количество сообщений на тип события?

Комментарии:

1. Знаете ли вы eventType это заранее? Или он должен быть сгенерирован самим элементом?

2. Тип события является частью сообщения (т. е. частью элемента).

3. Если вы не знаете их раньше, я не думаю, что вы можете использовать показатели. Может быть, вы могли бы попробовать использовать комбинаторы с глобальным окном и накоплением элементов или состояний

4. Ах, я думаю, что понимаю ваш вопрос (меня смутило использование слова «сгенерированный»). Область возможных значений для eventType неизвестна, eventType т. е. в будущем могут быть значения, о которых мы в настоящее время не знаем.

5. Вы можете создавать собственные метрики, используя библиотеки клиентов мониторинга. Надеюсь, это поможет Связать [1]: — cloud.google.com/monitoring/custom-metrics/… Ссылка [2]: — cloud.google.com/monitoring/custom-metrics/… Ссылка [3]: — cloud.google.com/monitoring/custom-metrics/…