Пользовательские метрики, отправленные datadog с помощью микрометра DatadogRegistry, не отображаются в сводке метрик Datadog

Я хочу отправлять пользовательские метрики с помощью io.micrometer.datadog.DatadogMeterRegistry в datadog. Ниже приведен фрагмент кода метода, с помощью которого я отправляю метрики в Datadog.

@Override
    public void emitMetrices(Map<String, String> dataPoints) {
        try {
            logger.info("inside emitMetrices from monitoring service with enableCustomMetrics: {}",
                    enableCustomMetrics);
            if (!isEnabled()) {
                logger.warn("Metrics are diabled");
                return;
            }

            // user supplied metrics
            Set<Tag> tags = new LinkedHashSet<Tag>();
            Set<Entry<String, String>> dataPointEntries = dataPoints.entrySet();
            for (Entry<String, String> entry : dataPointEntries) {
                String key = entry.getKey() == null ? MetricConstants.UNKNOWN_TEXT : entry.getKey();
                String value = entry.getValue() == null ? MetricConstants.UNKNOWN_TEXT : entry.getValue();
                tags.add(new ImmutableTag(key, value));
            }

            String tenantMoniker = MetricConstants.UNKNOWN_TEXT;
            String stackName = MetricConstants.UNKNOWN_TEXT;

            TenantDescriptor tenant = TenantContextHolder.get();
            if (tenant != null) {
                tenantMoniker = tenant.getTenantMoniker();
                stackName = tenant.getTierName();
            } else {
                logger.warn("Tenant is not available");
            }

            Tag tenantTag = new ImmutableTag(MetricConstants.TENANT_MONIKER, tenantMoniker);
            Tag stackNameTag = new ImmutableTag(MetricConstants.STACK_NAME, stackName);
            Tag serviceNameTag = new ImmutableTag(MetricConstants.SERVICE_NAME, serviceName);

            tags.add(tenantTag);
            tags.add(stackNameTag);
            tags.add(serviceNameTag);

            logger.info("sending metric to datadog");
            Counter counter = meterRegistry.counter(METRIC_NAME, tags);
            counter.increment();

            logger.info("metric sent successfully: {}", METRIC_NAME);

        } catch (Exception e) {
            logger.error("Error publishing metrics", e);
        }

    }

Я могу видеть метрику журналов, отправленную успешно без ошибок, но эта пользовательская метрика не отображается в пользовательском интерфейсе Datadog в сводке метрик. Я что-нибудь упускаю?


person Pratap Gangwani    schedule 10.11.2020    source источник
comment
тебе удалось это решить? У меня точно такая же проблема. Micrometer утверждает, что метрики отправлены успешно, но я не вижу их в DataDog.   -  person Giorgos K.    schedule 14.02.2021
comment
Извините за поздний ответ. Я использовал фильтр счетчика, не зная, что просто отрицает отправку метрики, когда имя метрики не соответствует шаблону. Я давал другое название метрики, которое не соответствовало шаблону. registry.config (). meterFilter (MeterFilter.denyUnless (id - ›PatternMatchUtils.simpleMatch (metric_pattern, id.getName ())));   -  person Pratap Gangwani    schedule 29.04.2021


Ответы (1)


MeterRegistry уже реализовал, как отправлять пользовательские метрики (публикация в DataDog). См. Код https://github.com/micrometer-metrics/micrometer/blob/master/implementations/micrometer-registry-datadog/src/main/java/io/micrometer/datadog/DatadogMeterRegistry.java#L133

Похоже, вы пытаетесь добавить общие теги к каждой метрике. Возможно, вам не следует внедрять собственный реестр DataDog, а вместо этого использовать предоставленный для отправки метрик и установки общих тегов через config:

registry.config().commonTags(Arrays.asList(
  Tag.of(MetricConstants.TENANT_MONIKER, tenant.getTenantMoniker()), 
  Tag.of(MetricConstants.STACK_NAME, stackName)
));
person checketts    schedule 10.11.2020
comment
registry.config (). meterFilter (MeterFilter.denyUnless (id - ›PatternMatchUtils.simpleMatch (название метрики, id.getName ()))); - person Pratap Gangwani; 29.04.2021