Prometheus 指标和监控指南
概述
OmniTAS 以 Prometheus 格式导出全面的操作指标,用于监控、警报和可观察性。本指南涵盖所有可用指标、其使用、故障排除和监控最佳实践。
指标端点
所有指标都在以下地址公开: http://<tas-ip>:8080/metrics
重要:指标时间单位配置
系统中的所有持续时间指标在其直方图声明中使用 duration_unit: false。这是 关键 的,因为:
- Prometheus Elixir 库会自动检测以
_milliseconds结尾的指标名称 - 默认情况下,它会自动将原生 Erlang 时间单位转换为毫秒
- 我们的代码已经使用
System.convert_time_unit/3将时间转换为毫秒 - 如果没有
duration_unit: false,库会将毫秒转换为纳秒(除以 ~1,000,000)
示例:
# 正确的配置
Histogram.declare(
name: :http_dialplan_request_duration_milliseconds,
help: "HTTP 拨号计划请求的持续时间(毫秒)",
labels: [:call_type],
buckets: [100, 250, 500, 750, 1000, 1500, 2000, 3000, 5000],
duration_unit: false # 必须防止双重转换
)
# 正确测量时间
start_time = System.monotonic_time()
# ... 执行工作 ...
end_time = System.monotonic_time()
duration_ms = System.convert_time_unit(end_time - start_time, :native, :millisecond)
Histogram.observe([name: :http_dialplan_request_duration_milliseconds], duration_ms)
完整指标参考
Diameter 指标
diameter_response_duration_milliseconds
类型: 直方图
标签: application (ro, sh), command (ccr, cca, 等), result (success, error, timeout)
桶: 10, 50, 100, 250, 500, 1000, 2500, 5000, 10000 ms
描述: Diameter 请求的持续时间(毫秒)
用法:
# 平均 Diameter 响应时间
rate(diameter_response_duration_milliseconds_sum[5m]) /
rate(diameter_response_duration_milliseconds_count[5m])
# P95 Diameter 延迟
histogram_quantile(0.95, rate(diameter_response_duration_milliseconds_bucket[5m]))
警报条件:
- P95 > 1000ms - Diameter 响应缓慢
diameter_requests_total
类型: 计数器
标签: application (ro, sh), command (ccr, udr, 等)
描述: 发送的 Diameter 请求总数
用法:
# 请求速率
rate(diameter_requests_total[5m])
diameter_responses_total
类型: 计数器
标签: application (ro, sh), command (ccr, udr, 等), result_code (2001, 3002, 5xxx, 等)
描述: 接收到的 Diameter 响应总数
用法:
# 成功率
rate(diameter_responses_total{result_code="2001"}[5m]) /
rate(diameter_responses_total[5m]) * 100
diameter_peer_state
类型: 指示器
标签: peer_host, peer_realm, application (ro, sh)
描述: Diameter 对等体的状态 (1=在线, 0=离线)
更新间隔: 每 10 秒
用法:
# 检查离线对等体
diameter_peer_state == 0
警报条件:
- 任何对等体离线超过 1 分钟
拨号计划生成指标
1. HTTP 请求指标
http_dialplan_request_duration_milliseconds
类型: 直方图
标签: call_type (mt, mo, emergency, unknown)
描述: 端到端 HTTP 请求持续时间 从接收到拨号计划 HTTP 请求到发送响应。这包括所有处理:参数解析、授权、Diameter 查找 (Sh/Ro)、HLR 查找 (SS7 MAP) 和 XML 生成。
用法:
# 平均端到端 HTTP 请求时间
rate(http_dialplan_request_duration_milliseconds_sum[5m]) /
rate(http_dialplan_request_duration_milliseconds_count[5m])
# 按呼叫类型的 P95
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket[5m])
) by (call_type)
# 比较 MT 与 MO 性能
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket{call_type="mt"}[5m])
)
vs
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket{call_type="mo"}[5m])
)
警报条件:
- P95 > 2000ms - HTTP 响应时间缓慢
- P95 > 3000ms - 关键性能问题
- P99 > 5000ms - 严重性能下降
- 任何请求显示
call_type="unknown"- 呼叫类型检测失败
见解:
- 这是理解用户面延迟的 最重要指标
- 典型值:P50: 100-500ms, P95: 500-2000ms, P99: 1000-3000ms
- 包括所有组件时序 (Sh + HLR + OCS + 处理)
- 如果此指标缓慢,请深入组件指标 (subscriber_data, hlr_data, ocs_authorization)
- 预期范围:100ms (快速本地呼叫) 到 5000ms (缓慢且有重试/超时)
重要说明:
- 替换了旧的
dialplan_generation_duration_milliseconds指标,该指标仅测量 XML 生成 - 准确反映 FreeSWITCH/SBC 的体验
- 用于 SLA 监控和容量规划
2. 用户数据指标
subscriber_data_duration_milliseconds
类型: 直方图
标签: result (success, error)
描述: 从 Sh 接口 (HSS) 检索用户数据所花费的时间
用法:
# 平均 Sh 查找时间
rate(subscriber_data_duration_milliseconds_sum[5m]) /
rate(subscriber_data_duration_milliseconds_count[5m])
# 第 95 百分位 Sh 查找时间
histogram_quantile(0.95,
rate(subscriber_data_duration_milliseconds_bucket[5m])
)
警报条件:
- P95 > 100ms - HSS 响应缓慢
- P95 > 500ms - 关键 HSS 性能问题
subscriber_data_lookups_total
类型: 计数器
标签: result (success, error)
描述: 用户数据查找的总数
用法:
# Sh 查找速率
rate(subscriber_data_lookups_total[5m])
# Sh 错误率
rate(subscriber_data_lookups_total{result="error"}[5m])
# Sh 成功率百分比
(rate(subscriber_data_lookups_total{result="success"}[5m]) /
rate(subscriber_data_lookups_total[5m])) * 100
警报条件:
- 错误率 > 5% - HSS 连接问题
- 错误率 > 20% - 关键 HSS 故障
2. HLR 数据指标
hlr_data_duration_milliseconds
类型: 直方图
标签: result (success, error)
描述: 通过 SS7 MAP 检索 HLR 数据所花费的时间
用法:
# 平均 HLR 查找时间
rate(hlr_data_duration_milliseconds_sum[5m]) /
rate(hlr_data_duration_milliseconds_count[5m])
# 第 95 百分位 HLR 查找时间
histogram_quantile(0.95,
rate(hlr_data_duration_milliseconds_bucket[5m])
)
警报条件:
- P95 > 500ms - SS7 MAP 响应缓慢
- P95 > 2000ms - 关键 SS7 MAP 问题
hlr_lookups_total
类型: 计数器
标签: result_type (msrn, forwarding, error, unknown)
描述: 按结果类型的总 HLR 查找
用法:
# 按类型的 HLR 查找速率
rate(hlr_lookups_total[5m])
# MSRN 发现速率 (漫游用户)
rate(hlr_lookups_total{result_type="msrn"}[5m])
# 呼叫转移发现速率
rate(hlr_lookups_total{result_type="forwarding"}[5m])
# HLR 错误率
rate(hlr_lookups_total{result_type="error"}[5m])
警报条件:
- 错误率 > 10% - SS7 MAP 问题
- MSRN 速率突然下降 - 可能的漫游问题
见解:
- 高 MSRN 速率表示许多漫游用户
- 高转移率表示许多转接呼叫
- 与呼叫量进行比较以计算漫游百分比
3. OCS 授权指标
ocs_authorization_duration_milliseconds
类型: 直方图
标签: result (success, error)
描述: OCS 授权所花费的时间
用法:
# 平均 OCS 授权时间
rate(ocs_authorization_duration_milliseconds_sum[5m]) /
rate(ocs_authorization_duration_milliseconds_count[5m])
# 第 95 百分位 OCS 授权时间
histogram_quantile(0.95,
rate(ocs_authorization_duration_milliseconds_bucket[5m])
)
警报条件:
- P95 > 1000ms - OCS 响应缓慢
- P95 > 5000ms - 关键 OCS 性能问题
ocs_authorization_attempts_total
类型: 计数器
标签: result (success, error), skipped (yes, no)
描述: OCS 授权尝试的总数
用法:
# OCS 授权速率
rate(ocs_authorization_attempts_total{skipped="no"}[5m])
# OCS 错误率
rate(ocs_authorization_attempts_total{result="error",skipped="no"}[5m])
# OCS 跳过率 (紧急、语音信箱等)
rate(ocs_authorization_attempts_total{skipped="yes"}[5m])
# OCS 成功率百分比
(rate(ocs_authorization_attempts_total{result="success",skipped="no"}[5m]) /
rate(ocs_authorization_attempts_total{skipped="no"}[5m])) * 100
警报条件:
- 错误率 > 5% - OCS 连接问题
- 成功率 < 95% - OCS 拒绝过多呼叫
见解:
- 高跳过率表示许多紧急/免费呼叫
- 错误率激增表示 OCS 故障
- 将成功率与业务期望进行比较
4. 呼叫处理指标
call_param_errors_total
类型: 计数器
标签: error_type (parse_failed, missing_required_params)
描述: 呼叫参数解析错误
用法:
# 参数错误率
rate(call_param_errors_total[5m])
# 按类型的错误
rate(call_param_errors_total[5m]) by (error_type)
警报条件:
- 任何错误 > 0 - 表示格式不正确的呼叫参数请求
- 错误 > 1% 的呼叫量 - 关键问题
authorization_decisions_total
类型: 计数器
标签: disposition (mt, mo, emergency, unauthorized), result (success, error)
描述: 按呼叫类型的授权决策
用法:
# 按处置的授权率
rate(authorization_decisions_total[5m]) by (disposition)
# MT 呼叫率
rate(authorization_decisions_total{disposition="mt"}[5m])
# MO 呼叫率
rate(authorization_decisions_total{disposition="mo"}[5m])
# 紧急呼叫率
rate(authorization_decisions_total{disposition="emergency"}[5m])
# 未授权呼叫率
rate(authorization_decisions_total{disposition="unauthorized"}[5m])
警报条件:
- 未授权率 > 1% - 可能的攻击或配置错误
- 紧急呼叫激增 - 可能的紧急事件
- MT/MO 比率的意外变化 - 可能的问题
见解:
- MT/MO 比率指示流量模式
- 紧急呼叫率指示服务使用情况
- 未授权率指示安全态势
freeswitch_variable_set_duration_milliseconds
类型: 直方图
标签: batch_size (1, 5, 10, 25, 50, 100)
描述: 设置拨号计划变量所需的时间
用法:
# 平均变量设置时间
rate(freeswitch_variable_set_duration_milliseconds_sum[5m]) /
rate(freeswitch_variable_set_duration_milliseconds_count[5m])
# 按批量大小的变量设置时间
histogram_quantile(0.95,
rate(freeswitch_variable_set_duration_milliseconds_bucket[5m])
) by (batch_size)
警报条件:
- P95 > 100ms - 变量设置性能缓慢
- 增长趋势 - 可能的系统性能问题
5. 模块处理指标
dialplan_module_duration_milliseconds
类型: 直方图
标签: module (MT, MO, Emergency, CallParams, 等), call_type
描述: 每个拨号计划模块的处理时间
用法:
# 按模块的处理时间
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)
# MT 模块处理时间
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket{module="MT"}[5m])
)
警报条件:
- 任何模块 P95 > 500ms - 性能问题
- 任何模块的增长趋势 - 潜在泄漏或问题
见解:
- 确定哪个模块最慢
- 优先优化最慢的模块
- 比较不同呼叫类型的模块时间
6. 呼叫量指标
call_attempts_total
类型: 计数器
标签: call_type (mt, mo, emergency, unauthorized), result (success, rejected)
描述: 总呼叫尝试
用法:
# 呼叫尝试速率
rate(call_attempts_total[5m])
# 按呼叫类型的成功率
(rate(call_attempts_total{result="success"}[5m]) /
rate(call_attempts_total[5m])) * 100 by (call_type)
# 被拒绝的呼叫率
rate(call_attempts_total{result="rejected"}[5m])
警报条件:
- 被拒绝的比例 > 5% - 可能的问题
- 呼叫量突然下降 - 服务中断
- 呼叫量突然激增 - 可能的攻击
active_calls
类型: 指示器
标签: call_type (mt, mo, emergency)
描述: 当前活跃呼叫
用法:
# 当前活跃呼叫
active_calls
# 按类型的活跃呼叫
active_calls by (call_type)
# 峰值活跃呼叫(过去一小时)
max_over_time(active_calls[1h])
警报条件:
- 活跃呼叫 > 容量 - 超载
- 活跃呼叫 = 0 超过一段时间 - 服务中断
7. 模拟指标
call_simulations_total
类型: 计数器
标签: call_type (mt, mo, emergency, unauthorized), source (web, api)
描述: 运行的呼叫模拟
用法:
# 模拟速率
rate(call_simulations_total[5m])
# 按类型的模拟
rate(call_simulations_total[5m]) by (call_type)
见解:
- 跟踪诊断工具使用情况
- 确定重度用户
- 与故障排除活动相关联
8. SS7 MAP 指标
ss7_map_http_duration_milliseconds
类型: 直方图
标签: operation (sri, prn), result (success, error, timeout)
桶: 10, 50, 100, 250, 500, 1000, 2500, 5000, 10000 ms
描述: SS7 MAP HTTP 请求的持续时间(毫秒)
用法:
# SS7 MAP 错误率
rate(ss7_map_operations_total{result="error"}[5m]) /
rate(ss7_map_operations_total[5m]) * 100
警报条件:
- P95 > 500ms - SS7 MAP 响应缓慢
- 错误率 > 50% - 关键 SS7 MAP 问题
ss7_map_operations_total
类型: 计数器
标签: operation (sri, prn), result (success, error)
描述: SS7 MAP 操作的总数
9. 在线计费指标
online_charging_events_total
类型: 计数器
标签: event_type (authorize, answer, reauth, hangup), result (success, nocredit, error, timeout)
描述: 在线计费事件的总数
用法:
# OCS 信贷失败
rate(online_charging_events_total{result="nocredit"}[5m])
警报条件:
- 信贷失败率高
10. 系统状态指标
tracked_registrations
类型: 指示器
描述: 当前活动的 SIP 注册数量(来自 FreeSWITCH Sofia 注册数据库)
更新间隔: 每 10 秒
说明:
- 注册到期时会自动减少(FreeSWITCH 管理到期)
tracked_call_sessions
类型: 指示器
描述: 当前在 ETS 中跟踪的呼叫会话数量
更新间隔: 每 10 秒
11. HTTP 请求指标
http_requests_total
类型: 计数器
标签: endpoint (dialplan, call_event, directory, voicemail, sms_ccr, metrics), status_code (200, 400, 500, 等)
描述: 按端点的 HTTP 请求总数
用法:
# HTTP 错误率
rate(http_requests_total{status_code=~"5.."}[5m]) /
rate(http_requests_total[5m]) * 100
警报条件:
- HTTP 5xx 错误率 > 10%
12. 呼叫拒绝指标
call_rejections_total
类型: 计数器
标签: call_type (mo, mt, emergency, unknown), reason (nocredit, unauthorized, parse_failed, missing_params, hlr_error, 等)
描述: 按原因的呼叫拒绝总数
用法:
# 按原因的呼叫拒绝率
sum by (reason) (rate(call_rejections_total[5m]))
警报条件:
- 拒绝率 > 1/秒 - 需要调查
13. 事件套接字连接指标
event_socket_connected
类型: 指示器
标签: connection_type (main, log_listener)
描述: 事件套接字连接状态 (1=连接, 0=断开)
更新间隔: 连接状态变化时实时更新
用法:
# 事件套接字连接状态
event_socket_connected
警报条件:
- 连接断开超过 30 秒
event_socket_reconnections_total
类型: 计数器
标签: connection_type (main, log_listener), result (attempting, success, failed)
描述: 事件套接字重连尝试的总数
Grafana 仪表板集成
可以使用 Prometheus 数据源在 Grafana 中可视化指标。推荐的面板:
仪表板 1:呼叫量
- 活跃呼叫指示器
- 按类型的呼叫尝试速率 (MO/MT/紧急)
- 呼叫拒绝率
仪表板 2:Diameter 性能
- 响应时间热图
- 请求/响应速率
- 对等状态表
- 按结果代码的错误率
仪表板 3:在线计费健康
- 信贷授权成功率
- "无信贷" 事件率
- OCS 超时率
仪表板 4:系统性能
- 拨号计划生成延迟 (P50/P95/P99)
- SS7 MAP 响应时间
- 整体系统可用性
推荐的 Grafana 仪表板布局
行 1:呼叫量
- 按类型的呼叫尝试速率
- 活跃呼叫指示器
- 成功率百分比
行 2:性能
- P95 HTTP 拨号计划请求时间 (按呼叫类型) - 主要指标
- P95 Sh 查找时间
- P95 HLR 查找时间
- P95 OCS 授权时间
- P95 拨号计划模块处理时间 (按模块)
行 3:成功率
- Sh 查找成功率
- HLR 查找成功率
- OCS 授权成功率
- 呼叫尝试成功率
行 4:模块性能
- 按模块的 P95 处理时间
- 模块呼叫计数
行 5:错误
- 参数错误
- 未授权尝试
- Sh 错误
- HLR 错误
- OCS 错误
关键警报
优先级 1(立即页面):
# 拨号计划完全宕机
rate(call_attempts_total[5m]) == 0
# HSS 完全宕机
rate(subscriber_data_lookups_total{result="error"}[5m]) /
rate(subscriber_data_lookups_total[5m]) > 0.9
# OCS 完全宕机
rate(ocs_authorization_attempts_total{result="error"}[5m]) /
rate(ocs_authorization_attempts_total[5m]) > 0.9
优先级 2(警报):
# 拨号计划生成缓慢
histogram_quantile(0.95,
rate(dialplan_generation_duration_milliseconds_bucket[5m])
) > 1000
# HSS 错误率高
rate(subscriber_data_lookups_total{result="error"}[5m]) /
rate(subscriber_data_lookups_total[5m]) > 0.2
# OCS 错误率高
rate(ocs_authorization_attempts_total{result="error"}[5m]) /
rate(ocs_authorization_attempts_total[5m]) > 0.1
优先级 3(警告):
# HSS 延迟升高
histogram_quantile(0.95,
rate(subscriber_data_duration_milliseconds_bucket[5m])
) > 100
# OCS 延迟升高
histogram_quantile(0.95,
rate(ocs_authorization_duration_milliseconds_bucket[5m])
) > 1000
# 中等错误率
rate(call_attempts_total{result="rejected"}[5m]) /
rate(call_attempts_total[5m]) > 0.05
警报示例
Diameter 对等体离线
alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
annotations:
summary: "Diameter 对等体 {{ $labels.peer_host }} 离线"
高 Diameter 延迟
alert: HighDiameterLatency
expr: histogram_quantile(0.95, rate(diameter_response_duration_milliseconds_bucket[5m])) > 1000
for: 5m
annotations:
summary: "Diameter P95 延迟超过 1s"
OCS 信贷失败
alert: HighOCSCreditFailures
expr: rate(online_charging_events_total{result="nocredit"}[5m]) > 0.1
for: 2m
annotations:
summary: "高 OCS 信贷失败率"
SS7 MAP 网关错误
alert: SS7MapErrors
expr: rate(ss7_map_operations_total{result="error"}[5m]) / rate(ss7_map_operations_total[5m]) > 0.5
for: 3m
annotations:
summary: "SS7 MAP 错误率超过 50%"
事件套接字断开
alert: EventSocketDown
expr: event_socket_connected == 0
for: 30s
annotations:
summary: "事件套接字 {{ $labels.connection_type }} 断开"
高呼叫拒绝率
alert: HighCallRejectionRate
expr: rate(call_rejections_total[5m]) > 1
for: 2m
annotations:
summary: "高呼叫拒绝率:{{ $value }} 拒绝/秒"
HTTP 错误率高
alert: HighHTTPErrorRate
expr: rate(http_requests_total{status_code=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.1
for: 3m
annotations:
summary: "HTTP 5xx 错误率超过 10%"
使用指标进行故障排除
问题:指标显示不现实的值(纳秒而不是毫秒)
症状:
- 直方图
_sum值极小(例如,0.000315 而不是 315) - 所有请求显示在最低桶中 (< 5ms),而它们应该更慢
- 值似乎比预期小 1,000,000 倍
根本原因:
Prometheus Elixir 库会自动转换时间单位,当指标名称以 _milliseconds、_seconds 等结尾时。如果没有设置 duration_unit: false,库会将您已经转换的毫秒转换为纳秒。
调查:
- 检查 lib/metrics.ex 中的指标声明
- 验证
duration_unit: false是否存在:Histogram.declare(
name: :some_duration_milliseconds,
help: "...",
buckets: [...],
duration_unit: false # 必须存在!
) - 检查测量代码是否使用正确的时间转换:
start = System.monotonic_time()
# ... 工作 ...
duration_ms = System.convert_time_unit(
System.monotonic_time() - start,
:native,
:millisecond
)
Histogram.observe([name: :some_duration_milliseconds], duration_ms)
解决方案:
- 在直方图声明中添加
duration_unit: false - 重启应用程序(需要重新加载指标声明)
- 修复后验证指标是否显示现实值
示例修复:
# 之前(错误 - 将显示纳秒)
Histogram.declare(
name: :http_dialplan_request_duration_milliseconds,
buckets: [5, 10, 25, 50, 100, 250, 500, 1000, 2500]
)
# 之后(正确 - 将显示毫秒)
Histogram.declare(
name: :http_dialplan_request_duration_milliseconds,
buckets: [100, 250, 500, 750, 1000, 1500, 2000, 3000, 5000],
duration_unit: false
)
问题:呼叫类型显示为 "unknown"
症状:
- 所有指标显示
call_type="unknown"而不是mt、mo或emergency - 无法区分不同呼叫类型的性能
根本原因: 呼叫类型提取失败或未正确传递通过处理管道。
调查:
- 检查日志中的 "HTTP 拨号计划请求" 消息 - 它们应显示正确的呼叫类型
- 验证
process_call/1返回{xml, call_type}元组,而不仅仅是xml - 验证
fsapi_conn/1从元组中提取呼叫类型:{xml, call_type} = process_call(body)
解决方案: 确保拨号计划处理管道在所有函数中正确传递呼叫类型。
问题:呼叫缓慢
调查:
- 检查
http_dialplan_request_duration_millisecondsP95 - 从这里开始 - 如果高,检查组件时序:
- 检查
subscriber_data_duration_milliseconds的 Sh 延迟 - 检查
hlr_data_duration_milliseconds的 HLR 延迟 - 检查
ocs_authorization_duration_milliseconds的 OCS 延迟 - 检查
dialplan_module_duration_milliseconds的模块特定延迟
- 检查
- 检查是否
call_type="unknown"- 表示呼叫类型检测失败 - 比较 MT 与 MO 与紧急处理时间
- 与系统日志相关联,获取��细错误消息
解决方案: 优化最慢的组件
问题:呼叫失败
调查:
- 检查
call_attempts_total{result="rejected"}速率 - 检查
subscriber_data_lookups_total{result="error"}的 Sh 问题 - 检查
hlr_lookups_total{result_type="error"}的 HLR 问题 - 检查
ocs_authorization_attempts_total{result="error"}的 OCS 问题 - 检查
authorization_decisions_total{disposition="unauthorized"}的授权问题
解决方案: 修复失败的组件
问题:高负载
调查:
- 检查
active_calls当前值 - 检查
call_attempts_total速率 - 检查速率是否与预期流量匹配
- 比较 MT 与 MO 比率
- 检查是否有异常模式(激增、稳定增长)
解决方案: 扩展或调查异常流量
问题:漫游问题
调查:
- 检查
hlr_lookups_total{result_type="msrn"}速率 - 检查
hlr_data_duration_milliseconds的延迟 - 使用 HLR 查找工具检查特定用户
- 检查 MSRN 是否被正确检索
解决方案: 修复 HLR 连接或配置
性能基准
典型值(调优良好的系统)
- HTTP 拨号计划请求(端到端): P50: 100-500ms, P95: 500-2000ms, P99: 1000-3000ms
- Sh 查找时间: P50: 15ms, P95: 50ms, P99: 100ms
- HLR 查找时间: P50: 100ms, P95: 300ms, P99: 800ms
- OCS 授权时间: P50: 150ms, P95: 500ms, P99: 1500ms
- 拨号计划模块处理: P50: 1-5ms, P95: 10-25ms, P99: 50ms
- Sh 成功率: > 99%
- HLR 成功率: > 95% (较低是正常的,因为有离线用户)
- OCS 成功率: > 98%
- 呼叫成功率: > 99%
注意: HTTP 拨号计划请求时间是所有组件时间加上开销的总和。它应大致等于:Sh 查找 + HLR 查找 + OCS 授权 + 拨号计划模块处理 + 网络/解析开销。最低预期时间约为 ~100ms(仅需要 Sh 查找时),最大典型时间约为 ~2000ms(所有查找和重试时)。
容量规划
监控这些趋势:
call_attempts_total速率的增长active_calls峰值的增长- 稳定或改善的 P95 延迟
- 稳定或改善的成功率
当以下情况发生时,计划扩展:
- 活跃呼叫接近 80% 的容量
- 尽管负载稳定,P95 延迟增长
- 尽管外部系统稳定,成功率下降
与日志的集成
将指标与日志相关联:
- 指标中的高错误率 → 在日志中搜索 ERROR 消息
- 响应时间缓慢 → 在日志中搜索关于超时的 WARNING 消息
- 特定呼叫问题 → 按呼叫 ID 或电话号码在日志中搜索
- 使用模拟工具重现并调试
最佳实践
- 在问题发生之前设置仪表板
- 根据基准定义警报阈值
- 通过使用呼叫模拟器测试警报
- 每周审查指标以识别趋势
- 将指标与业务事件相关联(活动、故障等)
- 使用指标证明基础设施投资的合理性
- 与运营团队共享仪表板
- 记录您的警报响应程序
配置
指标收集在应用程序启动时自动启用。指标端点在与 API 相同的端口上公开(默认:8080)。
要配置 Prometheus 抓取指标,请在 prometheus.yml 中添加此作业:
scrape_configs:
- job_name: 'omnitas'
static_configs:
- targets: ['<tas-ip>:8080']
metrics_path: '/metrics'
scrape_interval: 10s
指标基数
这些指标设计时控制基数,以避免压垮 Prometheus:
- 对等标签: 限制为仅配置的对等体
- 呼叫类型: 固定集 (mo, mt, emergency, unauthorized)
- 结果代码: 限制为实际接收到的 Diameter/OCS 结果代码
- 操作: 每个接口的固定集 (sri/prn 用于 MAP, ccr/cca 用于 Diameter)
估计的时间序列总数:~200-500,具体取决于配置的对等体数量和活动结果代码。
指标保留
推荐的保留期:
- 原始指标: 30 天(高分辨率)
- 5 分钟聚合: 90 天
- 1 小时聚合: 1 年
- 每日聚合: 5 年
这支持:
- 实时故障排除(原始指标)
- 每周/月分��(5 分钟/1 小时聚合)
- 容量规划(每日聚合)
- 历史比较(年度聚合)