Como costume utilizador exportação flink métrica para prometheus & grafana

Machinedoll:

Eu estou tentando criar minha variável métrica personalizada de acordo com este tutorial

Com o código de exemplo é fornecido, posso obter os eventos e Histograma.

Estou confuso como o identificador sido usado por prometheus & grafana. Eu também tentar modificar o bit pouco código de exemplo, mas a métrica simplesmente não funcionam mais.

Além disso, eu só sou capaz de acessar o sistema métrico, mas não a minha.

Minha pergunta é:

  1. como posso acessar o contador que criei? por exemplo counter1
  2. Qual é o metricGroup exatamente?
  3. Por exemplo, eu gostaria de detectar um padrão a partir de um fluxo de entrada, e é mais razoável para fazê-lo na saída métrica ou apenas o resultado para um banco de dados timeseries como influxdb?

desde já, obrigado.

Aqui está a função de mapa

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;
  }
}

Exemplo de trabalho:

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

Atualizar

Capturas de tela para métricas de acesso Flink de grafana:

digite descrição da imagem aqui

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/

função de mapa padrão do tutorial:

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

TobiSH:
  1. O contador que você criou é acessível por <system-scope>. customCounterKey.mod2.counter1. <system-scope>é definido em sua flink-conf.yaml. Se você não definiu há o padrão é <host>.taskmanager.<tm_id>.<job_name>.<operator_name>.<subtask_index>.

  2. Um grupo de métricas define bascially uma hierarquia de nomes de métricas. De acordo com a documentação do-grupo de métricas é um recipiente chamado para métricas. É composto de 3 partes (escopos): O sistema de escopo (definido no flink-conf.yaml), um escopo de usuário (o que quer que você define em addGroup()) e um nome de métrica.

  3. Isso depende do que você quer medir. Por tudo o que você poderia detectada para contadores, medidores ou medidores eu iria para as métricas. Se se trata de histogramas você deve ter um olhar mais atento sobre o que você começa a partir flink se você usar o repórter Prometeu. Flink generaliza todas as estruturas métricas diferentes - a maneira histogramms são implementados em Prometheus é diferente do que no exemplo grafite. A definição de baldes é dada por flink e não pode ser alterado, tanto quanto eu sei (apesar de um pouco de magia relection).

Tudo isto é descrito em mais detalhes aqui: https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/metrics.html#registering-metrics

Espero que ajude.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=331927&siteId=1
Recomendado
Clasificación