一、问题的背景

上图为一般游戏后台服务器的可能架构。接入服务器负责管理玩家链接及收发包,SvrA/B/C为内部逻辑服务器处理各种游戏逻辑。各内部服务器通过Proxy来进行通信。

 

二、问题的引出

在实际开发过程中,经常遇到这样的问题,客户端给服务器发送请求,但服务器没有返回,需要定位请求数据到底在哪里断了的情况。

比如某个请求的处理过程为请求先到SvrA,然后SvrA去SvrC做一些处理,返回后SvrA再到SvrB做数据保存,最后SvrA返回结果给客户端。其处理路径为:

Client->SvrA->Proxy->SvrC->Proxy->SvrA->Proxy->SvrB->Proxy->SvrA->Client

 

于是,最常见的找问题的方式是从SvrA开始,逐一查看各Svr的log,看到底在哪里中断了。更聪明一点的做法可能是采用二分法,先去SvrA的log查看是否正常以确定问题是出在前半路径还是后半路径……

到每个Svr上去查看log的方式,显示非常繁琐及低效,尤其是路径更长或是各个Svr还不在同一机器上时,将会更加麻烦。

 

三、问题的解决

    某天无意中看到一个小工具Multitail的介绍,它可以实现在同一屏幕下查看多个文件的变化,甚至可以跨机器查看log!这下问题解决了。下面是效果示意图(其中第三个为跨机器查看log变化):

 

Mutiltail的使用:

1、  安装:程序代码可上http://www.vanheusden.com/multitail/下载,下载后只需解压然后make install即可

2、  使用:

使用multitail /path1/filename1 /path2/filename2 ……即可查看多文件实时输出

3、  关于跨服务器查看log

使用multitail的-l选项,通过ssh远程执行tailf命令即可。(Multitail的-l选项可以查看一个命令的输出)

比如上面效果图所使用的命令为

multitail  /home/gamesvr/log/ServerFrame_2014-02-08.log  /home/proxy/log/ProxySvr_2014-02-08.log -l "ssh root@10.12.194.93 'tailf /home/cubedb/log/ServerFrame_2014-02-08.log'"

 

附: 要使用ssh远程执行命令,需要先做ssh2无密码登录配置。方法很简单,

从服务器A无密码登录到B的配置:

在服务器A上操作:

# ssh-keygen2 -t rsa

# cd ~./ssh2

# echo "IdKey id_rsa_2048_a" > identification

# cp id_rsa_2048_a.pub testssh2.pub

 

在服务器B上操作:

# cd ~/.ssh2

将服务器a上的testssh2.pub,拿到服务器B的~/.ssh2目录下

# echo "key testssh2.pub" >> authorization

Logo

更多推荐