如何让作为日志接收器的Pubsub触发函数且不发送日志内容?
解决方案
问题核心
你的日志接收器默认将**完整日志条目(含insertId等元数据)**推送到Pub/Sub,而函数仅期望接收Jupyter中那种空JSON结构的消息,格式不匹配导致报错。
具体解决步骤
精准过滤目标日志
修改日志接收器的高级过滤条件,只保留Vertex AI监控触发的通知类日志,避免无关日志流入。示例过滤规则:resource.type="ml_model" AND logName:"projects/[你的项目ID]/logs/google.cloud.aiplatform.logging.v1.ModelMonitoringJob" AND (severity="ERROR" OR severity="WARNING")可根据你的监控触发场景调整规则,确保只推送需要触发流水线的日志。
自定义Pub/Sub消息结构
在日志接收器的「转换」设置中,使用结构化日志转换,直接构造空JSON对象(和Jupyter中发送的data={}完全一致)。转换模板设置为:{}这样推送到Pub/Sub的消息内容就和你手动发送的空字典完全匹配。
校验函数消息解析逻辑
确保函数正确解析Pub/Sub消息体,示例代码:import base64 import json def pubsub_trigger_pipeline(event, context): if "data" in event: try: # 解码并解析Pub/Sub消息 message_data = json.loads(base64.b64decode(event["data"]).decode()) # 此处message_data为空字典,与Jupyter发送的格式一致 # 执行你的流水线逻辑 except Exception as e: print(f"消息解析失败: {str(e)}") return # 后续流水线执行逻辑
内容的提问来源于stack exchange,提问作者schoon
相关产品推荐
相关产品推荐

