Как экспортировать пользовательскую метрику Flink в Prometheus & Grafana - PullRequest
1 голос
/ 07 октября 2019

Я пытаюсь создать свою собственную переменную метрики в соответствии с этим руководством

С помощью предоставленного примера кода я могу получить события и гистограмму.

Я запутался, как этот идентификатор использовался prometheus & grafana. Я также пытаюсь немного изменить пример кода, но метрика просто больше не работает.

Кроме того, я могу получить доступ только к метрике системы, но не к своей собственной.

Мой вопрос:

  1. как я могу получить доступ к счетчику, который я создал? например counter1
  2. Что именно представляет собой metricGroup?
  3. Например, я хотел бы обнаружить шаблон из входного потока, и более разумно сделать это в метрике или просто вывести результат в базу данных временных рядов, такую ​​как influenxdb?

спасибо заранее.

Вот функция карты

class FlinkMetricsExposingMapFunction extends RichMapFunction<SensorReading, SensorReading> {
  private static final long serialVersionUID = 1L;

  private transient Counter eventCounter;
  private transient Counter customCounter1;
  private transient Counter customCounter2;

  @Override
  public void open(Configuration parameters) {
    eventCounter = getRuntimeContext()
        .getMetricGroup().counter("events");

    customCounter1 = getRuntimeContext()
        .getMetricGroup()
        .addGroup("customCounterKey", "mod2")
        .counter("counter1");
    customCounter2 = getRuntimeContext()
        .getMetricGroup().addGroup("customCounterKey", "mod5").counter("counter2");



//    meter = getRuntimeContext().getMetricGroup().meter("eventMeter", new DropwizardMeterWrapper(dropwizardMeter));
  }

  @Override
  public SensorReading map(SensorReading value) {
    eventCounter.inc();
    if (value.getCurrTimestamp() % 2 == 0)
      customCounter1.inc();

    if (value.getCurrTimestamp() % 5 == 0)
      customCounter2.inc();

    if (value.getCurrTimestamp() % 2 == 0 && value.getCurrTimestamp() % 5 == 0)
      customCounter1.dec();
    return value;
  }
}

Пример задания:

env
        .addSource(new SimpleSensorReadingGenerator())
        .name(SimpleSensorReadingGenerator.class.getSimpleName())
        .map(new FlinkMetricsExposingMapFunction())
        .name(FlinkMetricsExposingMapFunction.class.getSimpleName())
        .print()
        .name(DataStreamSink.class.getSimpleName());

Обновление

Снимок экранадля доступа к метрикам флинка из графана:

enter image description here

flink-config.yaml

FROM flink:1.9.0
RUN echo "metrics.reporters: prom" >> "$FLINK_HOME/conf/flink-conf.yaml"; \
    echo "metrics.latency.interval: 1000" >> "$FLINK_HOME/conf/flink-conf.yaml"; \
    echo "metrics.reporter.prom.class: org.apache.flink.metrics.prometheus.PrometheusReporter" >> "$FLINK_HOME/conf/flink-conf.yaml"; \
    mv $FLINK_HOME/opt/flink-metrics-prometheus-*.jar $FLINK_HOME/lib
COPY --from=builder /home/gradle/build/libs/*.jar $FLINK_HOME/lib/

функция карты по умолчанию из учебника:

 @Override
 public void open(Configuration parameters) {
    eventCounter = getRuntimeContext().getMetricGroup().counter("events");
    valueHistogram =
        getRuntimeContext()
            .getMetricGroup()
            .histogram("value_histogram", new DescriptiveStatisticsHistogram(10_000_000));
 }

1 Ответ

0 голосов
/ 08 октября 2019
  1. Созданный вами счетчик доступен по <system-scope>. customCounterKey.mod2.counter1. <system-scope> определяется в вашем flink-conf.yaml. Если вы не определили его там, по умолчанию это <host>.taskmanager.<tm_id>.<job_name>.<operator_name>.<subtask_index>.

  2. Группа метрик в основном определяет иерархию имен метрик. Согласно документации метрическая группа является именованным контейнером для метрик. Он состоит из 3 частей (областей): системная область (определенная в flink-conf.yaml), пользовательская область (что вы определяете в addGroup()) и имя метрики.

  3. Это зависит от того, что вы хотите измерить. Для всего, что вы могли обнаружить для счетчиков, датчиков или метров, я бы пошел на метрики. Если речь идет о гистограммах, вы должны более внимательно посмотреть на то, что вы получаете от Flink, если вы используете Prometheus Reporter. Флинк обобщает все различные метрические структуры - способ, которым гистограммы реализованы в Прометее, отличается от, например, в графите. Определение сегментов дано Flink и не может быть изменено, насколько я знаю (несмотря на некоторую магию отражения).

Все это более подробно описано здесь: https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/metrics.html#registering-metrics

Надеюсь, что это поможет.

...