Cloud Data Fusion(CDAP) Post端点问题:Cloud Function返回空Series数组
排查Cloud Function调用Cloud Data Fusion指标接口返回空series问题
问题背景
本地运行代码调用Cloud Data Fusion (CDAP) /v3/metrics/query POST端点时,能正常返回带指标数据的series数组;但通过Cloud Function执行同一逻辑时,返回的series是空数组。
相关请求代码:
headers = { 'Authorization': 'Bearer ' + creds.token } body = { "query": { "tags": { "namespace": "default", "app": {pipeline_name}, "workflow": "DataPipelineWorkflow", "run": {latest_runid} }, "metrics": [ "user.SQL.records.in", "user.SQL.records.out", "user.SQL.records.error", "user.SQL.process.time.avg", "user.BigQuery.records.in", "user.BigQuery.records.out", "user.BigQuery.process.time.avg" ], "timeRange": { "aggregate": True } } } metric_response = requests.post(f'{cdf_endpoint}/v3/metrics/query', json=body, headers=headers)
本地响应示例:
{ "query": { "startTime": 0, "endTime": 1704996437, "series": [ { "metricName": "user.BigQuery.records.out", "grouping": {}, "data": [ { "time": 0, "value": 100 } ] }, { "metricName": "user.BigQuery.process.time.avg", "grouping": {}, "data": [ { "time": 0, "value": 39 } ] } ], "resolution": "2147483647s" } }
Cloud Function响应:
{ "query": { "startTime": 0, "endTime": 1704996437, "series": [], "resolution": "2147483647s" } }
排查方向
1. 核对权限差异
- 检查Cloud Function使用的服务账号,是否和本地凭据拥有相同权限:必须具备
clouddatafusion.viewer或更高权限,确保能访问目标Data Fusion实例的指标数据。 - 打印Cloud Function中
creds.token对应的权限范围,对比本地凭据,确认包含https://www.googleapis.com/auth/cloud-platform或CDAP相关权限。
2. 验证请求参数准确性
- 确认Cloud Function里
pipeline_name和latest_runid的取值和本地完全一致,避免变量拼接错误(比如大小写、空格、特殊字符差异)导致标签不匹配。 - 直接在Cloud Function中硬编码本地能成功的
pipeline_name和latest_runid,测试是否能返回数据,排除动态变量的问题。
3. 检查时间范围与指标时效性
- 虽然设置了
aggregate: True,但要确认Cloud Function执行时的endTime是否覆盖了管道运行的完整周期。如果指标还未完成上报,会导致series为空。可以手动添加明确的startTime和endTime:"timeRange": { "startTime": 1704990000, "endTime": 1704997000, "aggregate": True }
4. 排查网络与端点访问限制
- 若Data Fusion实例是私有网络部署,确认Cloud Function所在VPC已配置VPC peering或云NAT,能正常连通CDAP端点。
- 在Cloud Function中添加日志,打印
metric_response.status_code和metric_response.text,排查是否有隐藏的权限错误(403)或端点不可达(404)提示。
5. 确认CDAP指标存储一致性
- 若本地查询和Cloud Function查询间隔较久,可能目标运行实例的指标已被清理。重新触发一次管道运行,用Cloud Function查询新的运行ID,验证是否能获取数据。
内容的提问来源于stack exchange,提问作者cloud_anny
相关产品推荐
相关产品推荐

