Java 如何将flink用户自定义度量导出到prometheus&;格拉凡纳

Java 如何将flink用户自定义度量导出到prometheus&;格拉凡纳,java,apache-flink,metrics,Java,Apache Flink,Metrics,我正在尝试根据 通过提供的示例代码,我可以获得事件和直方图 我很困惑普罗米修斯和格拉法纳是如何使用这个标识符的。我还试图稍微修改示例代码,但度量不再起作用 此外,我只能访问系统度量,但不能访问我自己的度量 我的问题是: 如何访问我创建的计数器?例如,计数器1 metricGroup到底是什么 例如,我想检测一个模式 从输入流开始,在 或者只将结果输出到timeseries数据库,如 xDB 提前谢谢 下面是map函数 类FlinkMetricsExposingMapFunction扩展了Rich

我正在尝试根据

通过提供的示例代码,我可以获得事件和直方图

我很困惑普罗米修斯和格拉法纳是如何使用这个标识符的。我还试图稍微修改示例代码,但度量不再起作用

此外,我只能访问系统度量,但不能访问我自己的度量

我的问题是:

  • 如何访问我创建的计数器?例如,计数器1
  • metricGroup到底是什么
  • 例如,我想检测一个模式 从输入流开始,在 或者只将结果输出到timeseries数据库,如 xDB
  • 提前谢谢

    下面是map函数

    类FlinkMetricsExposingMapFunction扩展了RichMapFunction{
    私有静态最终长serialVersionUID=1L;
    专用瞬态计数器事件计数器;
    专用瞬态计数器customCounter1;
    专用瞬态计数器2;
    @凌驾
    公共无效打开(配置参数){
    eventCounter=getRuntimeContext()
    .getMetricGroup()计数器(“事件”);
    customCounter1=getRuntimeContext()
    .getMetricGroup()
    .addGroup(“customCounterKey”、“mod2”)
    .柜台(“柜台1”);
    customCounter2=getRuntimeContext()
    .getMetricGroup()
    .addGroup(“自定义计数器键”、“mod5”)
    .柜台(“柜台2”);
    //meter=getRuntimeContext().getMetricGroup().meter(“eventMeter”,新的DropWizardMeterRapper(dropwizardMeter));
    }
    @凌驾
    公共传感器读数图(传感器读数值){
    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)
    自定义计数器1.dec();
    返回值;
    }
    }
    
    示例工作:

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

    更新 grafana access flink metrics的屏幕截图:

    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/
    
    
    教程中的默认贴图功能:

    @覆盖
    公共无效打开(配置参数){
    eventCounter=getRuntimeContext().getMetricGroup().counter(“事件”);
    valueHistogram=getRuntimeContext()
    .getMetricGroup()
    .直方图(“价值直方图”,新的描述性统计图(10_000_000));
    }
    
  • 您创建的计数器可通过
    访问。customCounterKey.mod2.counter1
    <代码>在flink-conf.yaml中定义。如果未在此处定义,则默认值为
    .taskmanager….

  • 度量组主要定义度量名称的层次结构。根据文档,度量组是度量的命名容器。它由3部分(范围)组成:系统范围(在flink-conf.yaml中定义)、用户范围(无论您在
    addGroup()
    中定义了什么)和度量名称

  • 这取决于你想测量什么。对于所有你能检测到的计数器、量具或仪表,我会选择量度。如果你使用普罗米修斯记者,你应该仔细看看你从弗林克那里得到了什么。Flink概括了所有不同的度量框架——在普罗米修斯中实现历史程序的方式不同于石墨。桶的定义是由弗林克给出的,据我所知是不能更改的(尽管有一些关联魔法)

  • 这里更详细地描述了所有这些:


    希望有帮助

    很多,很清楚。还有一个问题,在上面的flink prometheus grafana示例中,我找不到我在flink from grafana中定义的计数器。我需要修改某些内容才能从grafana访问它吗?谢谢你能在格拉法纳找到弗林克自己的指标吗?那么repoter的配置是否正确呢?我只是在上面上传了更多细节。我可以找到flink自己的指标,但找不到我自己的指标,甚至找不到该教程中定义的指标。默认情况下,本教程使用docker运行flink,flink-config.yaml是在docker构建期间创建的。我是否需要导出。taskmanager。。。。在config?中,教程示例使用getMetricsGroup()方法。这是否会自动将(映射函数中的计数器)映射到(flink内置度量)?@TobiSH,in.taskmanager…,我们从哪里获得tm\u id、运算符\u名称、子任务\u索引?约伯的名字在普罗米修斯。亚马尔,我知道。