诊断工具
RustPBX 的 Diagnostics 页面与相关 API 集中提供线路验证、路由模拟、注册状态与测试拨号等能力,是日常排障的核心入口。
1. Reload 与预检
- 触发方式:
- UI:
Settings → Reload,可单独 Reload Routing、ACL 或整套应用。 - API:调用 AMI/管理接口的
/reload/acl、/reload/app等端点,便于脚本化发布。
- UI:
- 预检逻辑:
preflight::validate_reload会阻止危险配置,例如删除console配置、移除仍被使用的 Trunk、ACL 语法错误等。 - 处理提示:若提示
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支持对runtime或database数据集进行规则匹配模拟,输出命中的 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. 日志、健康检查与外部工具
- 日志控制:使用
config.toml中的log_level、log_file和http_access_skip_paths控制输出;若启用文件日志,会自动采用tracing的结构化格式。 - Call Record:
callrecord/模块负责写入 CDR 与录音路径,控制台的 Call Records 页面直接读取models::call_record表,适合对账与追踪。 - 健康探针:
handler::ami暴露/health,返回数据库、SIP 服务器与任务执行状态,可被负载均衡或perfcli --ping使用。 - 网络抓包:RustPBX 不在 UI 中提供抓包按钮,如需分析 SIP/RTP,可在服务器运行
sngrep、tcpdump或使用 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→验证”这一闭环控制在分钟级,显著降低线路运维成本。