跳到主要内容

诊断工具

RustPBX 的 Diagnostics 页面与相关 API 集中提供线路验证、路由模拟、注册状态与测试拨号等能力,是日常排障的核心入口。

1. Reload 与预检

  1. 触发方式
    • UI:Settings → Reload,可单独 Reload Routing、ACL 或整套应用。
    • API:调用 AMI/管理接口的 /reload/acl/reload/app 等端点,便于脚本化发布。
  2. 预检逻辑preflight::validate_reload 会阻止危险配置,例如删除 console 配置、移除仍被使用的 Trunk、ACL 语法错误等。
  3. 处理提示:若提示 Reload would disable the console,请在 config.toml 中恢复 [console] 段;若提示 Trunk 缺失,则需在数据库/配置文件中补齐映射。

(此处可插入「Reload 面板」截图)

2. Diagnostics 面板解读

Diagnostics 页面包含多个标签页,对应的功能均在 templates/console/diagnostics.html 中实现:

  • Connection:展示 realm、可用传输(UDP/TCP/TLS/WebSocket)、示例账号,并附带 WebRTC ICE Probe,可验证 [ice_servers] 配置是否生效。
  • Trunks:读取运行时 Trunk Snapshot,通过 /diagnostics/trunks/test 校验某个 IP/域名是否匹配 inbound_hosts/dest,并可向运营商发送 OPTIONS 探测。
  • Routing/diagnostics/routes/evaluate 支持对 runtimedatabase 数据集进行规则匹配模拟,输出命中的 route、selected trunk、rewrite、Queue/IVR 结果以及可选的 abort code。
  • SIP
    • Active SIP dialogs:列出当前 INVITE 对话,可展开查看 SDP Offer/Answer。
    • Locator registry:通过 /diagnostics/locator/* 查询或清理注册记录,定位分机注册异常。
  • Web Dialer:嵌入 JsSIP,结合 Connection 面板提供的账号即可在浏览器里直接拨测,并记录最近 80 条 WebSocket 消息帮助排查信令问题。

(此处可插入各标签页截图)

3. 日志、健康检查与外部工具

  1. 日志控制:使用 config.toml 中的 log_levellog_filehttp_access_skip_paths 控制输出;若启用文件日志,会自动采用 tracing 的结构化格式。
  2. Call Recordcallrecord/ 模块负责写入 CDR 与录音路径,控制台的 Call Records 页面直接读取 models::call_record 表,适合对账与追踪。
  3. 健康探针handler::ami 暴露 /health,返回数据库、SIP 服务器与任务执行状态,可被负载均衡或 perfcli --ping 使用。
  4. 网络抓包:RustPBX 不在 UI 中提供抓包按钮,如需分析 SIP/RTP,可在服务器运行 sngreptcpdump 或使用 Diagnostics → Web Dialer 重放场景后手动抓包。

4. 常见排查路径

场景排查顺序
路由没生效Settings → Reload → Diagnostics → Routing(Evaluate database & runtime)→ 检查 config/routes/*.toml 语法
注册失败Diagnostics → SIP → Locator registry → 确认绑定是否存在 → 结合 proxy.acl_rules 检查 IP 是否被拒绝
Trunk 拨入被拒Diagnostics → Trunks → 输入对端 IP/IP 域名 → 看是否匹配 inbound_hosts,必要时调整 config/trunks/*.toml
单向音/媒体异常确认 rtp_start_port/rtp_end_port 开放 → 使用 Web Dialer 或真实终端复现 → 在服务器上抓取 RTP 并检查 NAT/防火墙
计费或队列异常在 Call Records 中核对模板 → Diagnostics → Routing 查看是否命中期望的 route/queue

5. 自动化与脚本

  • Reload Pipeline:CI 在修改 config/config.toml 后,可调用 /reload/acl/reload/app 完成热加载,并读取 HTTP 响应判断是否通过 Preflight。
  • 健康监控:使用 curl http://<host>:8080/health(或相应暴露端口)探测,若 status 字段非 ok,可触发告警或摘除实例。
  • 性能回归examples/perfcli.rs 支持批量注册/呼叫,结合 Diagnostics → Routing 结果可快速验证优化是否生效。

熟悉上述工具后,即可把“改配置→Reload→验证”这一闭环控制在分钟级,显著降低线路运维成本。