ARMS用户小程序 接入前端监控,有pv 数据,但是没有 api 数据是什么原因呢?

ARMS用户小程序 接入前端监控,有pv 数据,但是没有 api 数据是什么原因呢? https://help.aliyun.com/zh/arms/user-experience-monitoring/access-applet?spm=a2c4g.11186623.0.0.bd5a3c99FbbJis

展开
收起
三分钟热度的鱼 2024-04-17 22:44:31 77 发布于安徽 分享
分享
版权
举报
阿里云 AI 助理回答

在ARMS前端监控中,如果小程序接入后能够正常上报PV(页面访问量)数据,但没有API数据,可能是由于以下原因导致的。以下是详细的原因分析及解决方案:


1. API自动上报未开启

ARMS前端监控默认会自动捕获并上报API请求数据。如果未开启API自动上报功能,则不会生成API相关的日志。

解决方案:

确保在初始化SDK时未禁用API自动上报功能。如果使用了disableHook: true参数,则需要手动调用api()方法上报API数据。

  • 检查初始化代码

    const Monitor = AlipayLogger.init({
      pid: 'xxx',
      region: "cn",
      disableHook: false // 确保未禁用自动上报
    });
    
  • 手动上报API数据(如果禁用了自动上报):

    Monitor.api({
      url: 'your_api_url', // API请求的URL
      method: 'POST',      // 请求方法
      status: 200,         // HTTP状态码
      duration: 100        // 请求耗时(单位:毫秒)
    });
    

2. API过滤规则配置问题

ARMS前端监控提供了apiHelperignoreApis配置项,用于过滤不需要监控的API请求。如果配置不当,可能会导致部分或全部API请求被忽略。

解决方案:

检查是否配置了apiHelperignoreApis,并确认这些规则未误过滤掉需要监控的API请求。

  • 示例:检查ignoreApis配置

    __bl.setConfig({
      ignore: {
          ignoreApis: [
              'api1', // 被忽略的API
              /^random/, // 匹配正则表达式的API
              function(str) { // 自定义过滤逻辑
                  if (str && str.indexOf('api3') >= 0) return true; // 不上报
                  return false; // 上报
              }
          ]
      }
    });
    
  • 建议:如果未明确需要过滤某些API,可以清空ignoreApis配置。


3. 跨域问题导致API请求未被捕获

如果API请求与当前应用域名非同源(即跨域),可能会因浏览器的安全策略导致API请求未被捕获。

解决方案:

确保API请求与当前应用域名同源。如果确实存在跨域情况,请参考以下步骤解决:

  1. 确认前后端链路追踪配置

    • 在初始化SDK时,设置enableLinkTrace: true
    • 示例代码:
      <script>
      !(function(c,b,d,a){
       c[a]||(c[a]={});
       c[a].config={
           pid:"xxx", 
           imgUrl:"https://arms-retcode.aliyuncs.com/r.png?", 
           enableLinkTrace: true // 开启前后端链路追踪
       };
       with(b)with(body)with(insertBefore(createElement("script"),firstChild))setAttribute("crossorigin","",src=d)
      })(window,document,"https://sdk.rum.aliyuncs.com/v1/bl.js","__bl");
      </script>
      
  2. 检查跨域请求的CORS配置

    • 确保后端服务器允许跨域请求,并正确返回Access-Control-Allow-Origin头信息。

4. API请求未触发上报条件

ARMS前端监控仅会上报符合特定条件的API请求。例如,默认情况下,仅会上报HTTP状态码为200的请求。如果API请求的状态码不符合条件,则不会被上报。

解决方案:

检查API请求的状态码和响应内容,确保其符合上报条件。如果需要自定义上报条件,可以通过parseResponse配置项修改解析逻辑。

  • 示例:自定义parseResponse
    __bl.setConfig({
      parseResponse: function(res) {
          if (!res || typeof res !== 'object') return {};
          var code = res.code;
          var msg = res.msg || res.message || res.subMsg || res.errorMsg || res.ret || res.errorResponse || '';
          if (typeof msg === 'object') {
              code = code || msg.code;
              msg = msg.msg || msg.message || msg.info || msg.ret || JSON.stringify(msg);
          }
          return {msg: msg, code: code, success: true};
      }
    });
    

5. 日志采样配置影响API数据上报

ARMS前端监控支持日志采样功能,通过sample参数控制性能日志和成功API日志的采样比例。如果采样比例设置过低,可能导致部分API数据未被上报。

解决方案:

检查sample参数的配置值,确保其设置合理。默认值为1,表示不进行采样。

  • 示例:调整采样比例
    __bl.setConfig({
      sample: 1 // 设置为1,表示100%采样
    });
    

6. 其他可能的原因

  • 网络问题:确保设备网络连接正常,避免因网络中断导致日志未上传。
  • SDK版本问题:确保使用的SDK版本为最新版本,旧版本可能存在兼容性问题。
  • 日志延迟:ARMS前端监控可能存在一定的日志延迟,建议等待一段时间后再次查看。

总结

如果ARMS前端监控中仅有PV数据而无API数据,建议按照以下步骤逐一排查: 1. 检查是否禁用了API自动上报功能。 2. 确认apiHelperignoreApis配置未误过滤API请求。 3. 检查是否存在跨域问题,并正确配置前后端链路追踪。 4. 确保API请求符合上报条件,并根据需要自定义解析逻辑。 5. 检查日志采样配置,确保采样比例合理。

通过以上步骤,通常可以定位并解决API数据缺失的问题。如果问题仍未解决,建议联系阿里云技术支持以获取进一步帮助。您可以复制页面截图提供更多信息,我可以进一步帮您分析问题原因。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答

云原生可观测基于Prometheus、Grafana 、OpenTelemetry 等核心产品, 形成指标、链路存储分析、异构数据源集成的数据层, 通过标准PromQL和SQL提供大盘展示、告警与探索能力。

还有其他疑问?
咨询AI助理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等