美文网首页
前端监控之接口统计

前端监控之接口统计

作者: 陈建芳 | 来源:发表于2021-05-03 23:38 被阅读0次

一、意义:
接口的成功率直接影响用户的转化率,像用户注册、支付、提交信息等接口如果异常的话,后果是很严重的。线上会因为各种情况,是在开发和测试阶段是不能解决的,所以监控线上接口状态是很必要的。

二、捕获方法:
接口响应捕获有两种方法:
  第一种是通过在业务中获取接口响应,比如在axios的结果获取接口响应信息,这种缺点是如果有多个项目,需要在每个项目进行侵入代码,工作量大并且容易出错。
  第二种是重写XMLHttpRequest和fetch,这样不需要侵入业务,监听请求响应结果。具体代码如下
1、重写XMLHttpRequest


const realXMLHttpRequest = window.XMLHttpRequest;
if (realXMLHttpRequest) {
   window.XMLHttpRequest = function() {
       const xhr = new realXMLHttpRequest();
       try {
           if (xhr.addEventListener) {
               const xhrStartTime = +new Date();
               xhr.addEventListener('loadend', () => {
                   try {
                       const {
                           responseText,
                           status,
                           statusText,
                           responseURL,
                       } = xhr;
                       const xhrEndTime = +new Date();
                       const obj: ReportApiInterface = {
                           url: responseURL,
                           type: status === 200 ? 1 : 2,
                           status,
                           msg: statusText,
                           delay: xhrEndTime - xhrStartTime,
                           res: status === 200 ? '' : responseText
                       };

                       reportApi(obj)
                   } catch (err) {
                   }
               });
           }
       } catch (err) {
       }
       return xhr;
   };
}

只做了监听响应结果,这样对原生方法完全没有任何改变。axios是基于XMLHttpRequest进行封装,也不会影响到请求插件。

2、重写fetch


const realFetch = window.fetch;
if (typeof realFetch === 'function') {
    window.fetch = function (input: RequestInfo, init?: RequestInit) {
        const fetchStartTime = +new Date();
        return realFetch(input, init).then((res: Response) => {
            try {
                const {
                    status,
                    statusText,
                    url,
                    ok
                } = res;
                const fetchEndTime = +new Date();
                const obj: ReportApiInterface = {
                    url,
                    type: ok ? 1 : 2,
                    status,
                    msg: statusText,
                    delay: fetchEndTime - fetchStartTime,
                    res: ''
                };

                const resClone = res.clone();
                resClone.text().then((str: string) => {
                    obj.res = ok ? '' : str;
                    reportApi(obj);
                });
            } catch (err) {
            }
            return res;
        });
    };
}

fetch返回的是promise,对响应promise拷贝一份单独处理。

三、上报参数:
捕获页面所有请求,监控接口响应结果。上报以下信息:
  1、url: string // 接口地址
  2、type: 1|2; // 1: 请求成功;2: 失败
  3、status: number; // 状态码
  4、msg: string // 错误消息
  5、delay: number // 接口响应时间
  6、res: string // status不等于200的响应文本
得到响应结果后,会根据采样率进行上报,采样率即上报的概率。采样率:type等于1(请求成功)10%的采样率,type等于2(请求失败)100%的采样率。

更快捷更准确接入前端监控

相关文章

  • 前端监控之接口统计

    一、意义:接口的成功率直接影响用户的转化率,像用户注册、支付、提交信息等接口如果异常的话,后果是很严重的。线上会因...

  • 使用ab接口压力测试

    由于最近在开发前端日志监控系统,对接口负载有较高的要求。我们需要模拟高并发的环境下,接口承受的最大负载。 后端接口...

  • 一步一步搭建前端监控系统:接口请求异常监控篇

    摘要: 如何监控HTTP请求错误? 作者:一步一个脚印一个坑 原文:搭建前端监控系统(四)接口请求异常监控篇 Fu...

  • 前端异常监控解决方案研究(转)

    前端监控包括行为监控、异常监控、性能监控等,本文主要讨论异常监控。对于前端而言,和后端处于同一个监控系统中,前端有...

  • 【前端】异常监控解决方案研究

    前端监控包括行为监控、异常监控、性能监控等,本文主要讨论异常监控。对于前端而言,和后端处于同一个监控系统中,前端有...

  • 前端埋点技术文档

    前端监控和前端埋点方案设计 阿里前端监控实践

  • 前端监控和前端埋点

    前端监控和前端埋点,一个是目的,一个是实现方式,做前端埋点,是为了做前端监控,那为什么要做前端监控呢? 前端监控的...

  • 前端异常监控解决方案研究

    本文出自 Tencent CDC(前端异常监控解决方案研究) 前端监控包括行为监控、异常监控、性能监控等,本文主要...

  • ELK前端日志分析、监控系统

    ELK前端日志分析、监控系统 前端日志与后端日志不同,具有很强的自定义特性,不像后端的接口日志、服务器日志格式比较...

  • 微信小程序 | 接入阿里云监控

    喜大奔普,微信小程序可接入 ARMS 前端监控啦。 阿里云监控可统计JS错误率,访问速度,API请求成功率,PU/...

网友评论

      本文标题:前端监控之接口统计

      本文链接:https://www.haomeiwen.com/subject/orxxdltx.html