OpenSIPS 路由逻辑故障排除

OpenSIPS 的大脑是它的脚本,其中包含路由逻辑。为了反映您的自定义路由逻辑(取决于您实施的 SIP 服务),脚本也是自定义的。也就是说,你需要构建它。

作为创建脚本的一部分,故障排除是一个重要方面。当你试图在脚本中找出路由逻辑时,你会发现 OpenSIPS 的反应(基于脚本)与你的预期不同。

OpenSIPS 路由逻辑故障排除

那么,如何排除 OpenSIPS 脚本的故障呢?如何理解 OpenSIPS 是如何执行路由脚本的?

阶段 1:日志

与任何编程情况一样,调试脚本的最简单方法就是添加日志,日志可以让你了解脚本的执行流程。

为此,你可以使用 xlog() 脚本语句。它允许你设置不同的日志级别(如 debug、info、critical),从而提供了相当不错的控制能力。你还可以通过 xlog_level 核心参数设置默认的冗余度,并在运行时通过 xlog_level MI 命令进行修改。

当然,xlog’ing 是一个初级且耗时的过程,因为你需要在配置的不同部分插入 xlog() 语句,以尝试追踪脚本的执行情况。

阶段 2:脚本跟踪

OpenSIPS 提供脚本跟踪功能(script_trace()-ing),作为手动生成 xlog 的更强大替代方案。启用后,OpenSIPS 将自动为脚本中执行的每一步(函数、赋值、测试等)生成一行日志,并注明其位置(文件和行号)。这样,你就可以完整地跟踪脚本的执行过程,一步一步地进行。

此外,这种跟踪功能还允许你自定义日志,添加自己的格式化字符串和所需的变量。如果你想了解某些变量在脚本执行过程中的变化情况,比如你想监控请求 URI ($ru) 的值,了解它在整个脚本过程中的修改情况,那么这个功能就能帮你大忙了。

script_trace( 1, "$rm from $si, ruri=$ru", "dbg");

[line 578][dbg][module consume_credentials] -> (INVITE from 127.0.0.1 , ruri=sip:111211@opensips.org)
[line 581][dbg][core setbflag] -> (INVITE from 127.0.0.1 , ruri=sip:111211@opensips.org)
[line 583][dbg][assign equal] -> (INVITE from 127.0.0.1 , ruri=sip:111211@opensips.org)
[line 592][dbg][core if] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org)
[line 585][dbg][module check_address] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org)
[line 589][dbg][core if] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org)
[line 586][dbg][module is_method] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org)
[line 587][dbg][module trace_dialog] -> (INVITE 127.0.0.1 , ruri=sip:tester@opensips.org)
[line 590][dbg][core setflag] -> (INVITE from 127.0.0.1 , ruri=sip:tester@opensips.org) 

这种方法:

  • 易于使用:只需从脚本中使用一个功能
  • 灵活:你可以决定何时使用(基于场景或用户),并自定义打印日志
  • 功能强大:可获得最大信息量,即完整跟踪脚本执行情况

阶段 3:跟踪模块

再进一步,除了了解脚本的执行流程外,你可能还想了解这种执行如何与 OpenSIPS 执行的 SIP 消息传递相关联。

我们已经知道tracer 模块,它可以捕获 SIP 流量,发送到 Homer、日志文件或opensips-cli 控制台。但 tracer 的功能不止 SIP,它还可以捕获脚本中的 xlog() 输出。

可以指示trace()函数捕获 SIP 和 XLOG

trace($var(trace_id), "d", "sip|xlog", $var(user));

在这种情况下,跟踪输出将包含同步的 SIP 包和 xlog() 行。这在寻找SIP 信令和脚本执行之间的时间相关性时可能非常有用。

有多种方法可以增强调试技术,但这些是基本方法,能够解决 95% 的问题。

最后,我们即将发布的 3.6 版本,敬请期待!

内容来源:https://blog.opensips.org/2025/03/20/troubleshooting-the-opensips-routing-logic/

本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/56923.html

(0)

相关推荐

发表回复

登录后才能评论