XSwitch入门

排查问题

不管系统做得多么完善,你在实际使用时都会遇到各种各样的问题。XSwitch提供了很多跟踪调试手段,可以在你遇到问题是帮你迅速定位排查。


橡皮鸭解题法

我们帮助过很多人解决过各种各样的问题,很多时候,客户自己也不知道遇到了什么问题,总之就是系统登录不上,或电话打不通。在我们启发和询问下,用户往往自己就把问题解决了。因此,我们一般都回告诉客户我们处理问题的万能公式:

一旦一个问题被充分地描述了它的细节,那么解决方法也是显而易见的。

更详细的解释参见橡皮鸭解题法

一般的排查方式

有问题,看日志。

打开【高极】⇨【扩展功能】⇨【终端】,可以很方便的排查问题。点击【日志指令】⇨【SIP日志】⇨【开】,可以打开SIP日志跟踪,打开【SIP Flow】可以看到简单的呼叫流程图。

如果你看不懂这些日志,不要紧。点【清屏】,然后打电话重现你的问题,点【下载】,把下载下来的日志发给XSwitch技术支持工程师。

当然,你也可以在Linux控制台上查看日志。执行make cli可以进入容器中的XSwitch控制台。

深入理解架构

XSwitch超级简单,最小化安装仅需要两个镜像:

  • PostgreSQL:数据库
  • XSwitch:所有都在这里面

PostgreSQL不用说了,XSwitch依赖它存储数据。首次启动,XSwitch会等待PostgreSQL,如果连不上,会一直尝试重连,所以,如果数据为库有什么问题,自然业务就不正常。

docker logs -f xswitch-pg可以查看PostgreSQL容器日志。

make bash-pg可以进入容器,psql -U xui xui可以进入数据库,执行SQL查询等。

如果数据库正常,再检查XSwitch是否已正常启动。

docker logs -f xswitch可以看XSwitch容器的日志。

make bash可以进入XSwitch容器,然后可以执行fs_cli进入XSwitch控制台。

mod_verto模块中有XSwitch内置的HTTP服务器,收到HTTP请求后,静态文件会直接返回,动态API请求(/api/)会执行后端的Lua脚本。

XSwitch内部的动态配置,Dialplan使用动态绑定(Binding)方式,也是执行Lua脚本动态生成XML。参见如何使用不带XUI的XSwitch获取更多细节。

排查HTTP问题

理解了上述架构以后,就可以比较方便的排查HTTP问题了。

检查8081端口是否正确监听:

netstat -an|grep 8081
lsof -i tcp:8081

在XSwitch控制台内:

verto status

使用cURL检查:

curl localhost:8081/

排查Nginx问题

默认情况下无须启动Nginx,但如果你启动了Nginx,那架构就变成:

Nginx默认会占用80端口,如果访问Nginx时返回502504之类的,那多半是Nginx到XSwitch之间有问题,也可能XSwitch未正常启动。但如果返回的是401403404等,则可能是后台XSwitch内部的错误。一段一段的查,比如是否可以越过Nginx直接访问XSwitch的端口。检查Nginx配置文件,里面的upstream是否设置正确等。

其它

虽然我们上面说了一个万能公式,实际上,问题是如此千奇百怪,排查问题并没有万能的方法。有时候,查问题还需要一些经验和运气。但不管怎么说,一般来说,你经验越多,运气就会越好。

在XSwitch的文档中,也有很多有效的排查问题的方法,供参考。

使用DOD做呼出映射