Метрики загрузки Spring + datadog

Кто-нибудь знает, как интегрировать метрики загрузки Spring с datadog?

Datadog - это облачная служба мониторинга для ИТ.

Это позволяет пользователям легко визуализировать свои данные, используя множество диаграмм и графиков.

У меня есть приложение для весенней загрузки, которое использует метрики dropwizard для заполнения большого количества информации обо всех методах, которые я аннотировал с помощью @Timed .

С другой стороны, я развертываю свое приложение в heroku, поэтому я не могу установить агент Datadog.

Я хочу знать, есть ли способ автоматически интегрировать отчеты системы метрик загрузки Spring с datadog.


person jfcorugedo    schedule 21.12.2015    source источник


Ответы (3)


Наконец-то я нашел модуль dropwizzard, который объединяет эту библиотеку с datadog: metrics-datadog

Я создал класс конфигурации Spring, который создает и инициализирует этот Reporter, используя свойства моего YAML.

Просто вставьте эту зависимость в свой pom:

    <!-- 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;
  }
}
person jfcorugedo    schedule 21.12.2015
comment
Также можно использовать ту же библиотеку для отчетов StatsD вместо HTTP, если кого-то интересует эта опция. - person Yonatan Wilkof; 18.09.2016
comment
Вам нужно написать планировщик, потому что добавление заданных ресурсов у меня не получается. - person Shek; 23.02.2018

Похоже, Spring Boot 2.x добавил в свои метрики несколько систем мониторинга. DataDog - один из них, поддерживаемый micrometer.io. См. Справочную документацию: https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-metrics.html#production-ready-metrics-export-newrelic

Для Spring Boot 1.x вы можете использовать пакет с обратным переносом:

compile 'io.micrometer:micrometer-spring-legacy:latest.release'

person kuceram    schedule 23.03.2018
comment
Привет, Spring boot 2 работает с агентом datadog 5? так как я обновил свое приложение до Spring boot 2, и теперь я не получаю никаких показателей в моем datadog! мне нужно что-то менять? Я слышал, что datadog не поддерживает netty. У меня проблема с метриками APM. - person Am1rr3zA; 11.05.2018
comment
такая же проблема здесь ... приложения Spring Boot 2 говорят, что они отправляют только метрики jdbc и pool, и даже те, которые я не вижу в интерфейсе datadog. - person Logemann; 03.09.2018
comment
@Marc, у вас для параметра management.metrics.export.datadog.enabled установлено значение true? Возможно, вам потребуется реализовать конфигурацию метрик и службу счетчиков. - person Jolley71717; 12.02.2019

Если вам подходит JMX, вы можете использовать JMX dropwizrd reporter в сочетании с интеграцией журнала данных java

person Guy Bouallet    schedule 21.12.2015
comment
Неплохо подмечено. Однако я развертываю свое приложение в heroku, поэтому я не могу установить агент datadog в ОС. - person jfcorugedo; 21.12.2015
comment
@jfcorugedo Я не думаю, что в этом вопросе говорилось что-нибудь о героку? Если требуется решение heroku, вам нужно добавить его в вопрос. - person eis; 21.12.2015
comment
Кажется, есть и хороший экономический аргумент в пользу этого - вы бесплатно получаете 350 метрик на каждый экземпляр. Если ваше приложение закачивает все свои метрики в DataDog (например, используя dropwizard-metrics-datadog), эти метрики учитываются в вашем пользовательском лимите использования - использование интеграции значительно снижает влияние. - person jmkgreen; 27.09.2016