Я играю с метрикой FLink (1.7) и застрял здесь:
У меня есть одна работа Flink, которая имеет дело с пользовательскими переменными , чтобы выставить пару пользовательских бизнес-метрик через прометейнапример, репортер:
- количество сообщений Protobuf, обработанных customer_id AND по стране и датацентру.
- количество потраченных долларов (сохраненных в переменной в сообщениях Protobuf) customer_id AND пострана и по типу.
- и т. д.
цель состоит в том, чтобы иметь данные о прометее, подобные этим:
<job>_<task>_<operator>_my_data_income{website_id="1",country="fr",dc="EUROPE"} 42
чтоЯ сделал это:
public class MyMetricSink extends RichSinkFunction<AbstractASLogMetricEntity> {
@Override
public void invoke(AbstractASLogMetricEntity value, Context context) {
getRuntimeContext()
.getMetricGroup()
.addGroup( "website_id" , value.getCustomer() )
.addGroup( "country" , value.getCountry() )
.addGroup( "dc" , value.getDatacenter() )
.addGroup( "my_data" )
.counter( "income" )
.inc( value.getIncome() );
}
@Override
public void open(Configuration parameters) {
}
}
Это не работает => Журнал предупреждений: "Name collision: Group already contains a Metric with the name..."
из класса AbstractMetricGroup.
Для правильной работы,Сначала мне нужно создать все счетчики для метода open
.Таким образом, у меня будет декартово произведение моих пользовательских метрик для показа.Возможно, в HashMap хранится 1,2 миллиона счетчиков.
У вас есть какие-нибудь предложения, чтобы избежать этого?Это правильный способ сделать это?можно ли сделать что-то, что я хочу, используя где-нибудь работу arround?
Thx