java - 自定义指标使用千分尺发送 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 UI 中的指标摘要下。我错过了什么吗?
解决方案
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)
));
推荐阅读
- javascript - DOM准备好后如何获取所有表单元素?
- python - 如何从具有多个标头的熊猫数据帧中访问子标头标头
- php - “警告:mysqli::prepare(): Couldn't fetch mysqli”但是我没有这条线?
- regex - SAS 正则表达式字符串提取
- c# - 尝试使用 Win32_NetworkAdapterConfiguration 在 c# 中更改网络适配器的网络设置(DNS),但我看不到我做错了什么
- python - 将列附加到 Pandas 数据框
- python - Python maplotlib PNG 和 FPDF
- python - 为什么 Python 多处理不能在我的 PC 上运行?
- node.js - AWS NodeJS Lambda:将事件数据对象作为参数传递给需要模块
- c++ - 如何使用 ITK 将 PNG 转换为 PyTorch 的张量