【问题标题】:DropWizard Graphite Metrics Reporter in config.yml is unable to be parsed无法解析 config.yml 中的 DropWizard Graphite Metrics Reporter
【发布时间】:2015-11-19 23:54:55
【问题描述】:

我尝试在我的 config.yml 文件中配置我的 dropwizard 石墨指标报告器:

metrics:
  reporters:
     - type: graphite
       host: my.graphite.host.com
       port: 2003
       prefix: my.prefix

我的 pom.xml 中有 dropwizard-metrics 和 metrics-graphite 作为依赖项。我的应用程序类或配置类中没有关于记者的任何内容。我的印象是 DropWizard 负责 MetricRegistry 和报告器的所有初始化和启动。然而,当我运行我的应用程序时,我收到以下错误:

config.yml has an error:

  * Failed to parse configuration at: metrics.reporters; 
Could not resolve type id 'graphite' into a subtype of [simple type, 
class io.dropwizard.metrics.ReporterFactory]: 
known type ids = [ReporterFactory, console, csv, log] 
at [Source: N/A; line: -1, column: -1] 
(through reference chain: com.example.MyConfiguration["metrics"]-  
>io.dropwizard.metrics.MetricsFactory["reporters"])

为什么“石墨”没有被认为是可接受的类型?我错过了什么?

【问题讨论】:

    标签: dropwizard graphite codahale-metrics


    【解决方案1】:

    我相信你有答案 - 但我遇到了同样的问题,所以想详细说明一下。您需要三个在文档中没有明确说明的库。

        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-core</artifactId>
            <version>${metrics.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard</groupId>
            <artifactId>dropwizard-metrics-graphite</artifactId>
            <version>${dw.version}</version>
        </dependency>
        <dependency>
            <groupId>io.dropwizard.metrics</groupId>
            <artifactId>metrics-graphite</artifactId>
            <version>${metrics.version}</version>
        </dependency>
    

    【讨论】:

      【解决方案2】:

      我在使用 Gradle 和 Shadow plugin 构建一个胖罐时遇到了同样的问题。原因是默认情况下,广告Java SPIs 用于动态加载的服务描述符文件没有被正确合并并包含在最终的 jar 中。这就是 Graphite 报告插件没有注册它正在实现的服务的原因。

      来自the Gradle docs,可以通过以下方式强制合并:

      shadowJar {
          mergeServiceFiles()
      }
      

      一旦我将它添加到我的 build.gradle 中,就可以解析配置,因为 graphite 已正确注册为子类型。

      【讨论】: