Pubsub消息未尝试投递直接进入死信队列问题求助
Pub/Sub消息直接进死信无投递记录的追踪方法
1. 查消息自带属性与监控指标
- 查看死信队列中消息的
delivery_attempt属性:用命令gcloud pubsub subscriptions pull <死信队列订阅名> --format="value(attributes.delivery_attempt)"批量导出,若值为0或1,即可确认消息未经过投递尝试。 - 分析Pub/Sub监控面板的
subscription/num_dead_letter_messages指标:按error_type拆分维度,能看到消息进入死信的具体触发原因(比如消息体积过大、ACK ID无效等),即便无投递记录,系统也会留存触发死信的错误类型。
2. 开启审计日志抓全链路流转
- 为主订阅和死信队列开启数据访问审计日志,日志会记录消息从主订阅转至死信队列的所有系统操作。用过滤器
resource.type="pubsub_subscription" AND logName:"projects/<你的项目ID>/logs/cloudaudit.googleapis.com%2Fdata_access"筛选日志,重点关注operation.type为DELIVER_MESSAGE或DEAD_LETTER的条目,里面包含消息ID、转死信的具体原因等细节。
3. 发布消息时添加自定义追踪标识
- 发布消息时给每条消息加自定义属性,比如
trace_id(用UUID生成)、publish_time,示例代码:
后续从死信队列拉取消息时,可通过publisher.publish(topic_path, data=b"your message content", trace_id=str(uuid.uuid4()), publish_time=str(time.time()))trace_id匹配发布端的日志,追踪消息发布后的状态变化。
4. 核对订阅配置与状态
- 验证主订阅的死信策略配置:用
gcloud pubsub subscriptions describe <主订阅名> --format="value(deadLetterPolicy)"确认max_delivery_attempts是否确实设置为5,避免配置被误修改。 - 监控
subscription/num_undelivered_messages指标:若某段时间该指标突然下降但死信数上升,结合审计日志可排查是否为系统层面异常导致消息直接转入死信队列。
内容的提问来源于stack exchange,提问作者Rayhan Mustofa
相关产品推荐
相关产品推荐

