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做呼出映射