如何在智能告警平台CA触发测试告警
986
2022-09-19
浅谈 在 express 项目中的实践(浅谈中国实现碳达峰碳中和的主要路径论文)
为什么我们要使用性能监控呢?
然而有的人喜欢说:“有些问题留着也不会有什么影响。”,但我觉得服务端的事情,凡是冒烟的地方,终究会着火的。
还有的人喜欢说:“我的代码绝对不可能有bug”。不过这只是吹牛逼。
废话不说了,直接上干货
使用 监控自己的项目,首先你需要去 注册一个开发者账号。
Application Insight 应用程序监控
然后配置文件从 node_modules/ 里面拷出来,改一下 License Key ,就这么简单。
我们安装好探针以后,过几分钟让插件收集到数据,就能在面板里面看到各种图标。
首先需要关注的是响应时间图表
右上角的窗口叫做 apdex
cpm 图表
Web 事务图表
这是一个很重要的图表,在这里我们能看到性能最差的几个 web 事务,我们通过 url,能找到代码中对应的 controller 函数,从而找到这个接口中性能的瓶颈
我们可以点进去,查看接口的详细情况。
我认为最重要的一个图表是 breakdown table
另外 的 Application Insight 还给我们提供了,系统拓扑图,按 web 事务查找瓶颈的功能,按 sql 查找瓶颈的功能,外部服务的具体执行时间(这个很重要,看谁在拖我们的后腿)以及后台服务的监控。
.selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}
express 在抛出系统异常的时候,有可能会挂掉。下面举2个栗子
exports.show = function(req, res) { a.b //a == undefined}
抛出异常
exports.show = function(req, res) { request.post({ url: ***-service.com }, function(err, response, body) { a.b //a == undefined })}
抛出异常,然后服务挂掉。
是被 express 程序启起来的,算是 express 进程的一个子进程,如果 express 挂掉了, 也跟着挂了,所以,不可能有机会发回错误信息。 结论是只要在回调里面抛出的异常,任何探针都没有办法收集到错误,因为在这一层无法做这件事情。
当然,我们虽然有 pm2 这样优秀的进程管理工具来帮我们,挂掉之后自动重启服务。。。但我们需要在第一时间获得报错信息啊。。。。即使 pm2 的 error.log 里面会保留异常,但谁又会没事专门盯着 error 这个日志看呢。
针对这个问题,我自己写了一段代码来收集错误日志,希望对大家有帮助。
var pm2 = require('pm2');var Slack = require('slack-node');pm2.launchBus(function(err, bus) { console.log('connected'); bus.on('log:err', function(data) { var webhookUri = "{你的slack webhook}"; var slack = new Slack(); slack.setWebhook(webhookUri); slack.webhook({ channel: "#general", username: "cq-tct", icon_emoji: ":ghost:", text: data.data }, function(err, response) { console.log(response); }); });});
把这一段保存为 err_notifier.js 放在项目根目录下,每次启完服务之后运行
node err_notifier.js
这样就能通过 slack 第一时间收到报错了。即使服务挂掉也能发过来。
这里用了另一个叫做 slack 的工具,slack 是一款即时通信的办公协作工具,相信大家或多或少都听说过(就是创业半年估值11亿美元,一年变28亿那个家伙)。国外类似的还有 hipchat,国内我不太清楚。
首先去 slack 申请一个 team, 然后创建一个 room,为 room 打开一个 webhook,把 webhook 的地址赋值给 webhookUri, 这样我们无论在哪里,只要项目报错,就能第一时间收到通过 slack 推送过来的错误日志。
最后
虽然可以帮大家在开发初期铺平道路,但也不意味着因为有了监控就可以胡作非为 (反正项目只要冒烟了,一目了然)。
我认为最靠谱的做法是:严格遵守各种 style guide 来写代码 + 一个监控系统 + 100% 覆盖率的单元测试 + 几套集成测试 + 一套可靠的发布流程
发表评论
暂时没有评论,来抢沙发吧~