5

誰かがスプリングブートメトリックとデータドッグを統合する方法を知っていますか?スプリングブートメトリック+データードッグ

Datadogは、ITのクラウドスケールの監視サービスです。

これにより、ユーザーは多くのチャートやグラフを使用して簡単にデータを視覚化できます。

私は、@Timedと注釈を付けたすべてのメソッドに関する多くの情報を入力するためにdropwizardメトリックを使用している春の起動アプリケーションを持っています。

私はherokuでアプリケーションをデプロイしているので、Datadogエージェントをインストールすることはできません。

私は、スプリングブートメトリックシステムのレポートをデータドッグと自動的に統合する方法があるかどうかを知りたいと思います。私は最終的にdatadogでこのライブラリを統合しdropwizzardモジュール見つけた

答えて

8

metrics-datadog

を私は私のYAMLのプロパティを使用して、このレポーターを作成し、初期化Spring構成クラスを作成しました。

ちょうどあなたのポンポンで、この依存関係を挿入します。

<!-- Send metrics to Datadog --> 
    <dependency> 
     <groupId>org.coursera</groupId> 
     <artifactId>dropwizard-metrics-datadog</artifactId> 
     <version>1.1.3</version> 
    </dependency> 

は、あなたのYAMLにこの設定を追加します。

yourapp: 
    metrics: 
    apiKey: <your API key> 
    host: <your host> 
    period: 10 
    enabled: true 

とプロジェクトにこの構成クラスを追加します。

/** 
* This bean will create and configure a DatadogReporter that will be in charge of sending 
* all the metrics collected by Spring Boot actuator system to Datadog. 
*  
* @see https://www.datadoghq.com/ 
* @author jfcorugedo 
* 
*/ 
@Configuration 
@ConfigurationProperties("yourapp.metrics") 
public class DatadogReporterConfig { 

    private static final Logger LOGGER = LoggerFactory.getLogger(DatadogReporterConfig.class); 

    /** Datadog API key used to authenticate every request to Datadog API */ 
    private String apiKey; 

    /** Logical name associated to all the events send by this application */ 
    private String host; 

    /** Time, in seconds, between every call to Datadog API. The lower this value the more information will be send to Datadog */ 
    private long period; 

    /** This flag enables or disables the datadog reporter */ 
    private boolean enabled = false; 

    @Bean 
    @Autowired 
    public DatadogReporter datadogReporter(MetricRegistry registry) { 

     DatadogReporter reporter = null; 
     if(enabled) { 
      reporter = enableDatadogMetrics(registry); 
     } else { 
      if(LOGGER.isWarnEnabled()) { 
       LOGGER.info("Datadog reporter is disabled. To turn on this feature just set 'rJavaServer.metrics.enabled:true' in your config file (property or YAML)"); 
      } 
     } 

     return reporter; 
    } 

    private DatadogReporter enableDatadogMetrics(MetricRegistry registry) { 

     if(LOGGER.isInfoEnabled()) { 
      LOGGER.info("Initializing Datadog reporter using [ host: {}, period(seconds):{}, api-key:{} ]", getHost(), getPeriod(), getApiKey()); 
     } 

     EnumSet<Expansion> expansions = DatadogReporter.Expansion.ALL; 
     HttpTransport httpTransport = new HttpTransport 
           .Builder() 
           .withApiKey(getApiKey()) 
           .build(); 

     DatadogReporter reporter = DatadogReporter.forRegistry(registry) 
     .withHost(getHost()) 
     .withTransport(httpTransport) 
     .withExpansions(expansions) 
     .build(); 

     reporter.start(getPeriod(), TimeUnit.SECONDS); 

     if(LOGGER.isInfoEnabled()) { 
      LOGGER.info("Datadog reporter successfully initialized"); 
     } 

     return reporter; 
    } 

    /** 
    * @return Datadog API key used to authenticate every request to Datadog API 
    */ 
    public String getApiKey() { 
     return apiKey; 
    } 

    /** 
    * @param apiKey Datadog API key used to authenticate every request to Datadog API 
    */ 
    public void setApiKey(String apiKey) { 
     this.apiKey = apiKey; 
    } 

    /** 
    * @return Logical name associated to all the events send by this application 
    */ 
    public String getHost() { 
     return host; 
    } 

    /** 
    * @param host Logical name associated to all the events send by this application 
    */ 
    public void setHost(String host) { 
     this.host = host; 
    } 

    /** 
    * @return Time, in seconds, between every call to Datadog API. The lower this value the more information will be send to Datadog 
    */ 
    public long getPeriod() { 
     return period; 
    } 

    /** 
    * @param period Time, in seconds, between every call to Datadog API. The lower this value the more information will be send to Datadog 
    */ 
    public void setPeriod(long period) { 
     this.period = period; 
    } 

    /** 
    * @return true if DatadogReporter is enabled in this application 
    */ 
    public boolean isEnabled() { 
     return enabled; 
    } 

    /** 
    * This flag enables or disables the datadog reporter. 
    * This flag is only read during initialization, subsequent changes on this value will no take effect 
    * @param enabled 
    */ 
    public void setEnabled(boolean enabled) { 
     this.enabled = enabled; 
    } 
} 
+1

HTTPの代わりにStatsDレポートで同じライブラリを使用することもできます。誰でもそのオプションに興味がある場合は、 –

+0

与えられたリソースを追加することができないので、スケジューラーを書く必要がありますか? – Shek

2

場合JMXはあなたのためのオプションです。JMX dropwizrd reporterとを組み合わせて使用​​できます

+0

それは良い点です。しかし、私はherokuで私のアプリを展開しているので、私はOSでdatadogエージェントをインストールすることはできません – jfcorugedo

+1

@ jfcorugedo私はherokuに関する質問は何も言わなかったと思いますか? herokuソリューションが必要な場合は、質問に追加する必要があります。 – eis

+0

はい、ご迷惑をおかけいたします。 – jfcorugedo