向pushgateway报告flink度量时每个作业的作业名不同

uqzxnwby  于 2021-06-24  发布在  Flink
关注(0)|答案(1)|浏览(509)

我正在使用flink1.9.1和prometheuspushgateway来报告我的度量。报告度量的jobname是在flink-conf.yaml文件中定义的,该文件使集群上运行的所有作业的jobname相同,但我希望为每个运行的作业报告不同的jobname。为此,我尝试在执行流之前重写作业内的配置值:

Configuration conf = GlobalConfiguration.loadConfiguration();
    conf.setString(
            "metrics.reporter.promgateway.jobName",
            conf.getString("metrics.reporter.promgateway.jobName", "") + "-" + pipeline
    );
    final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.getConfig().setGlobalJobParameters(conf);

什么时候 pipeline 是字符串变量。
在本地运行作业时,它起作用。但是现在我在高可用性模式下运行flink,它不再工作了:(代码中我覆盖的配置被忽略,只使用集群的flink-conf.yaml文件中的值)。
那么如何更改每个作业的作业名呢?如果我做不到,有没有办法在报告指标时设置额外的标签?因为我还没有看到这样的选择。
谢谢:)

g6ll5ycj

g6ll5ycj1#

您可以使用以下步骤来实现这一点:
通过 jobName 作为命令参数,例如: --jobName MyJobName 设置全局参数:

public static void main(String[] args) throws Exception {
    final ParameterTool command = ParameterTool.fromArgs(args);
    String jobName = command.getRequired("jobName");

    StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    Configuration globalConfiguration = new Configuration();
    globalConfiguration.setString("jobName", jobName);
    env.getConfig().setGlobalJobParameters(globalConfiguration);

}

使用它:

ParameterTool parameters = (ParameterTool) getRuntimeContext().getExecutionConfig().getGlobalJobParameters();
parameters.getRequired("jobName");

以下链接也可能对您有所帮助:https://ci.apache.org/projects/flink/flink-docs-stable/dev/best_practices.html#parsing-命令行参数并在flink应用程序中传递它们

相关问题