2

我尝试在我的 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"])

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

4

2 回答 2

5

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

    <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>
于 2016-02-08T12:02:14.123 回答
0

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

Gradle 文档中,可以通过以下方式强制合并:

shadowJar {
    mergeServiceFiles()
}

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

于 2018-09-13T02:28:21.687 回答