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 é:
- como posso acessar o contador que criei? por exemplo counter1
- Qual é o metricGroup exatamente?
- 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:
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));
}
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>
.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.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.