背景
最近在使用opensips的wss
模块,前端使用jssip
封装webrtc
。
正式环境中web前端不会开启console打印webrtc
交互信令,当需要排查问题时,此时会变得异常困难。
世面上能用的工具都试过了,不管是sngrep
还是wireshark
抓包,都无法解析wss信令(wireshark
即便是有tls
的公私钥,也无法解析)。
ssldump
一方面没有centos的包,需要用容器做镜像(如果感兴趣后续可以介绍),另一方面,它必须从建立连接时开始抓包,无法抓到建立连接之后的信令。
opensips的tracer
模块,就能很好解决这个问题。官方文档:tracer模块
opensips的版本信息:
opensips 3.3.10 (x86_64/linux)
trace设置方式
trace_id
的设置主要有4个方式:
-
写DB
modparam("tracer", "trace_id","[tid]uri=mysql://xxxx:xxxx@10.10.10.10/opensips;table=sip_trace;")
这个会直接把数据插入到数据表sip_trace
中,这个opensip的DB默认表已有此表结构。 -
写文件
modparam("tracer", "trace_id","[tid]uri=file:/tmp/trace.log")
这个会直接把数据写入到文件/tmp/trace.log
中,需要设置file_mode
-
写入hep_server端
modparam("tracer", "trace_id","[tid]uri=hep://10.10.10.10:xxxx")
或者modparam("tracer", "trace_id", "[tid]uri=hep:hid")
-
写入syslog
modparam("tracer", "trace_id","[tid]uri=syslog:local0:-1")
- 调用trace功能
官方接口介绍:
|
|
主要参数说明:
-
scope
- ’m/M’ 无状态模式下,追踪消息
- ’t/T’ tm模块如果没加载,追踪事务,包括 in和out的请求以及内部的回复
- ’d/D’ 追踪dialog
- ‘b/B’ 追踪B2B信息
-
type
- sip 追踪sip信令
- xlog 追踪xlog里的信息(dialog, transaction, B2B)
- rest 追踪rest 接口信息
实战配置
统一调用方法:
|
|
写DB
配置:
|
|
此时就可以在数据表sip_trace
中查看到trace信息了。
写文件
配置:
|
|
此时就可以在/tmp/trace.log
文件中查看到trace信息了。
|
|
写入hep_server端
本次测试使用的是 hep-server:hep-connect
web前端显示:siphub
配置:
|
|
- socket是opensips 客户端发送proto_hep数据的端口
- hep_id是hep_server的监听端口
此时打开siphub的web页面:http://172.0.0.1:3000/ 可以看到:
点击Call-ID 可以看到详细的sip信令信息:
写入syslog
|
|
这个功能暂时未测成功,opensips的日志输出到syslog,但是在日志中未看到trace信息。
总结
通过上述的方法,可以看到很容易跟踪sip信令。
- 如果需要对opensips做监控,那么使用hep-server是比较合适的选择。
- 临时性排查问题,一般的sip传送方式tcp/udp/ws,使用
sngrep
都能搞定。 - 针对
wss
信令,使用trace写文件,可能是比较轻量的选择。