Webfunny介绍
Webfunny是一款轻量级前端异常监控和前端性能监控系统,帮助前端工程师定位并解决各种线上问题,确保项目健康良好的运行
可收集的错误(文件位置:/interceptor)
-
jserror错误(infoType: 错误类型,on_error、console_error)
on_error错误:TypeError、ReferenceError、UncaughtInPromiseError类型可以进行机器人通知
console_error错误:console.error 打印的错误都可以警告进行机器人通知
-
httpRequest错误
对响应的结果根据不同状态进行机器人通知,也可以对接口请求的超时时间进行预警设置。
响应状态码(status):404、500、502
超时时间:10s -
resourceError静态资源错误
每次发生静态资源报错,会预警通知
-
customerWarning自定义错误
1)自定义错误接口每隔10分钟会调用一次
2)内置的报错逻辑:当jsError/consoleError/httpError/resourceError报错达到100次或报错占比达到10%,就会触发预警
3)其他自定义报警逻辑
发件邮箱配置
- 修改/bin/useCusEmailSys.js配置,邮箱服务器需要开启IMAP功能
module.exports = {
useCusEmailSys: true, // 是否使用自己的邮件系统, true: 使用配置的邮箱密码;false: 由webfunny系统发送邮件
emailUser: "", // 163邮箱用户名
emailPassword: "" // 163邮箱,网易老账号用密码, 新账号用安全码
}
复制代码
-
修改/util/utils.js下sendEmail方法
sendEmail: (email, subject, html, user, pass) => {
const company = "baidu.com"
let transporter = nodemailer.createTransport({
host: "smtp.163.com",
port: 465,
secure: true, // true for 465, false for other ports
auth: { user,pass },
});
// send mail with defined transport object
// subject包含邮箱验证码
transporter.sendMail({
from: "'" + company + "' <" + user + ">", // sender address
to: email, // list of receivers
subject: subject, // Subject line
text: `<p>用户你好!</p><p>项目名${subject}</p><p>如有疑问,请联系:张三</p>`, // plain text body
html: `<p>用户你好!</p><p>项目名${subject}</p><p>如有疑问,请联系:张三</p>` // html body
});
}
复制代码
接入配置
-
注册webfunny账号,地址示例:http://localhost:8010/webfunny/register.html
-
管理员在【注册管理】下激活该账号
-
创建团队: 团队是用来做权限控制的,只有在这个团队里的成员才能看到团队下的项目。所以需要先创建一个团队来承载项目,便于管理。
-
创建项目: 根据提示创建项目,创建过程会持续进行2分钟左右,系统需要自动创建今天的数据库表。创建成功后会跳转到探针部署页
-
探针代码部署(推荐使用方式一):复制生成的探针代码,放置到项目的入口页面最上方,或者单独放置一个w.js文件引入
-
传入userId: 在项目的生命周期内传入即可
window.localStorage.wmUserInfo = JSON.stringify({ userId: ‘userId’, secondUserParam: ‘开发者1,开发者2’, userTag: ‘tag’, projectVersion: ‘1.0.1’ })
参数解释:1. 用户的userId,是让你们用来查找用户的,必传;2. 项目开发者secondUserParam,用来进行企微机器人预警@开发者使用,必传;3. 用户的tag,这个是用户的标签(比如:角色A、公司B等等);4. 项目版本号(projectVersion),是用来让查看项目每个版本号还有多少人在访问的。
目前未解决的问题
-
自定义报错收集中目前未对外暴露探针ID标识,无法针对项目进行预警,下一版本更新后可解决