如何将一个GCP项目日志发送至另一项目并在Cloud Logging中查看
跨GCP项目日志转发至目标项目Cloud Logging(基于Pub/Sub)
你已经完成了源项目日志接收器、Pub/Sub Topic和目标项目订阅的配置,接下来只需要把订阅收到的日志写入目标项目的Cloud Logging即可,最直接的方式是用Cloud Function做中转:
1. 创建目标项目的Cloud Function
这个函数会监听你创建的Pub/Sub订阅,把收到的日志条目写入目标项目的Cloud Logging:
- 进入目标项目的Cloud Function控制台,点击创建函数
- 触发方式选择「Pub/Sub」,并选择你之前创建的订阅
- 运行环境选Python(示例用Python,其他语言逻辑类似),替换代码为:
import base64 import json from google.cloud import logging_v2 client = logging_v2.LoggingServiceV2Client() TARGET_PROJECT_ID = "你的目标项目ID" CUSTOM_LOG_NAME = "source-project-logs" # 自定义日志名,方便区分源项目日志 def pubsub_to_logging(event, context): # 解码Pub/Sub消息 msg_data = base64.b64decode(event["data"]).decode("utf-8") log_entry = json.loads(msg_data) # 构建日志写入参数 log_path = client.log_path(TARGET_PROJECT_ID, CUSTOM_LOG_NAME) # 保留源项目标识,方便溯源 resource = { "type": "global", "labels": { "source_project": log_entry.get("resource", {}).get("labels", {}).get("project_id", "unknown") } } # 写入日志(用json_payload保留原日志结构,text_payload则转为文本) entry = { "log_name": log_path, "resource": resource, "json_payload": log_entry } client.write_log_entries([entry]) - 给Cloud Function的默认服务账号添加权限:
- 在目标项目中,授予该服务账号
roles/logging.logWriter角色,确保它能写入Cloud Logging - 确认服务账号已拥有Pub/Sub订阅的读取权限(创建函数时默认配置,若有问题可手动添加
roles/pubsub.subscriber)
- 在目标项目中,授予该服务账号
2. 验证日志转发
在源项目生成一条测试日志,比如执行命令:
gcloud logging write test-cross-project-log "test message from source project" --project=你的源项目ID
等待1-2分钟后,在目标项目的Cloud Logging控制台,搜索自定义的日志名source-project-logs,就能看到从源项目转发过来的日志了。
额外优化:直接用Cloud Logging跨项目接收器
如果不需要Pub/Sub做中转,其实可以简化流程:
- 在源项目创建日志接收器时,直接选择「Cloud Logging bucket」或「Cloud Logging日志」作为目标,指定目标项目
- 给源项目的日志服务账号(格式为
serviceAccount:cloud-logs@system.gserviceaccount.com)授予目标项目的roles/logging.logWriter权限 - 日志会直接写入目标项目的Cloud Logging,无需额外中间服务
内容的提问来源于stack exchange,提问作者adithyar24200
相关产品推荐
相关产品推荐

