前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TSW的全息日志与全息抓包

TSW的全息日志与全息抓包

作者头像
TSW
发布2018-07-19 15:59:38
9720
发布2018-07-19 15:59:38
举报
文章被收录于专栏:TSWTSW

日志就是记录,是服务器运行时输出的记录。日志包括各种等级,比如错误(error)日志、警告(warn)日志、提醒(info)日志、调试(debug)日志等。我们在服务器输出日志时可以选择将日志输出为某个等级。

对于大规模的企业级的应用,日志绝对是一个必不可少的功能,对于问题排查和应用调试和监控等,都是十分重要的。

但是对于一个满足亿级访问需求的大规模企业级的系统,仅仅是将运行时的输出的日志保存下来是远远不够的,因此,从开发者的角度来讲,我们实现了全息日志。

全息日志的目的是为了方便开发者实时查看log,加快问题定位的效率。

全息日志查看方式如下:

(图1:全息日志截图)

通过全息日志,我们可以很方便的实时的查看用户的访问nodejs时服务器的实时log。简直是定位问题的神器。

全息日志的实现细节:

用户访问我们的服务的时候,我们会通过nodejs的console模块去打日志,我们可以通过hack该模块,把用户的输出log都劫持了然后暂存起来。

等到请求结束,我们可以监听nodejs的http.ServerResponse对象的finish事件,把当前用户请求所关联的完整的日志,发送到缓存服务器(为了实时,一般可以考虑redis或者cmem)保存起来。

我们通过一个key将日志保存在缓存服务器,这样我们就可以通过该key,将日志内容都提取出来,并且通过友好的格式化的输出来,这就是我们的全息日志了。(参考图1)

全息抓包了解一下:

现实中抓包的软件中比较著名的有几个:Fiddler、wireshark、Whistle等。

以Fiddler为例,他是一个http的抓包工具,只要是经过他代理的http请求,都能在该软件上查看请求和响应的详情,还可以设置请求的修改、重放、断点,响应的断点,文件的本地代理等强大的功能。我们还可以批量保存Fiddler的http会话(请求和响应包),方便下次查看并进行调试和问题的排查等,Fiddler的软件界面如下:

Fiddler保存会话的文件为SAZ文件,SAZ是Session Archive Zip的缩写,参考官网的描述:http://fiddler.wikidot.com/saz-files。可以简单的理解就是把http请求报文和http响应报文保存成文件夹和文件的格式(http请求和响应报文的格式可以具体借助搜索引擎复习下),并打包为一个文件,Fiddler只要读取改SAZ文件就知道http会话的详细内容。

对于其他的HTTP抓包工具,原理也是一样的,其核心就是供抓包工具使用的打包文件,里面按照一定的格式保存了http请求报文和http响应报文,即http会话。

回到全息抓包,我们定义的全息抓包为:当前用户的http会话+服务器跟后端服务器的http会话(不一定是http协议,但是本文只讨论http的)。

我们先来看下现代的web服务的架构:

我们的web服务器一般部署作为FRONTEND SERVER,对用户提供统一的web服务能力,而后台系统一般作为BACKEND SERVER,对web服务器提供数据能力,这样的好处是前后端分离,前端开发可以专注在FRONTEND SERVER,后端开发专注在BACKEND SERVER。

那么我们定义的全息抓包,就包括了用户和FRONTEND SERVER之间http会话、FRONTEND SERVER和BACKEND SERVER之间的http会话,可以说是360度无死角的抓包,我们使用的云抓包查看系统:https://qzone.tswjs.org/log/view/html/xxx,xxx需替换为你配置到环境中的key,如下所示:

如何实现全息抓包:

上面提到,整条调用链路涉及的HTTP会话分为两种:

1.用户和FRONTEND SERVER之间之间http会话。

2.FRONTEND SERVER和BACKEND SERVER之间的的http会话。

所有的http会话,都会有一个request对象和response对象。我们都可以从request对象中提取出http请求的报文,从response中提取出http响应的报文。拿到报文,我们就可以将它们格式化成抓包工具所需要的文件格式,利用抓包工具强大的能力进行应用的调试和问题的定位。

(欲知细节,建议阅读TSW源码)

利用全息日志+全息抓包还原用户现场:

有了全息日志+全息抓包,我们就有了完整的用户现场。

有了FRONTEND SERVER运行时的日志,我们就掌握了web服务器运行时的状况。

有了用户和FRONTEND SERVER之间http会话和FRONTEND SERVER和BACKEND SERVER之间的http会话,我们可以发现用户响应是否正常;

确认是不是后台请求回包出现问题了。

(终于,妈妈再也不用担心我背锅了)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 tswjs 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档