You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Google Analytics PHP API追踪请求响应时间等扩展信息?

追踪PHP API响应耗时到Google Analytics的可行方案

你提到已经实现了API请求次数的追踪,但想要获取响应耗时这类更细节的数据,其实可以通过Google Analytics Measurement Protocol来实现——这是官方提供的后端数据上报接口,专门用来处理非浏览器环境下的GA数据提交,包括计时信息。下面给你具体的实现思路和代码示例:

方案1:使用UA的Timing类型请求(适用于Universal Analytics)

如果你的GA还是Universal Analytics(UA),可以直接上报timing类型的数据,这和前端JS API里的gtag('timing_send')逻辑完全对齐。

实现步骤:

  1. 计算响应耗时:在API逻辑执行前后记录时间戳,转换为毫秒级的耗时数值。
  2. 关联用户身份:从前端的_gaCookie中提取用户ID(cid),确保后端数据能和前端用户行为关联起来。
  3. 构造并发送请求:按照UA的Measurement Protocol格式,把计时数据提交到GA的收集端点。

PHP代码示例:

// 记录API开始时间
$startTime = microtime(true);

// 这里是你的API核心业务逻辑
// ... 比如数据库查询、业务计算、请求转发等 ...

// 计算响应耗时(转换为毫秒)
$responseTimeMs = round((microtime(true) - $startTime) * 1000);

// 从前端Cookie获取用户ID(如果没有则生成临时ID)
$clientId = isset($_COOKIE['_ga']) ? $_COOKIE['_ga'] : uniqid('api_visitor_', true);

// 构造UA Measurement Protocol参数
$gaParams = [
    'v' => '1',                     // 固定协议版本
    'tid' => 'UA-XXXXXXXXX-X',      // 替换成你的UA跟踪ID
    'cid' => $clientId,             // 用户唯一标识
    't' => 'timing',                // 数据类型:计时
    'utc' => 'API Requests',        // 计时类别(自定义,比如按业务模块分组)
    'utv' => '/api/order/create',   // 计时变量(API端点路径,区分不同接口)
    'utt' => $responseTimeMs,       // 实际耗时(毫秒)
    'dt' => 'API: Create Order'     // 文档标题(可选,方便在GA后台识别)
];

// 异步发送请求(避免阻塞API响应)
$ch = curl_init('https://www.google-analytics.com/collect');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($gaParams));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOSIGNAL, true);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 100); // 设置100ms超时,防止拖慢API
curl_exec($ch);
curl_close($ch);

方案2:使用GA4的自定义计时事件(适用于Google Analytics 4)

如果已经迁移到GA4,需要适配GA4的Measurement Protocol格式,官方推荐上报timing_complete事件来记录耗时数据。

PHP代码示例:

$startTime = microtime(true);
// ... API业务逻辑 ...
$responseTimeMs = round((microtime(true) - $startTime) * 1000);
$clientId = isset($_COOKIE['_ga']) ? $_COOKIE['_ga'] : uniqid('api_visitor_', true);

// 构造GA4 Measurement Protocol参数
$gaParams = [
    'v' => '2',                     // GA4固定协议版本
    'tid' => 'G-XXXXXXXXX',         // 替换成你的GA4测量ID
    'cid' => $clientId,
    'en' => 'timing_complete',      // GA4官方指定的计时事件名称
    'ep.timing_category' => 'API Requests',
    'ep.timing_variable' => '/api/order/create',
    'ep.timing_value' => $responseTimeMs
];

// 发送请求逻辑同UA示例(略)

关键注意事项

  • 用户ID一致性:必须传递前端的cid(从_gaCookie获取),否则后端上报的数据会被视为独立用户,无法和前端行为关联分析。
  • 异步上报优先:一定要设置超时时间,或者用消息队列(比如Redis队列+异步消费者)来发送GA请求,避免GA的网络延迟影响API的响应速度。
  • 数据查看方式:UA可以在「行为 > 网站速度 > 用户计时」中查看耗时数据;GA4则需要在「探索」模块创建自定义报表,基于timing_complete事件的维度和指标分析耗时分布。

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

火山引擎 最新活动