【转】高效利用Fundebug追踪Node.js日志发现问题
不管使用哪个语言做项目开发,我们都会自觉地用日志来做相关记录。比如,HTTP请求,报错信息、某些关键节点埋点记录等等。在Java中有大名鼎鼎的Log4J,于是在Node.js中也有了log4js。
日志很此重要,然而再多次用户反馈之后才发现错误已经出现很久,并且折腾了半天也没有解决问题之后,意识到日志并没有想象中方便。
1. 内容超载
当访问量变大之后,每秒钟日志都是成百上千条。并且各种类型的日志都记载在里面。在查看日志的时候不得不反复前后翻看错误的关联日志信息,同时还要略过大量无关信息。本来是个简单的问题,都被复杂化了。
2. 信息分散
当访问量再大到一定程度,又构建了集群,N多台机器都在记录日志。于是,我们又需要将这些日志定期整合起来,使得原本就杂乱的信息更加杂乱。
3. 滞后性
因为日志太多,往往最先发现问题的不是我们。还是客户的反馈,最终使得我们去通过日志来排查。所以,导致解决问题不及时。
怎么办呢?
日志是个大数据,而错误是这个大数据中的小数据。所以,如果能够很好地去处理错误这个小数据,就能有效的解决问题了。于是,我们使用了Fundebug的Node.js异常监控服务。可以说是分分钟搞定问题。
为什么这么说呢?因为它提供了npm安装模块,并且使用非常方便。只需要引入该模块,并配置好apikey就可以了。
有什么优点呢?
- a) 只抓取异常数据,小而美;
- b) 提供主动报警,包括邮件、Slack、钉钉、倍洽等第三方工具;
- c) 多服务器的数据统一发送到一个地方来分析,简单方便。
简单示例
接入指引
创建项目的时候,选择Express。
然后安装fundebug-nodejs
模块,并复制代码到index.js
中。
Hello World
我们用Express的Hello World来做一个示例,首先新建一个文件夹hello-world
。 然后,在Terminal中进入当前目录,并输入
npm init
安装express:
npm install express --save
新建index.js
文件夹,并拷贝如下代码:
const express = require('express')
const app = express()
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Example app listening on port 3000!'))
安装fundebug-nodejs
npm install fundebug-nodejs --save
按照配置,将下面的代码复制进去:
var fundebug = require("fundebug-nodejs");
// 记得修改YOUR-API-KEY
fundebug.apikey="YOUR-API-KEY";
将下面的代码放到app的定义后面:
// 放到app的声明后面
app.use(fundebug.ExpressErrorHandler);
完整的代码如下所示:
const express = require('express')
const app = express()
// import fundebug
var fundebug = require("fundebug-nodejs");
fundebug.apikey="YOUR-API-KEY";
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3000, () => console.log('Example app listening on port 3000!'))
// fundebug error handler
app.use(fundebug.ExpressErrorHandler);
接下啦,我们故意在代码中造一个错误试试。
const express = require('express')
const app = express()
// import fundebug
var fundebug = require("fundebug-nodejs");
fundebug.apikey="YOUR-API-KEY";
app.get('/', (req, res) => res.send('Hello World!'))
app.listen(3001, () => console.log('Example app listening on port 3000!'))
// fundebug error handler
app.use(fundebug.ExpressErrorHandler);
// Test case
let test = [];
test[0].hello()
运行node index.js
,立马就会收到报错:
为了模拟更加真实的报错,我假装在路由的处理函数中写个bug:
const express = require('express')
const app = express()
// import fundebug
var fundebug = require("fundebug-nodejs");
fundebug.apikey="YOUR-API-KEY";
app.get('/', (req, res) => res.send('Hello World!'.len.len))
app.listen(3001, () => console.log('Example app listening on port 3000!'))
// fundebug error handler
app.use(fundebug.ExpressErrorHandler);
收到的报错如下所示:
为了方便排查问题,还可以配置用户(user)和metaData。报警也可以接入很多第三方,具体我就不详细介绍了。
暂时就介绍这么多吧!
作者:害羞
链接:https://juejin.im/post/5af39e4f6fb9a07a9f018d73
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
【转】高效利用Fundebug追踪Node.js日志发现问题的更多相关文章
- Fundebug上线Node.js错误监控啦
作为全栈JavaScript错误实时监测平台,Fundebug的Node.js实时错误监测服务上线啦,我们能够帮助开发者及时,高效地发现并且解决Node.js错误,从而提高开发效率,并提升用户体验. ...
- 利用OpenShift托管Node.js Web服务进行微信公众号开发
最近写了一个微信的翻译机器人.用户只要关注该公众号,发送英文的消息,就能收到中文翻译的回复.有兴趣的读者可以扫描下面的二维码关注该公众号,尝试发送英文单词试试看.(有时候第一次发送单词会收到“该公众号 ...
- Node.js日志框架选型比較:Winston
日志对于问题定位.调试,系统性能调优至关重要,尤其是系统复杂以及在线执行的情况下. 好的开发框架都会有一个可开启关闭/可配置记录级别的日志系统.我们从下面几个方面来做选型: 1. 每行日志都须要有准确 ...
- Node.js日志框架选型比較:Bunyan
前一篇Node.js日志框架选型比較:Winston Bunyan Bunyan(by Trent Mick)是另外一个值得考虑的日志框架,以稍微不同的方式处理结构化,机器可读性被重点对待. 其结果是 ...
- Fundebug后端Node.js插件更新至0.2.0,支持监控Express慢请求
摘要: 性能问题也是BUG,也需要监控. Fundebug后端Node.js异常监控服务 Fundebug是专业的应用异常监控平台,我们Node.js插件fundebug-nodejs可以提供全方位的 ...
- 利用Docker设置Node.js
docker是一个开源的应用容器引擎,可以为我们提供安全.可移植.可重复的自动化部署的方式.docker采用虚拟化的技术来虚拟化出应用程序的运行环境.如上图一样.docker就像一艘轮船.而轮船上 ...
- Node.js 应用全链路追踪技术——[全链路信息获取]
全链路追踪技术的两个核心要素分别是 全链路信息获取 和 全链路信息存储展示. Node.js 应用也不例外,这里将分成两篇文章进行介绍:第一篇介绍 Node.js 应用全链路信息获取, 第二篇介绍 N ...
- 利用n 升级工具升级Node.js版本及在mac环境下的坑
一.利用n 升级Node.js 最近在用NPM安装一个nodejs工具时发现,我的nodejs的版本有些旧了.这不是大问题,只要升级就可以了,当然,重新从nodejs.org最新版本是一种方法,但我想 ...
- Node.js / Python 日志
一.Node.js 日志 1.原生 Node.js 原生方法其实很简单,就四个: // 输出到 stdout console.log() console.info() = console.log() ...
随机推荐
- Leetcode_80_Remove Duplicates from Sorted Array II
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43835055 Follow up for "Re ...
- 数据库用户映射到SQL Server登录名
由于不是固定在一如电脑开始,经常需要把数据备份与恢复.或者是帮助客户修改程序,接收到客户备份好的数据,需要在电脑恢复. 这样就需要将数据库用户映射到 SQL Server 登录名.如何映射?可使用下面 ...
- OAF中的MASTER-DETAIL关系
在日常开发中,我们经常会遇到头行结构,并且要求打开界面,行是隐藏的,点击头上的"显示"按钮,才要求头对应的行信息全部显示出来,这样,我们就用到了Master-Detail结构. 下 ...
- Erlang Rebar 使用指南之一:入门篇
Erlang Rebar 使用指南之一:入门篇 全文目录: https://github.com/rebar/rebar/wiki 本章原文: https://github.com/rebar/reb ...
- HBase Bulk Loading
将数据导入到HBase有三种方式:(1) Mapreduce,输出为TableOutputFormat.(2) 用HBase API .(3)Bulk Loading.对于大量的数据入库,第三种数据是 ...
- unity C#更改系统默认鼠标指针
最近项目需要替换鼠标的默认图标,实现的效果是初始状态为一种图标,点击鼠标左键要换成另一种图标,按网上通用的方法做了以后,隐藏鼠标指针,在指针的位置画一个图片就可以了,但不知道怎么回事,这种方法画的图标 ...
- 关于UIView用户交互相关的属性和方法
UIView除了负责展示内容给用户外还负责响应用户事件 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为NO则不响应用户事件,并且把当前控件从事件队列中删除 ...
- 演进之美,越来越美:三分钟看尽 iOS 1 ~ iOS 8 的进化史
演进之美,越来越美:三分钟看尽 iOS 1 ~ iOS 8 的进化史 原文出处: 少数派 9 月 18 日苹果就将推出 iOS 8 正式版了,从 2007 年发布第一代 iPhone 时搭载在 iPh ...
- 排序算法入门之堆排序(Java实现)
堆排序 在学习了二叉堆(优先队列)以后,我们来看看堆排序.堆排序总的运行时间为O(NlonN). 堆的概念 堆是以数组作为存储结构. 可以看出,它们满足以下规律: 设当前元素在数组中以R[i]表示,那 ...
- InnoDB的4个特性
innodb 的四个特性 insert buffer innodb使用insert buffer"欺骗"数据库:对于为非唯一索引,辅助索引的修改操作并非实时更新索引的叶子页,而是把 ...