You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node环境提取Firebase Performance数据并集成到Grafana?

在Node环境提取Firebase Performance数据并集成到Grafana的可行方案

Firebase Performance的底层数据托管在Google Cloud Monitoring中,官方没有提供Node专属的Performance API,但可以通过Google Cloud Monitoring Node.js客户端结合Firebase Admin SDK实现数据提取,再对接Grafana。以下是具体步骤:

一、依赖安装与权限准备

  • 安装所需依赖包:
    npm install @google-cloud/monitoring firebase-admin
    
  • 准备GCP服务账号密钥:在Firebase项目对应的GCP控制台创建服务账号,赋予roles/monitoring.viewer权限,下载JSON格式的密钥文件。

二、Node环境下提取Performance数据

Firebase Performance的指标均以firebase.performance.为前缀命名(如firebase.performance.network_request.duration),可通过Monitoring API查询这些指标。示例代码如下:

const { MonitoringServiceClient } = require('@google-cloud/monitoring');
const admin = require('firebase-admin');

// 初始化Firebase Admin SDK
admin.initializeApp({
  credential: admin.credential.applicationDefault()
});

const client = new MonitoringServiceClient();
const projectId = process.env.GCP_PROJECT_ID;

async function fetchPerformanceMetrics() {
  const request = {
    name: client.projectPath(projectId),
    filter: 'metric.type="firebase.performance.network_request.duration"',
    interval: {
      startTime: {
        seconds: Date.now() / 1000 - 3600 // 查询最近1小时数据
      },
      endTime: {
        seconds: Date.now() / 1000
      }
    },
    aggregation: {
      alignmentPeriod: { seconds: 60 }, // 按1分钟粒度聚合
      perSeriesAligner: 'ALIGN_PERCENTILE_95', // 取p95耗时值
      crossSeriesReducer: 'REDUCE_SUM'
    }
  };

  const [timeSeries] = await client.listTimeSeries(request);
  // 格式化返回的时序数据
  const formattedData = timeSeries.flatMap(series => 
    series.points.map(point => ({
      timestamp: point.interval.endTime.seconds,
      value: point.value.doubleValue
    }))
  );

  return formattedData;
}

// 调用示例
fetchPerformanceMetrics().then(data => console.log(data)).catch(console.error);

三、对接Grafana的两种方式

方式1:直接使用Grafana的Google Cloud Monitoring数据源

无需编写Node代码,直接在Grafana中添加Google Cloud Monitoring数据源,配置服务账号密钥后,即可在指标筛选器中搜索firebase.performance前缀的指标,直接实现可视化。

方式2:通过中间层自定义处理后导入

如果需要对数据做自定义清洗、聚合,可通过Node服务定时拉取数据,存入时序数据库后再对接Grafana:

  • 用node-schedule实现定时任务,定期调用上述fetchPerformanceMetrics函数
  • 将处理后的数据推送到Prometheus Pushgateway,或写入InfluxDB、TimescaleDB等时序数据库
  • 在Grafana中配置对应数据库的数据源,完成可视化配置

关键注意事项

  • 确保服务账号权限足够:除monitoring.viewer外,若需访问Firebase项目特定资源,可能需要额外的Firebase权限
  • 可按需调整指标筛选器:比如替换为firebase.performance.app_start_time获取启动时间,或添加标签过滤特定应用版本、设备类型

内容的提问来源于stack exchange,提问作者DanielX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:55:34