【问题标题】:Flink not sending metrics to GraphiteFlink 不向 Graphite 发送指标
【发布时间】:2017-08-07 13:57:18
【问题描述】:

我有两个 Apache Flink 集群:生产中的 1.1.3 和暂存的 1.3.2。

我有兴趣将指标发送到 Graphite 服务器,因此我按照https://ci.apache.org/projects/flink/flink-docs-release-1.3/monitoring/metrics.html 中的说明进行设置。

我让它在我的 1.1.3 集群中工作,但不能在 1.3.2 中工作。我添加到Flink lib目录的jar文件有:

在 1.1.3 中:

在 1.3.2 中:

我添加的设置在两者上都是相同的(除了它们发送到不同的 Graphite 服务器):

metrics.reporters: grph
metrics.reporter.grph.class: org.apache.flink.metrics.graphite.GraphiteReporter
metrics.reporter.grph.host: 10.x.x.x
metrics.reporter.grph.port: 2003
metrics.reporter.grph.prefix: flink
metrics.reporter.grph.protocol: TCP

我在暂存集群 (1.3.2) 上看到的错误消息是:

java.lang.NoClassDefFoundError: com/codahale/metrics/Reporter
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)
    at org.apache.flink.runtime.metrics.MetricRegistry.<init>(MetricRegistry.java:123)
    at org.apache.flink.runtime.taskexecutor.TaskManagerServices.fromConfiguration(TaskManagerServices.java:188)
    at org.apache.flink.runtime.taskmanager.TaskManager$.startTaskManagerComponentsAndActor(TaskManager.scala:1921)
    at org.apache.flink.runtime.taskmanager.TaskManager$.runTaskManager(TaskManager.scala:1819)
    at org.apache.flink.runtime.taskmanager.TaskManager$.selectNetworkInterfaceAndRunTaskManager(TaskManager.scala:1673)
    at org.apache.flink.runtime.taskmanager.TaskManager$$anon$2.call(TaskManager.scala:1574)
    at org.apache.flink.runtime.taskmanager.TaskManager$$anon$2.call(TaskManager.scala:1572)
    at org.apache.flink.runtime.security.HadoopSecurityContext$1.run(HadoopSecurityContext.java:43)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
    at org.apache.flink.runtime.security.HadoopSecurityContext.runSecured(HadoopSecurityContext.java:40)
    at org.apache.flink.runtime.taskmanager.TaskManager$.main(TaskManager.scala:1572)
    at org.apache.flink.runtime.taskmanager.TaskManager.main(TaskManager.scala)
Caused by: java.lang.ClassNotFoundException: com.codahale.metrics.Reporter
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:335)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 40 common frames omitted

任何帮助将不胜感激!

【问题讨论】:

    标签: java apache-flink flink-streaming graphite


    【解决方案1】:

    您还必须将 io.dropwizard.metrics:metrics-core 3.1.0 添加到 /lib 文件夹。原因是 Flink 运行时本身在 1.1 中使用了 metrics-core,而在 1.3 中不再是这种情况。

    或者,您也可以使用 flink-metrics-graphite jar-with-dependencies,它应该包含您需要的所有内容。

    【讨论】:

    • 我没有提到它,但我在两个集群上都有它 (central.maven.org/maven2/io/dropwizard/metrics/metrics-graphite/…)
    • 那是metrics-graphite,我说的是metrics-core。 central.maven.org/maven2/io/dropwizard/metrics/metrics-core/…
    • 我的错,对此感到抱歉......但是,它没有任何区别。日志文件仍然抱怨缺少方法(java.lang.NoSuchMethodError: com.codahale.metrics.graphite.GraphiteReporter$Buil der.build(Lcom/codahale/metrics/graphite/Graphite;)Lcom/codahale/metrics/graphite /GraphiteReporter;) 还有什么我可能遗漏的吗?
    • 当然有区别。以前我们有一个 ClassNotFoundException(即缺少依赖项),但现在我们有一个 NoSuchMethodError(即版本不匹配)。原因是 metrics-core 3.1.0 与 3.1.5 不二进制兼容,3.1.5 是构建 flink 报告器的版本。 (他们删除了缺失的方法,并在 3.1.1 中重新添加)
    • 我错过了!我将 metrics-core 和 metrics-graphite 升级到了 3.2.4,它就像一个魅力。谢谢切斯奈,你摇滚!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    相关资源
    最近更新 更多