指标文档
本文档描述了IMS应用服务器组件暴露的Prometheus指标。
目录
- 指标端点
- 9090端口 - 系统指标
- 8080端口 - TAS引擎指标
- 9093端口 - 媒体和呼叫质量指标
- Go运行时指标
- 进程指标
- Prometheus HTTP指标
- 指标类型
- 使用
- 示例查询
- 指标类型
- Grafana仪表板集成
- 警报示例
- 使用指标进行故障排除
- 性能基线
- 最佳实践
指标端点
| 端口 | 端点 | 目的 | 跳转到部分 |
|---|---|---|---|
| 9090 | /metrics | 系统、网关和核心电话指标 | 9090端口 → |
| 8080 | /metrics | TAS引擎、Diameter、HLR、OCS和Erlang VM指��� | 8080端口 → |
| 9093 | /esl?module=default | RTP/RTCP媒体质量和呼叫统计 | 9093端口 → |
9090端口 - 系统指标
呼叫和会话指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_bridged_calls | 9090 | 当前活动的桥接呼叫数量 |
freeswitch_detailed_bridged_calls | 9090 | 当前活动的详细桥接呼叫数量 |
freeswitch_current_calls | 9090 | 当前活动的呼叫数量 |
freeswitch_detailed_calls | 9090 | 当前活动的详细呼叫数量 |
freeswitch_current_channels | 9090 | 当前活动的通道数量 |
freeswitch_current_sessions | 9090 | 当前活动的会话数量 |
freeswitch_current_sessions_peak | 9090 | 自启动以来的会话峰值数量 |
freeswitch_current_sessions_peak_last_5min | 9090 | 最近5分钟的会话峰值数量 |
freeswitch_sessions_total | 9090 | 自启动以来的总会话数量(计数器) |
freeswitch_current_sps | 9090 | 每秒当前会话数量 |
freeswitch_current_sps_peak | 9090 | 自启动以来的每秒峰值会话数量 |
freeswitch_current_sps_peak_last_5min | 9090 | 最近5分钟的每秒峰值会话数量 |
freeswitch_max_sessions | 9090 | 允许的最大会话数量 |
freeswitch_max_sps | 9090 | 允许的最大每秒会话数量 |
系统资源指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_current_idle_cpu | 9090 | 当前CPU空闲百分比 |
freeswitch_min_idle_cpu | 9090 | 记录的最小CPU空闲百分比 |
freeswitch_uptime_seconds | 9090 | 运行时间(秒) |
freeswitch_time_synced | 9090 | 系统时间是否与出口商主机时间同步(1=同步,0=未同步) |
内存指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_memory_arena | 9090 | 总非mmapped字节(malloc arena) |
freeswitch_memory_ordblks | 9090 | 空闲块数量 |
freeswitch_memory_smblks | 9090 | 空闲fastbin块数量 |
freeswitch_memory_hblks | 9090 | 映射区域数量 |
freeswitch_memory_hblkhd | 9090 | 映射区域中的字节 |
freeswitch_memory_usmblks | 9090 | 最大总分配空间 |
freeswitch_memory_fsmblks | 9090 | 在fastbins中持有的空闲字节 |
freeswitch_memory_uordblks | 9090 | 总分配空间 |
freeswitch_memory_fordblks | 9090 | 总空闲空间 |
freeswitch_memory_keepcost | 9090 | 最上面的可释放块 |
编解码器状态指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_codec_status | 9090 | 编解码器状态,标签:ikey(模块),name(编解码器名称),type(编解码器)。值=1表示编解码器可用 |
可用编解码器包括:
- G.711 alaw/ulaw
- PROXY PASS-THROUGH
- PROXY VIDEO PASS-THROUGH
- RAW Signed Linear (16 bit)
- Speex
- VP8/VP9 Video
- AMR variants
- B64
- G.723.1, G.729, G.722, G.726 variants
- OPUS
- MP3
- ADPCM, GSM, LPC-10
端点状态指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_endpoint_status | 9090 | 端点状态,标签:ikey(模块),name(端点名称),type(端点)。值=1表示端点可用 |
可用端点包括:
- error, group, pickup, user (mod_dptools)
- loopback, null (mod_loopback)
- rtc (mod_rtc)
- rtp, sofia (mod_sofia)
- modem (mod_spandsp)
模块状态指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_load_module | 9090 | 模块加载状态(1=已加载,0=未加载),标签:module |
监控的关键模块:
- mod_sofia (SIP)
- mod_conference, mod_conference_ims
- mod_opus, mod_g729, mod_amr, 等等
- mod_event_socket
- mod_dptools
- mod_python3
- mod_rtc
- 还有很多...
注册指标
| 指标名称 | 端�� | 描述 |
|---|---|---|
freeswitch_registrations | 9090 | 活动注册的总数量 |
freeswitch_registration_defails | 9090 | 详细注册信息,标签:expires, hostname, network_ip, network_port, network_proto, realm, reg_user, token, url |
Sofia网关指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_sofia_gateway_status | 9090 | 网关状态,标签:context, name, profile, proxy, scheme, status (UP/DOWN) |
freeswitch_sofia_gateway_call_in | 9090 | 通过网关的入站呼叫数量 |
freeswitch_sofia_gateway_call_out | 9090 | 通过网关的出站呼叫数量 |
freeswitch_sofia_gateway_failed_call_in | 9090 | 失败的入站呼叫数量 |
freeswitch_sofia_gateway_failed_call_out | 9090 | 失败的出站呼叫数量 |
freeswitch_sofia_gateway_ping | 9090 | 最后一次ping时间戳(Unix纪元) |
freeswitch_sofia_gateway_pingtime | 9090 | 最后一次ping时间(毫秒) |
freeswitch_sofia_gateway_pingfreq | 9090 | ping频率(秒) |
freeswitch_sofia_gateway_pingcount | 9090 | 发送的ping数量 |
freeswitch_sofia_gateway_pingmin | 9090 | 记录的最小ping时间 |
freeswitch_sofia_gateway_pingmax | 9090 | 记录的最大ping时间 |
出口商健康指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_up | 9090 | 最后一次抓取是否成功(1=成功,0=失败) |
freeswitch_exporter_total_scrapes | 9090 | 执行的抓取总次数(计数器) |
freeswitch_exporter_failed_scrapes | 9090 | 失败的抓取总次数(计数器) |
8080端口 - TAS引擎指标
这些指标由电话应用服务器引擎暴露,提供呼叫处理、数据库操作和Erlang VM性能的洞察。
应用呼叫指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
call_simulations_total | 8080 | 呼叫模拟的总数量(计数器) |
call_attempts_total | 8080 | 呼叫尝试的总数量(计数器) |
call_rejections_total | 8080 | 按原因拒绝的呼叫总数量(计数器) |
call_param_errors_total | 8080 | 呼叫参数解析错误的总数量(计数器) |
active_calls | 8080 | 当前活动呼叫的数量,标签:call_type(mo/mt/emergency) |
tracked_call_sessions | 8080 | 当前在ETS中跟踪的呼叫会话数量 |
Diameter协议指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
diameter_peer_state | 8080 | Diameter对等体的状态(1=正常,0=故障),标签:peer_host, peer_realm, application |
diameter_requests_total | 8080 | Diameter请求的总数量(计数器) |
diameter_responses_total | 8080 | Diameter响应的总数量(计数器) |
diameter_response_duration_milliseconds | 8080 | Diameter请求的持续时间(毫秒)(直方图) |
电话操作指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
hlr_lookups_total | 8080 | HLR查询的总数量(计数器) |
hlr_data_duration_milliseconds | 8080 | HLR数据检索的持续时间(毫秒)(直方图) |
subscriber_data_lookups_total | 8080 | 订阅者数据查询的总数量(计数器) |
subscriber_data_duration_milliseconds | 8080 | Sh订阅者数据检索的持续时间(毫秒)(直方图) |
ss7_map_operations_total | 8080 | SS7 MAP操作的总数量(计数器) |
ss7_map_http_duration_milliseconds | 8080 | SS7 MAP HTTP请求的持续时间(毫秒)(直方图) |
tracked_registrations | 8080 | 当前跟踪的SIP注册数量 |
在线计费系统(OCS)指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
ocs_authorization_attempts_total | 8080 | OCS授权尝试的总数量(计数器) |
ocs_authorization_duration_milliseconds | 8080 | OCS授权的持续时间(毫秒)(直方图) |
online_charging_events_total | 8080 | 在线计费事件的总数量(计数器) |
authorization_decisions_total | 8080 | 授权决策的总数量(计数器) |
拨号计划和处理指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
http_requests_total | 8080 | HTTP请求的总数量,标签:endpoint, status_code(计数器) |
http_dialplan_request_duration_milliseconds | 8080 | HTTP拨号计划请求的持续时间(毫秒)(直方图) |
dialplan_module_duration_milliseconds | 8080 | 单个拨号计划模块处理的持续时间(毫秒)(直方图) |
freeswitch_variable_set_duration_milliseconds | 8080 | 变量设置操作的持续时间(毫秒)(直方图) |
事件套接字指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
event_socket_connected | 8080 | 事件套接字连接状态(1=已连接,0=未连接),标签:connection_type |
event_socket_reconnections_total | 8080 | 事件套接字重新连接尝试的总数量(计数器),标签:connection_type, result |
event_socket_commands_total | 8080 | 执行的事件套接字命令总数量(计数器),标签:command_type, result |
event_socket_command_timeouts_total | 8080 | 事件套接字命令超时的总数量(计数器),标签:command_type |
跟踪的命令类型:
- uuid_setvar, uuid_dump, uuid_kill, uuid_transfer
- uuid_set_media_stats
- sched_hangup, sched_transfer
- vm_boxcount
- status, echo, show, sofia
结果值:
- success: 命令成功完成
- timeout: 命令超出超时阈值
- error: 命令返回意外响应
功能使用指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
feature_invocations_total | 8080 | TAS功能调用的总数量(计数器),标签:feature, call_type, result |
feature_data_source_total | 8080 | 功能数据源使用的总数量(计数器),标签:feature, source |
功能:
call_forward_all- 无条件呼叫转移call_forward_not_reachable- 当订阅者不可达时呼叫转移call_forward_no_reply- 无应答时呼叫转移call_barring- 基于OCS的呼叫限制(信用不足)cli_withheld- CLI隐私/筛选
呼叫类型: mo, mt
数据源: sh_interface, hlr, config_fallback
结果值: success, error, skipped
短信触发指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
sms_trigger_attempts_total | 8080 | 短信触发尝试的总数量(计数器),标签:trigger_type, result |
sms_trigger_errors_total | 8080 | 短信触���错误的总数量(计数器),标签:trigger_type, error_stage |
smsc_requests_total | 8080 | SMSC HTTP请求的总数量(计数器),标签:message_type, result |
触发类型: voicemail_deposit, voicemail_clear
错误阶段: vm_boxcount, template_render, smsc_request
消息类型: notification, mwi
结果值: success, error
Erlang Mnesia数据库指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
erlang_mnesia_held_locks | 8080 | 持有的锁数量 |
erlang_mnesia_lock_queue | 8080 | 等待锁的事务数量 |
erlang_mnesia_transaction_participants | 8080 | 参与事务的数量 |
erlang_mnesia_transaction_coordinators | 8080 | 协调事务的数量 |
erlang_mnesia_failed_transactions | 8080 | 失败(中止)事务的数量(计数器) |
erlang_mnesia_committed_transactions | 8080 | 提交的事务数量(计数器) |
erlang_mnesia_logged_transactions | 8080 | 记录的事务数量(计数器) |
erlang_mnesia_restarted_transactions | 8080 | 事务重启的总数量(计数器) |
erlang_mnesia_memory_usage_bytes | 8080 | 所有mnesia表分配的总字节 |
erlang_mnesia_tablewise_memory_usage_bytes | 8080 | 每个mnesia表分配的字节,标签:table |
erlang_mnesia_tablewise_size | 8080 | 每个表的行数,标签:table |
Erlang VM内存指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
erlang_vm_memory_atom_bytes_total | 8080 | 为原子分配的内存,标签:usage(used/free) |
erlang_vm_memory_bytes_total | 8080 | 总分配内存,标签:kind(system/processes) |
erlang_vm_memory_dets_tables | 8080 | DETS表计数 |
erlang_vm_memory_ets_tables | 8080 | ETS表计数 |
erlang_vm_memory_processes_bytes_total | 8080 | 为进程分配的内存,标签:usage(used/free) |
erlang_vm_memory_system_bytes_total | 8080 | 模拟器的内存(与进程无关),标签:usage(atom/binary/code/ets/other) |
Erlang VM统计信息
| 指标名称 | 端口 | 描述 |
|---|---|---|
erlang_vm_statistics_bytes_output_total | 8080 | 输出到端口的总字节(计数器) |
erlang_vm_statistics_bytes_received_total | 8080 | 通过端口接收的总字节(计数器) |
erlang_vm_statistics_context_switches | 8080 | 自启动以来的总上下文切换(计数器) |
erlang_vm_statistics_dirty_cpu_run_queue_length | 8080 | 脏CPU运行队列的长度 |
erlang_vm_statistics_dirty_io_run_queue_length | 8080 | 脏IO运行队列的长度 |
erlang_vm_statistics_garbage_collection_number_of_gcs | 8080 | 垃圾收集的数量(计数器) |
erlang_vm_statistics_garbage_collection_bytes_reclaimed | 8080 | 垃圾收集回收的字节(计数器) |
erlang_vm_statistics_garbage_collection_words_reclaimed | 8080 | 垃圾收集回收的字(计数器) |
erlang_vm_statistics_reductions_total | 8080 | 总减少次数(计数器) |
erlang_vm_statistics_run_queues_length | 8080 | 正常运行队列的长度 |
erlang_vm_statistics_runtime_milliseconds | 8080 | 所有线程的运行时间总和(计数器) |
erlang_vm_statistics_wallclock_time_milliseconds | 8080 | 测量的实际时间(计数器) |
Erlang VM系统信息
| 指标名称 | 端口 | 描述 |
|---|---|---|
erlang_vm_dirty_cpu_schedulers | 8080 | 脏CPU调度线程的数量 |
erlang_vm_dirty_cpu_schedulers_online | 8080 | 在线的脏CPU调度器数量 |
erlang_vm_dirty_io_schedulers | 8080 | 脏I/O调度线程的数量 |
erlang_vm_ets_limit | 8080 | 允许的最大ETS表数量 |
erlang_vm_logical_processors | 8080 | 配置的逻辑处理器数量 |
erlang_vm_logical_processors_available | 8080 | 可用的逻辑处理器数量 |
erlang_vm_logical_processors_online | 8080 | 在线的逻辑处理器数量 |
erlang_vm_port_count | 8080 | 当前存在的端口数量 |
erlang_vm_port_limit | 8080 | 允许的最大端口数量 |
erlang_vm_process_count | 8080 | 当前存在的进程数量 |
erlang_vm_process_limit | 8080 | 允许的最大进程数量 |
erlang_vm_schedulers | 8080 | 调度线程的数量 |
erlang_vm_schedulers_online | 8080 | 在线的调度器数量 |
erlang_vm_smp_support | 8080 | 1表示编译时支持SMP,0表示不支持 |
erlang_vm_threads | 8080 | 1表示编译时支持线程,0表示不支持 |
erlang_vm_thread_pool_size | 8080 | 池中的异步线程数量 |
erlang_vm_time_correction | 8080 | 1表示启用了时间校正,0表示未启用 |
erlang_vm_wordsize_bytes | 8080 | Erlang术语字的字节大小 |
erlang_vm_atom_count | 8080 | 当前存在的原子数量 |
erlang_vm_atom_limit | 8080 | 允许的最大原子数量 |
Erlang VM微状态计数(MSACC)
详细跟踪调度程序活动的时间,标签:type, id
| 指标名称 | 端口 | 描述 |
|---|---|---|
erlang_vm_msacc_aux_seconds_total | 8080 | 处理辅助作业所花费的时间(计数器) |
erlang_vm_msacc_check_io_seconds_total | 8080 | 检查新I/O事件所花费的时间(计数器) |
erlang_vm_msacc_emulator_seconds_total | 8080 | 执行Erlang进程所花费的时间(计数器) |
erlang_vm_msacc_gc_seconds_total | 8080 | 垃圾收集所花费的时间(计数器) |
erlang_vm_msacc_other_seconds_total | 8080 | 在未计入的活动上花费的时间(计数器) |
erlang_vm_msacc_port_seconds_total | 8080 | 执行端口所花费的时间(计数器) |
erlang_vm_msacc_sleep_seconds_total | 8080 | 睡眠所花费的时间(计数器) |
erlang_vm_msacc_alloc_seconds_total | 8080 | 管理内存所花费的时间(计数器) |
erlang_vm_msacc_bif_seconds_total | 8080 | 在BIFs中花费的时间(计数器) |
erlang_vm_msacc_busy_wait_seconds_total | 8080 | 忙等待所花费的时间(计数器) |
erlang_vm_msacc_ets_seconds_total | 8080 | 在ETS BIFs中花费的时间(计数器) |
erlang_vm_msacc_gc_full_seconds_total | 8080 | 在全扫GC中花费的时间(计数器) |
erlang_vm_msacc_nif_seconds_total | 8080 | 在NIFs中花费的时间(计数器) |
erlang_vm_msacc_send_seconds_total | 8080 | 发送消息所花费的时间(计数器) |
erlang_vm_msacc_timers_seconds_total | 8080 | 管理定时器所花费的时间(计数���) |
Erlang VM分配器
详细的内存分配器指标,标签:alloc, instance_no, kind, usage
| 指标名称 | 端口 | 描述 |
|---|---|---|
erlang_vm_allocators | 8080 | 不同分配器的分配(carriers_size)和使用(blocks_size)内存。请参见erts_alloc(3)。 |
分配器类型包括: temp_alloc, sl_alloc, std_alloc, ll_alloc, eheap_alloc, ets_alloc, fix_alloc, literal_alloc, binary_alloc, driver_alloc
9093端口 - 媒体和呼叫质量指标
这些指标提供每个通道的实时RTP/RTCP统计和呼叫质量信息。
| 指标名称 | 端口 | 描述 |
|---|---|---|
freeswitch_info | 9093 | 系统信息,标签:version |
freeswitch_up | 9093 | 就绪状态(1=就绪,0=未就绪) |
freeswitch_stack_bytes | 9093 | 堆栈大小(字节) |
freeswitch_session_total | 9093 | 会话总数 |
freeswitch_session_active | 9093 | 活动会话数量 |
freeswitch_session_limit | 9093 | 会话限制 |
rtp_channel_info | 9093 | RTP通道信息,标签:通道详细信息 |
RTP音频 - 字节计数器
| 指标名称 | 端口 | 描述 |
|---|---|---|
rtp_audio_in_raw_bytes_total | 9093 | 接收的总字节(包括头部) |
rtp_audio_out_raw_bytes_total | 9093 | 发送的总字节(包括头部) |
rtp_audio_in_media_bytes_total | 9093 | 接收的总媒体字节(仅有效负载) |
rtp_audio_out_media_bytes_total | 9093 | 发送的总媒体字节(仅有效负载) |
RTP音频 - 数据包计数器
| 指标名称 | 端口 | 描述 |
|---|---|---|
rtp_audio_in_packets_total | 9093 | 接收的总数据包 |
rtp_audio_out_packets_total | 9093 | 发送的总数据包 |
rtp_audio_in_media_packets_total | 9093 | 接收的总媒体数据包 |
rtp_audio_out_media_packets_total | 9093 | 发送的总媒体数据包 |
rtp_audio_in_skip_packets_total | 9093 | 丢弃的入站数据包 |
rtp_audio_out_skip_packets_total | 9093 | 丢弃的出站数据包 |
RTP音频 - 特殊数据包类型
| 指标名称 | 端口 | 描述 |
|---|---|---|
rtp_audio_in_jitter_packets_total | 9093 | 接收的抖动缓冲数据包 |
rtp_audio_in_dtmf_packets_total | 9093 | 接收的DTMF数据包 |
rtp_audio_out_dtmf_packets_total | 9093 | 发送的DTMF数据包 |
rtp_audio_in_cng_packets_total | 9093 | 接收的舒适噪声生成数据包 |
rtp_audio_out_cng_packets_total | 9093 | 发送的舒适噪声生成数据包 |
rtp_audio_in_flush_packets_total | 9093 | 刷新的数��包(缓冲区重置) |
RTP音频 - 抖动和质量指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
rtp_audio_in_jitter_buffer_bytes_max | 9093 | 最大抖动缓冲区大小(字节) |
rtp_audio_in_jitter_seconds_min | 9093 | 最小抖动(秒) |
rtp_audio_in_jitter_seconds_max | 9093 | 最大抖动(秒) |
rtp_audio_in_jitter_loss_rate | 9093 | 由于抖动导致的数据包丢失率(比例) |
rtp_audio_in_jitter_burst_rate | 9093 | 由于抖动导致的数据包突发率(比例) |
rtp_audio_in_mean_interval_seconds | 9093 | 入站数据包之间的平均间隔 |
rtp_audio_in_flaw_total | 9093 | 检测到的音频缺陷总数(故障,伪影) |
rtp_audio_in_quality_percent | 9093 | 音频质量百分比(0-100) |
rtp_audio_in_quality_mos | 9093 | 平均意见分数(1-5,5为最佳) |
RTCP指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
rtcp_audio_bytes_total | 9093 | 总RTCP字节 |
rtcp_audio_packets_total | 9093 | 总RTCP数据包 |
Go运行时指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
go_goroutines | 9090 | 当前运行的goroutine数量 |
go_threads | 9090 | 创建的操作系统线程数量 |
go_info | 9090 | Go环境的信息(带版本标签) |
go_gc_duration_seconds | 9090 | 垃圾收集周期的暂停持续时间(摘要) |
go_memstats_alloc_bytes | 9090 | 分配并仍在使用的字节数 |
go_memstats_alloc_bytes_total | 9090 | 分配的总字节数(计数器) |
go_memstats_heap_alloc_bytes | 9090 | 分配并仍在使用的堆字节 |
go_memstats_heap_idle_bytes | 9090 | 等待使用的堆字节 |
go_memstats_heap_inuse_bytes | 9090 | 当前使用的堆字节 |
go_memstats_heap_objects | 9090 | 分配的堆对象数量 |
go_memstats_heap_released_bytes | 9090 | 释放给操作系统的堆字节 |
go_memstats_heap_sys_bytes | 9090 | 从系统获取的堆字节 |
go_memstats_sys_bytes | 9090 | 从系统获取的总字节 |
进程指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
process_cpu_seconds_total | 9090 | 花费的总用户和系统CPU时间(计数器) |
process_max_fds | 9090 | 最大打开文件描述符数量 |
process_open_fds | 9090 | 当前打开的文件描述符数量 |
process_resident_memory_bytes | 9090 | 常驻内存大小(字节) |
process_virtual_memory_bytes | 9090 | 虚拟内存大小(字节) |
process_virtual_memory_max_bytes | 9090 | 可用的最大虚拟内存量 |
process_start_time_seconds | 9090 | 自Unix纪元以来的进程启动时间 |
Prometheus HTTP指标
| 指标名称 | 端口 | 描述 |
|---|---|---|
promhttp_metric_handler_requests_in_flight | 9090 | 当前正在服务的抓取数量 |
promhttp_metric_handler_requests_total | 9090 | 按HTTP状态代码的抓取总数量(计数器) |
指标类型
- gauge: 可以上升或下降的指标(例如,current_calls, cpu_idle)
- counter: 仅增加的指标(例如,sessions_total, failed_scrapes)
- summary: 在滑动时间窗口中跟踪分位数的指标(例如,gc_duration_seconds)
使用
要抓取这些指标,请配置您的Prometheus服务器以抓取所有三个端点:
scrape_configs:
- job_name: 'ims_as_system'
static_configs:
- targets: ['localhost:9090']
- job_name: 'ims_as_engine'
static_configs:
- targets: ['localhost:8080']
metrics_path: '/metrics'
- job_name: 'ims_as_media'
static_configs:
- targets: ['localhost:9093']
metrics_path: '/esl'
params:
module: ['default']
示例查询
快速链接:
一般指标
当前呼叫量:
freeswitch_current_calls
网关健康:
freeswitch_sofia_gateway_status{status="UP"}
到网关的平均ping时间:
avg(freeswitch_sofia_gateway_pingtime)
每秒会话速率:
freeswitch_current_sps
内存使用情况:
freeswitch_memory_uordblks
媒体质量指标
呼叫质量(MOS分数):
rtp_audio_in_quality_mos
音频质量百分比:
rtp_audio_in_quality_percent
抖动率:
rate(rtp_audio_in_jitter_packets_total[5m])
数据包丢失率:
rtp_audio_in_jitter_loss_rate
平均抖动:
avg(rtp_audio_in_jitter_seconds_max - rtp_audio_in_jitter_seconds_min)
RTP带宽(入站):
rate(rtp_audio_in_media_bytes_total[1m]) * 8
检测到的音频缺陷:
increase(rtp_audio_in_flaw_total[5m])
TAS引擎指标
按类型的活动呼叫:
active_calls
Diameter对等体健康:
diameter_peer_state{application="sh"}
呼叫尝试速率:
rate(call_attempts_total[5m])
HLR查询延迟(95th百分位):
histogram_quantile(0.95, hlr_data_duration_milliseconds)
OCS授权延迟:
histogram_quantile(0.99, ocs_authorization_duration_milliseconds)
订阅者数据查询速率:
rate(subscriber_data_lookups_total[5m])
Diameter请求成功率:
rate(diameter_responses_total[5m]) / rate(diameter_requests_total[5m])
事件套接字连接状态:
event_socket_connected
Mnesia事务性能:
rate(erlang_mnesia_committed_transactions[5m])
Mnesia失败事务速率:
rate(erlang_mnesia_failed_transactions[5m])
Erlang VM进程数量:
erlang_vm_process_count
Erlang VM内存使用情况:
erlang_vm_memory_bytes_total
垃圾收集速率:
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])
调度器运行队列长度:
erlang_vm_statistics_run_queues_length
ETS表计数:
erlang_vm_memory_ets_tables
HTTP拨号计划请求持续时间(中位数):
histogram_quantile(0.5, http_dialplan_request_duration_milliseconds)
Grafana仪表板集成
这些指标可以在Grafana中使用Prometheus数据源进行可视化。
推荐的仪表板布局
第1行:呼叫量和健康
- 活动呼叫仪表(
active_calls) - 按类型的呼叫尝试速率(
rate(call_attempts_total[5m])) - 呼叫拒绝率(
rate(call_rejections_total[5m])) - 网关健康(
freeswitch_sofia_gateway_status)
第2行:性能(延迟百分位)
- 按呼叫类型的P95 HTTP拨号计划请求时间
- P95 Sh订阅者数据查询时间
- P95 HLR查询时间
- P95 OCS授权时间
- 按应用程序的P95 Diameter响应时间
第3行:成功率
- 订阅者数据查询成功率
- HLR查询成功率
- OCS授权成功率
- Diameter对等体状态
第4行:媒体质量
- 呼叫质量MOS分数(
rtp_audio_in_quality_mos) - 音频质量百分比(
rtp_audio_in_quality_percent) - 抖动统计
- 数据包丢失率
第5行:系统资源
- Erlang VM进程数量
- Erlang VM内存使用情况
- ETS表计数
- 调度器运行队列长度
- 垃圾收集速率
第6行:错误跟踪
- 呼叫参数错误
- 授权失败
- 事件套接字连接状态
- Mnesia事务失败
示例面板查询
按类型的活动呼叫:
sum by (call_type) (active_calls)
P95拨号计划生成延迟���
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket[5m])
)
Diameter成功率:
rate(diameter_responses_total{result="success"}[5m]) /
rate(diameter_requests_total[5m]) * 100
媒体质量 - 平均MOS:
avg(rtp_audio_in_quality_mos)
警报示例
关键警报(立即分页)
系统故障 - 无呼叫尝试:
alert: SystemDown
expr: rate(call_attempts_total[5m]) == 0
for: 2m
labels:
severity: critical
annotations:
summary: "TAS系统似乎已关闭 - 没有呼叫尝试"
description: "在2分钟内未检测到呼叫尝试"
Diameter对等体故障:
alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Diameter对等体{{ $labels.peer_host }}已关闭"
description: "{{ $labels.application }}应用程序的对等体不可用"
事件套接字断开连接:
alert: EventSocketDisconnected
expr: event_socket_connected == 0
for: 30s
labels:
severity: critical
annotations:
summary: "事件套接字{{ $labels.connection_type }}断开连接"
description: "关键通信通道故障"
高严重性警报
高Diameter延迟���
alert: HighDiameterLatency
expr: |
histogram_quantile(0.95,
rate(diameter_response_duration_milliseconds_bucket[5m])
) > 1000
for: 5m
labels:
severity: high
annotations:
summary: "检测到高Diameter延迟"
description: "P95延迟为{{ $value }}ms"
OCS授权失败:
alert: OCSAuthFailures
expr: |
rate(ocs_authorization_attempts_total{result="no_credit"}[5m]) /
rate(ocs_authorization_attempts_total[5m]) > 0.1
for: 5m
labels:
severity: high
annotations:
summary: "高比例的OCS无信用响应"
description: "{{ $value | humanizePercentage }}的请求被拒绝信用"
高呼叫拒绝率:
alert: HighCallRejectionRate
expr: |
rate(call_rejections_total[5m]) /
rate(call_attempts_total[5m]) > 0.05
for: 5m
labels:
severity: high
annotations:
summary: "呼叫拒绝率超过5%"
description: "{{ $value | humanizePercentage }}的呼叫被拒绝"
差的媒体质量:
alert: PoorMediaQuality
expr: avg(rtp_audio_in_quality_mos) < 3.5
for: 3m
labels:
severity: high
annotations:
summary: "检测到差的呼叫质量"
description: "平均MOS分数为{{ $value }}"
警告警报
高内存使用:
alert: HighMemoryUsage
expr: |
erlang_vm_memory_bytes_total{kind="processes"} /
(erlang_vm_process_limit * 1000000) > 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "Erlang VM内存使用高"
description: "进程内存为{{ $value | humanizePercentage }}"
高调度器运行队列:
alert: HighSchedulerRunQueue
expr: erlang_vm_statistics_run_queues_length > 10
for: 5m
labels:
severity: warning
annotations:
summary: "高调度器运行队列长度"
description: "运行队列长度为{{ $value }}"
Mnesia事务失败:
alert: MnesiaTransactionFailures
expr: rate(erlang_mnesia_failed_transactions[5m]) > 1
for: 5m
labels:
severity: warning
annotations:
summary: "检测到Mnesia事务失败"
description: "{{ $value }}每秒的失败"
使用指标进行故障排除
问题:呼叫缓慢
调查步骤:
- 检查整体拨号计划生成时间:
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
- 按组件细分:
# 订阅者数据查询
histogram_quantile(0.95, rate(subscriber_data_duration_milliseconds_bucket[5m]))
# HLR查询
histogram_quantile(0.95, rate(hlr_data_duration_milliseconds_bucket[5m]))
# OCS授权
histogram_quantile(0.95, rate(ocs_authorization_duration_milliseconds_bucket[5m]))
- 检查模块特定延迟:
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)
常见原因:
- 外部系统延迟(HSS, HLR, OCS)
- 网络问题
- 数据库竞争
- 高系统负载
问题:呼叫失败
调查步骤:
- 检查呼叫拒绝原因:
sum by (reason) (rate(call_rejections_total[5m]))
- 检查授权决策:
sum by (decision) (rate(authorization_decisions_total[5m]))
- 检查Diameter对等体健康:
diameter_peer_state
- 检查事件套接字连接:
event_socket_connected
问题:高负载
调查步骤:
- 检查呼叫量:
rate(call_attempts_total[5m])
active_calls
- 检查Erlang VM资源:
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
- 检查垃圾收集:
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])
问题:媒体质量差
调查步骤:
- 检查MOS分数:
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
- 检查抖动:
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
- 检查数据包丢失:
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
- 检查带宽使用:
rate(rtp_audio_in_media_bytes_total[1m]) * 8
性能基线
典型值(调优良好的系统)
延迟(P95):
- HTTP拨号计划请求:200-500ms
- 订阅者数据(Sh)查询:50-150ms
- HLR数据查询:100-300ms
- OCS授权:100-250ms
- Diameter请求:50-200ms
- 拨号计划模块处理:每个模块10-50ms
成功率:
- 呼叫完成:>95%
- 订阅者数据查询:>99%
- HLR查询:>98%
- OCS授权:>99%(不包括合法的无信用)
- Diameter对等体正常运行时间:>99.9%
媒体质量:
- MOS分数:>4.0
- 音频质量百分比:>80%
- 抖动:<30ms
- 数据包丢失率:<1%
系统资源:
- Erlang进程数量:<50% 的限制
- Erlang内存使用:<70% 的可用
- 调度器运行队列:<5
- ETS表:<1000
容量规划
每台服务器容量(推荐最大值):
- 并发呼叫:500-1000(取决于硬件)
- 每秒呼叫:20-50 CPS
- 注册订阅者:10,000-50,000
扩展指标(当添加容量时):
- 活动呼叫持续超过70%的容量
- Erlang进程数量超过70%的限制
- P95延���恶化
- 调度器运行队列持续超过10
最佳实践
监控策略
-
为不同受众设置仪表板:
- 操作仪表板:呼叫量、成功率、系统健康
- 工程仪表板:延迟百分位、错误率、资源使用
- 高管仪表板:高层KPI、正常运行时间、成本指标
-
在多个级别配置警报:
- 关键:分页值班人员(系统故障,重大故障)
- 高:在工作时间内警报(性能下降)
- 警告:在票务系统中跟踪(潜在问题)
-
使用适当的时间范围:
- 实时监控:5分钟窗口
- 故障排除:15分钟到1小时窗口
- 容量规划:每日/每周汇总
-
关注用户影响:
- 优先考虑端到端延迟指标
- 跟踪成功率而不是单个错误计数器
- 监控媒体质量以改善用户体验
查询性能
- 为常用查询使用记录规则:
groups:
- name: ims_as_aggregations
interval: 30s
rules:
- record: job:call_attempts:rate5m
expr: rate(call_attempts_total[5m])
- record: job:dialplan_latency:p95
expr: histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
-
在查询中避免高基数标签(例如,不按��话号码分组)
-
使用适当的速率间隔:
- 短期趋势:
[5m] - 中期趋势:
[1h] - 长期趋势:
[1d]
- 短期趋势:
指标基数
监控基数以防止Prometheus性能问题:
# 检查指标基数
count by (__name__) ({__name__=~".+"})
高基数风险:
- 每个呼叫具有唯一值的标签(电话号码、呼叫ID)
- 无界标签值
-
1000个唯一值的标签
解决方案:
- 使用标签进行分类,而不是唯一标识符
- 在外部系统中聚合高基数数据
- 使用记录规则进行预聚合