# 网络问题排查思路
# 需要的网络信息
# 1.1网络拓扑图
现场环境的网络拓扑图,能够体现OA 服务到外网所经过的网关设备、代理、安全设备......等,这个网络信息是找客户获取每家客户都不一样,如下图举例:
# 1.2常见的网络安全设备
网络防火墙、WAF、上网行为管理器、IPS、毒霸、DDOS、高防、CDN......等。
# 1.3有问题的业务请求URL
业务开发定位问题时可以记录下来,后面查找日志和验证时可以有用
# 1.4问题功能的抓包
如浏览器的F12、fiddler 、wireshark、tcpdump 之类的问题点的抓包
# 2、请求慢排查
# 案例一:移动端访问慢
# 2.1服务器本机测试
# 方案一:浏览器登录测试(可选)
网络方向上排查思路,首先判断是否是网络导致;可以通过在服务器本机模拟M3的H5接口调用测试。
在服务器本机使用http://127.0.0.1:端口登录OA页面(没桌面的找与服务器同网段的PC),然后在同一个浏览器里输入H5的访问地址 (PC端登录界面seeyon 后面加如下参数H5/wechat/html/allApps.html)
若是服务器本机上验证没有问题,那么就依次往外移动一个网络节点测试(按网关设备分节点),当前环境就是OA服务器------网络防火墙------nginx------WAF------IPS------网络防火墙------DDOS ------VPN这样一个链路,可以根据这个节点访问OA测试问题时候复现(访问地址根据所过的网关后访问网络可达的地址),问题在那个节点复现网络上就核查这个节点(核查网关日志、流量转发有无丢包)
# 方案二:Postman测试(可选)
下载地址:https://www.postman.com/downloads/ (opens new window)
第一次打开会要求登录账号密码,如果没有,直接关闭,重新打开会自动进入下图这样子无需账号密码登录的界面。(其实可以注册一个没啥影响)
下一步就是新建页面,如下图:
# 使用PostMan测试GET接口
步骤:
(一)选择请求的方式
- 写请求的URL地址
填写请求的参数
点击Send按钮发起GET请求
查看服务器响应的结果
# 使用PostMan测试POST接口
步骤:
1、选择请求的方式
2、填写请求的URL地址
3、选择Body面板并勾选数据格式
4、填写要发送到服务器的数据
5、点击Send按钮发起POST请求
6、查看服务器响应的结果
唯一不同的地方是第三步:选择Body面板并勾选数据格式,其余步骤相同(没有参数的可忽略)
参考链接:https://blog.csdn.net/m0_61843874/article/details/123324727 (opens new window)
# 方案三:Curl命令测试(可选)
Linux/windows下执行curl命令发送post请求
curl -X POST -H "Content-Type: application/json" -H "referer:http://localhost" http://localhost:8080/test/file/import -d '{"param":"20210608"}'
H表示请求头,-d表示参数
参考案例:
curl -v http://localhost:8080/JsonSendSms -d '{"mobile":"00000000000","smsID":"12345678999","smscontent":"this is a test2"}' -X POST -H "Content-Type: application/json" -k
详细信息可以参考如下链接,具体的测命令需要对应的接口开发给出参数
参考链接:https://blog.csdn.net/weixin_49114503/article/details/119679741 (opens new window)
# 2.2网络抓包(可选)
# 2.2.1Fiddler抓包
在PC端安装fidder后,移动端和PC端连同一个WIFii,然后修改移动端手机wifii为PC端的地址和8888端口,这样就可以抓手机端的流量了,具体方法如下链接。
安卓抓包:
https://www.jianshu.com/p/b90901c1f19d (opens new window)
苹果手机抓包:
https://www.jianshu.com/p/cf03ac3c51dd (opens new window)
http://oa.testxt.com/seeyon/officeservlet (opens new window) 如下截图这个是插件打开附件的耗时,耗时时间根据文件的大小而定是那这个请求分析耗时;
如下截图是请求的耗时分布,可以看到15:56:56.942 server收到请求15:56:58.077 server开始响应这个之间的时间差就是后端处理耗时。
# 2.2.2Wireshark抓包
下载地址:https://www.wireshark.org/download.html (opens new window)
需要在PC端安装wireshake,然后PC端发出wifi移动端去连接PC端发出的wifi来抓移动端的包,wireshake在抓包时需要选择wifi的网卡。
抓包完成后保存抓包文件
# 2.3负载排查(可选)
拿nginx举例,排查nginx负载请求转发耗时需要开启access.log日志,并在日志上加上request_time(整个请求的总时间 )、和upstream_response_time (从Nginx向后端建立连接开始到接受完数据然后关闭连接为止的时间),从这两个参数可以分析到请求耗时是在后端、前端还是网络上。
在ngin.conf 添加如下日志格式可以打印这两个时间,若还需要打印其他信息可以自行调整。
log_format main '{' '"$time_local","remote_user":"$remote_user",' '"request_time":$request_time,"upstream_response_time":$upstream_response_time,' '"request":"$request","status":"$status","body_bytes_sent":"$body_bytes_sent","http_referer":"$http_referer",' '"upstream_addr":"$upstream_addr","upstream_status":"$upstream_status"' '}'; access_log logs/access.log main;
如下截图日志request_time时间较大达到了60秒以上,upstream_response_time耗时基本都是几十毫秒,这种现象表明请求耗时在nginx之前到客户端的那一段网络上,而不在后端,需要负责网络维护的技术支持人员进一步分析处理。
如上现象问题在本文举例的拓扑图中就可以排查WAF、IPS、网络防火墙、DDOS这些设备,可以根据对应设备的日志或者抓包核查这些设备上的请求耗时,每个设备都核查日志比较繁琐有时网关设备不一定有这类日志,那么比较单间的方法就是网络链路分节点测试,验证问题会在那个节点复现。
# 案例二:移动端调试在线文档
https://open.seeyoncloud.com/cmpdev/ (opens new window)
# 案例三:PC端访问慢
# 2.4服务器本机测试
# 方案一:浏览器登录测试(可选)
问题界面按F12打开devtools 查看network模块勾选上disable cache
然后复现问题,当前界面的请求就会在下面的窗口输出,输出的请求会记录耗时、请求具体的URL
这些,定位慢请求时可以根据这个筛选,可以保存当前界面请求。
如下请求就是耗时长的,点击进去可以看到耗时是在等待服务器响应
# 2.5其他工具或者命令测试(可选)
同2.1 的方案二、方案三,在PC 端外网测试测试时方案二、方案三 的方法也可以参考
# 2.6网络抓包(可选)
# 2.6.1 fiddler抓包
客户端抓包:
https://www.jianshu.com/p/fee9e102f787 (opens new window)
抓包文件分析方法和2.2.1 都是一样的
# 2.6.2Wireshark抓包
下载地址:https://www.wireshark.org/download.html (opens new window)
下载wireshake 工具安装后,双击打开选择需要抓包的网卡就可以自动抓包,完成后保存抓包文件
# 2.7负载排查
同2.3
# 网络拦截排查
{width="4.975in"
height="2.716666666666667in"}
# 3.1服务器上测试 {#服务器上测试 .list-paragraph}
# Windows 服务器
浏览器输入http://127.0.0.1 登录OA 测试。
# Linux服务器
有桌面的可以在浏览器输入http://127.0.0.1 登录OA 测试;
无桌面的可以找与服务器IP同网段的PC登录测试,如服务器IP为192.168.2.10,那可以找一台IP为192.168.2.x的PC登录http://192.168.2.10测试;
# 3.2网络排查 {#网络排查 .list-paragraph}
根据第一步的测试结果分析,服务器上http://127.0.0.1 登录测试功能正常而外网登录有问题,那就是OA到外网的这段网络有问题;排查内网到外网经过的网络设备或软件(网络防火墙、WAF、上网行为管理器、nginx、apache、F5),常见的就这些;
加密设备根据实际项目去找网管或厂家了解
# 网络防火墙
属于安全类软件自带主动拦截,建议对OA的所有请求配置放行策略;
# WAF(Web应用防护系统)
属于安全类软件自带主动拦截,建议对OA的所有请求配置放行策略;
# 上网行为管理器
属于安全类软件自带主动拦截,建议对OA的所有请求配置放行策略;
# 金万维快解析
这是一个三方的动态域名解析工具,可以解析服务器内网IP到外网域名;此工具出问题时会导致OA外网访问异常。
# 3.3公有云环境 {#公有云环境 .list-paragraph}
列如:AWS、华为云、阿里云、腾讯云、电信云、政务云、青岛云....
公有环境的验证方法同步骤1网络排查方向;
# 安全日志
会记录安全相关的日志,可以查看拦截记录。
# Web应用防火墙
可以查看拦截记录。
# 附录1:常被拦截的请求
如下URL只是举例,实际的url以现场实际为准,参数会有所差异,涉及大多数功能表单、插件、选人、提交流程
表单:
/seeyon/rest/cap4/form/saveOrUpdate
提交或选人:
/seeyon/ajax.do?method=ajaxAction&managerName=WFAjax&rnd=5717
M3:
/seeyon/rest/m3/login/verification
表单:
/seeyon/template/formTemplateDesignController.do?method=saveTemplate2Cache&isNew=true&independentModel=
提交或选人:
/seeyon/ajax.do?method=ajaxAction&managerName=WFAjax&rnd=70349
表单:
/seeyon/rest/cap4/batch/data-revise/delete
插件:
/seeyon/officeservlet
插件:
/seeyon/pdfservlet
提交或选人:
/seeyon/ajax.do?method=ajaxAction&managerName=permissionManager&rnd=32887
协同:
/seeyon/collaboration/collaboration.do?method=stepBack&affairId=-4761895026113101571&summaryId=6565903392897453455&isWFTrace=1
提交或选人:
/seeyon/ajax.do?method=ajaxAction&managerName=permissionManager&rnd=32887
协同:
/seeyon/rest/coll/finishWorkItem/-358865116312286189?cmprnd=58797861&option.n_a_s=1
