为何Datadog APM查询在APM模块有数据,仪表盘模块无数据?
排查APM可见但仪表盘无数据的方案
针对你遇到的APM追踪数据可见,但仪表盘用相同env和service参数查不到数据的问题,核心原因是APM追踪数据与仪表盘依赖的指标数据是两条独立的采集链路,下面是具体排查步骤:
1. 确认Datadog Agent是否开启OTLP指标接收
你当前配置的DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT仅开启了OTLP的gRPC接收端口,但默认情况下Agent的OTLP receiver可能只处理追踪数据,需要额外开启指标接收:
- 对于Docker部署的Agent,添加环境变量
DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_INCLUDE_METRICS=true,确保Agent接收OTLP格式的指标数据。 - 若使用配置文件
datadog.yaml,需在apm_config.receive_otlp.protocols.grpc下添加include_metrics: true。
2. 检查OpenTelemetry Collector的指标导出配置
你的OTel Collector可能仅配置了追踪数据导出,未处理指标数据:
- 打开Collector的
config.yaml,确认pipelines中存在metrics管道,且关联了正确的receiver和exporter,示例片段如下:
receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 exporters: otlp: endpoint: datadog-agent:4317 # 确保Agent容器名/IP可访问 tls: insecure: true pipelines: traces: receivers: [otlp] exporters: [otlp] metrics: receivers: [otlp] exporters: [otlp]
- 若缺失
metrics管道,指标数据不会发送到Agent,仪表盘自然无数据。
3. 验证指标数据的流转链路
- 进入Datadog Agent容器,执行命令
datadog-agent status,在OTLP Receiver部分查看metrics相关统计,确认是否有指标被接收。 - 登录Datadog后台,直接在Metrics Explorer搜索Java应用常见指标(如
jvm.memory.used),不先限定env和service,看是否能找到数据。若能找到,再检查标签是否匹配。
4. 统一env和service标签的一致性
APM追踪与指标数据的标签可能不匹配,导致仪表盘筛选不到:
- 检查Java应用的OTEL配置,确保设置了
OTEL_SERVICE_NAME=<你的服务名>和OTEL_RESOURCE_ATTRIBUTES=env=<你的环境名>,且这两个标签同时附加到追踪和指标数据上。 - 若指标未自动继承标签,可在OTel Collector中添加
resource处理器强制统一:
processors: resource: attributes: - key: service.name value: "your-service-name" action: upsert - key: env value: "your-env" action: upsert
然后在traces和metrics的pipelines中都添加该processor。
5. 排查Agent的指标过滤配置
- 检查Agent的
datadog.yaml,确认metrics_exclude列表未过滤你的服务相关指标。 - 确保Docker容器网络连通:OTel Collector与Datadog Agent需在同一Docker网络,可通过
docker network inspect <网络名>确认容器是否在同一网络,或直接在Collector容器内ping Agent容器名验证连通性。
内容的提问来源于stack exchange,提问作者Juan Bustamante
相关产品推荐
相关产品推荐

