如何查询Prometheus中target被丢弃的具体原因
Prometheus Target被丢弃排查方案
- 优先过滤查询被丢弃的target详情
你当前使用的查询接口可以追加参数直接过滤被丢弃的目标,返回结果中lastError字段会直接标注丢弃原因:curl http://<prom_ip>:9090/api/v1/targets?state=dropped - 检查重标签(relabel)规则配置
90%以上的非报错类target丢弃都是relabel规则导致的:- 排查所有
action: drop的规则,确认是否误匹配到了预期保留的target - 排查
action: keep的规则,确认预期保留的target是否满足匹配条件,不满足keep规则的target会被默认丢弃 - 可以使用promtool工具校验规则逻辑,将被丢弃target的原始标签代入规则做模拟验证
- 排查所有
- 检查服务发现配置有效性
根据你使用的服务发现类型做对应校验:- 静态配置/file_sd:检查配置文件格式合法性,确认目标地址、标签填写无误
- Kubernetes服务发现:确认Prometheus使用的ServiceAccount具备对应资源(Pod/Service/Endpoints等)的get/list权限,检查服务发现的namespace过滤、标签匹配规则是否覆盖了预期target
- 第三方服务发现(Consul/Eureka等):单独调用服务发现接口校验返回的实例列表是否包含预期target
- 排查重复target去重问题
Prometheus会自动丢弃标签集完全一致的重复target,你可以将被丢弃target的标签集与正常存活的target标签集做比对,若完全重合需要为target新增唯一标识标签(比如调整instance标签为全局唯一值) - 排查Debug日志关键词
开启Debug日志后直接过滤Dropping target关键词即可拿到丢弃原因,无需全量排查日志:# systemd部署的日志查询命令,其他部署方式替换为对应日志路径即可 journalctl -u prometheus | grep "Dropping target" - 如果使用Prometheus Operator部署,额外检查CRD配置:
确认ServiceMonitor/PodMonitor的matchLabels、namespaceSelector能够匹配到预期关联的资源,检查CRD中配置的relabelings规则是否存在误丢弃的逻辑。
内容的提问来源于stack exchange,提问作者Manoj Kumar
相关产品推荐
相关产品推荐

