服务端项目在线上运行过程中,可能会出现各种各样的问题,这些问题可能涉及到代码、环境、数据库等方面。
快速而准确地定位和解决这些问题,是提升客户体验的重要因素,尤其作为乙方工作人员时,需要急甲方之所急。
线上问题
回忆下工作中遇到的线上问题,难找问题的情况归类下
1、报错信息很少,只知道哪个接口,甚至不知道具体发生时间点;
2、没拿到出问题的账号权限,其他账号不能复现;
3、重试操作却很难复现问题,怀疑是并发操作的问题;
4、没有日志记录,需要加日志代码,然后上线后才能确认数据问题;
5、线上某个接口请求慢,调用了很多服务,不确定具体慢的环节。
解决问题的步骤是:复现问题、定位问题、修复问题,今天主要聊聊发现和定位问题,下面一一介绍好用的工具。
ELK日志系统
出现线上问题,如果你是登录服务器去查找日志,那就out了。尤其对于分布式服务,日志信息在多台服务,一一查找费时间。
更好的日志管理工具是 ELK,ELK由ElasticSearch (简称ES)、Logstash、和Kibana三个开源的软件组成。Logstash负责收集日志,ES负责分析日志,Kibana作用可视化展示,还可以支持很多扩展功能。
ELK是实时收集的,可支持各种服务的日志,包括Nginx、MySQL、Redis、MongoDB、应用程序日志等等。
这里不多做介绍了, 可参考这个搭建Docker版ELK环境,https://github.com/j3mall/dockerize-middleware/tree/master/elk-cluster

搭建ELK环境后,登录Kibana网页查看实时收集的日志,通过日志来源、关键词、记录时间、请求ID、请求IP等条件,快速搜索查要找的日志。
要是某个请求没记录到关键的日志信息,加日志代码的上线流程慢,怎么办呢?
抓包工具
比如说接口请求没返回预期的数据,也没抛异常,这时大概率是请求参数问题。对于HTML网页,我们在浏览器打开网络审查面板,即可查看请求数据。
而对于客户端或小程序,服务端如果没有日志记录,需要加日志代码,然后上线后才能确认数据问题。
这时可以使用抓包工具,捕捉网络请求查看HTTP请求参数,比如用 Charles,抓包的HTTP请求内容查看如下图

Charles在一个月试用期内免费使用,其他免费的还有 Wireshark、Fiddler、Tcpdump等等,选择你熟悉的工具即可。
全链路追踪
在分布式架构下,线上系统很需要全链路追踪工具,帮助监测和记录分布式系统中的请求路径,包括用户请求、后端服务调用、数据库访问等等,提供端到端的可见度。具体有以下几点重要作用
1、判断性能瓶颈:
帮助开发人员找到分布式系统中的性能瓶颈,并提供相关数据,以便更好地进行问题分析和解决。
2、快速定位问题:
提供实时的监测,让问题得到快速定位,并减少修复问题时的时间和人力资源消耗。
3、视觉化展现:
通过可视化和图形化界面展现网络调用和性能信息,让开发人员和运维人员能够更好地理解系统性能数据,并且识别细微下层数据的相关性问题。
常见的全链路追踪工具有 Pinpoint、Zipkin、Skywalking、Jaeger,下面这个图展示的是 Pinpoint追踪请求链路

看图可以直观的查看整个请求链路,包括方法名、参数值、请求耗时、返回状态等信息,能快速定位哪个环节出问题了,或者请求时间太长。
另外对于JVM内存使用、CPU使用情况等等,也有直观的图表展示。
当然全链路工具的功能不仅于此,对于很多微服务技术团队,相信不少有部署线上这类工具。
小结收尾
在单体服务器的情况下,我们怎么方便怎么来。而分布式部署时,ELK系统和全链路追踪工具,就能大大提升定位和解决问题的效率。
这是工具方便和强大的一面,而使用这些个工具前,先得申请部署呀,需要占用部分系统资源,比如说 ELK系统占用内存高,少说要4G以上。
文章若对你有用,谢谢你点赞、分享、在看。




