如何获取HTTP触发的Google Cloud Functions的execution ID
获取HTTP触发Cloud Function的Execution ID并写入自定义日志方案
HTTP触发的Cloud Function执行ID无需额外调用API,直接从请求头读取即可,具体实现如下:
实现步骤
- 从请求头
Function-Execution-Id中直接获取单次执行的execution ID - 写入日志时将该ID传入日志条目的
labels字段,对齐Google默认日志的结构,实现日志关联 - 修正原有代码的缺省配置,避免日志无法正确关联到云函数资源
修正后的完整代码
日志客户端初始化
from google.cloud import logging from google.cloud.logging.resource import Resource log_client = logging.Client() # 云函数对应日志名固定值,无需额外格式化 log_name = 'cloudfunctions.googleapis.com/cloud-functions' # 补充Resource必填的project_id标签,否则无法关联到对应云函数资源 res = Resource(type="cloud_function", labels={ "function_name": "my-function", "region": "asia-east2", "project_id": "my-project" # 替换为你的实际GCP项目ID }) logger = log_client.logger(log_name)
日志写入逻辑
# 从请求头读取当前执行的execution ID execution_id = request.headers.get("Function-Execution-Id") logger.log_struct( {"message": request.remote_addr}, resource=res, severity='INFO', # 将execution ID放入日志标签,和默认日志结构完全对齐 labels={"execution_id": execution_id} )
代码调整说明
- 原有
log_name中的.format("my-project")无实际作用,因原字符串无占位符,已移除 - Resource类型
cloud_function的必填标签包含project_id,原代码缺失会导致日志无法按云函数维度聚合 - execution ID属于单次执行的动态标识,需放入日志条目的
labels而非Resource的静态标签中,和GCP默认日志的存储逻辑完全一致
内容的提问来源于stack exchange,提问作者EEEEH
相关产品推荐
相关产品推荐

