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 时返回502
、504
之类的,那多半是 Nginx 到 XSwitch 之间有问题,也可能 XSwitch 未正常启动。但如果返回的是401
、403
、404
等,则可能是后台 XSwitch 内部的错误。一段一段的查,比如是否可以越过 Nginx 直接访问 XSwitch 的端口。检查 Nginx 配置文件,里面的upstream
是否设置正确等。
其它
虽然我们上面说了一个万能公式,实际上,问题是如此千奇百怪,排查问题并没有万能的方法。有时候,查问题还需要一些经验和运气。但不管怎么说,一般来说,你经验越多,运气就会越好。
在 XSwitch 的文档中,也有很多有效的排查问题的方法,供参考。