Firebase SDK上传GCS文件时GCP告警策略未触发问题排查
问题描述
在GCP项目中配置了一项告警策略,当特定GCS Bucket中有对象插入时触发告警,策略使用带WriteObject标签的request_count指标。通过GCP控制台或REST API上传文件时告警正常触发,但Android/iOS应用用Firebase SDK上传文件(文件可正常存入Bucket)时,告警策略不触发。
疑问:
- Firebase SDK是否调用相同的GCP API?
- 告警策略的filter是否存在问题?
告警策略配置
{ "displayName": "File uploaded alert policy", "userLabels": {}, "conditions": [ { "displayName": "File uploaded", "conditionThreshold": { "filter": "resource.type = \"gcs_bucket\" AND resource.labels.bucket_name = \"bucket-x\" AND metric.type = \"storage.googleapis.com/api/request_count\" AND metric.labels.method = \"WriteObject\"", "aggregations": [ { "alignmentPeriod": "900s", "crossSeriesReducer": "REDUCE_NONE", "perSeriesAligner": "ALIGN_COUNT" } ], "comparison": "COMPARISON_GT", "duration": "0s", "trigger": { "count": 1 } } } ], "alertStrategy": { "autoClose": "3600s" }, "combiner": "OR", "enabled": true, "notificationChannels": [ "projects/channel-x", "projects/channel-y" ] }
Android端上传代码
依赖包:com.google.firebase:firebase-storage:20.1.0
fun firebaseUpload(filename: String, fileUri: Uri) { val storage = FirebaseStorage.getInstance("<BUCKET_URL>") val uploadTask = storage.getReference("/${filename}.zip").putFile(fileUri) uploadTask.addOnSuccessListener { ... } uploadTask.addOnFailureListener { ... } }
注:filename包含时间戳,避免文件覆盖。
问题分析与解决
1. Firebase SDK的API调用差异
Firebase Storage SDK不会直接调用标准GCS的WriteObject API,它通过Firebase封装的上传接口(如分片上传端点)完成文件上传,最终虽然会将对象存入GCS,但在GCP的storage.googleapis.com/api/request_count指标中,对应的metric.labels.method标签值和标准API调用不同。
常见的Firebase上传对应的method值包括:
firebase.storage.v1.StorageService.WriteObjectResumableUpload(分片上传场景)
2. 告警策略Filter的问题
当前告警策略的filter仅匹配metric.labels.method = "WriteObject",而Firebase SDK上传对应的method不在这个范围内,因此无法触发告警。
解决方案
修改告警策略的filter条件,将Firebase上传对应的method纳入匹配范围:
- 通过GCP控制台的Metrics Explorer查询
storage.googleapis.com/api/request_count指标,筛选目标Bucket,确认Firebase上传对应的具体method标签值。 - 更新filter,使用
OR逻辑包含所有需要匹配的method,示例如下:
"filter": "resource.type = \"gcs_bucket\" AND resource.labels.bucket_name = \"bucket-x\" AND metric.type = \"storage.googleapis.com/api/request_count\" AND (metric.labels.method = \"WriteObject\" OR metric.labels.method = \"firebase.storage.v1.StorageService.WriteObject\" OR metric.labels.method = \"ResumableUpload\")"
- 保存更新后的告警策略,测试Firebase SDK上传,验证告警是否正常触发。
内容的提问来源于stack exchange,提问作者Daniel Schrödder
相关产品推荐
相关产品推荐

