向PushGateway报告Flink指标时,每个作业的工作名称不同

时间:2019-12-17 14:48:06

标签: apache-flink prometheus metrics

我将Flink 1.9.1与PrometheusPushGateway结合使用来报告我的指标。 报告度量标准的作业名称在flink-conf.yaml文件中定义,该文件使该作业名称与在群集上运行的所有作业相同,但是我希望为每个正在运行的作业报告一个不同的作业名称。 为此,我尝试在执行Stream之前在作业中覆盖配置的值:

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文件中的值。

那么如何更改每个作业的jobName?如果我做不到,是否可以在报告指标时设置其他标签?因为我也没有看到这样的选择。

谢谢:)

1 个答案:

答案 0 :(得分:0)

您可以使用以下步骤来实现:

  1. jobName作为命令参数传递,例如:--jobName MyJobName

  2. 设置全局参数:

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

}
  1. 使用它:
ParameterTool parameters = (ParameterTool) getRuntimeContext().getExecutionConfig().getGlobalJobParameters();
parameters.getRequired("jobName");

以下链接也可能对您有帮助: https://ci.apache.org/projects/flink/flink-docs-stable/dev/best_practices.html#parsing-command-line-arguments-and-passing-them-around-in-your-flink-application