跳到主要内容

指标文档

本文档描述了IMS应用服务器组件所暴露的Prometheus指标。

目录

指标端点

端口端点目的跳转到部分
9090/metrics系统、网关和核心电话指标9090端口 →
8080/metricsTAS引擎、Diameter、HLR、OCS和Erlang VM指标8080端口 →
9093/esl?module=defaultRTP/RTCP媒体质量和呼叫统计9093端口 →

9090端口 - 系统指标

呼叫和会话指标

指标名称端口描述
freeswitch_bridged_calls9090当前活动的桥接呼叫数量
freeswitch_detailed_bridged_calls9090当前活动的详细桥接呼叫数量
freeswitch_current_calls9090当前活动的呼叫数量
freeswitch_detailed_calls9090当前活动的详细呼叫数量
freeswitch_current_channels9090当前活动的通道数量
freeswitch_current_sessions9090当前活动的会话数量
freeswitch_current_sessions_peak9090自启动以来的会话峰值数量
freeswitch_current_sessions_peak_last_5min9090最近5分钟的会话峰值数量
freeswitch_sessions_total9090自启动以来的会话总数(计数器)
freeswitch_current_sps9090每秒当前会话数
freeswitch_current_sps_peak9090自启动以来的每秒峰值会话数
freeswitch_current_sps_peak_last_5min9090最近5分钟的每秒峰值会话数
freeswitch_max_sessions9090允许的最大会话数量
freeswitch_max_sps9090允许的最大每秒会话数

系统资源指标

指标名称端口描述
freeswitch_current_idle_cpu9090当前CPU空闲百分比
freeswitch_min_idle_cpu9090记录的最低CPU空闲百分比
freeswitch_uptime_seconds9090运行时间(秒)
freeswitch_time_synced9090系统时间是否与导出主机时间同步(1=同步,0=不同步)

内存指标

指标名称端口描述
freeswitch_memory_arena9090总非内存映射字节(malloc arena)
freeswitch_memory_ordblks9090空闲块数量
freeswitch_memory_smblks9090空闲快速块数量
freeswitch_memory_hblks9090映射区域数量
freeswitch_memory_hblkhd9090映射区域中的字节数
freeswitch_memory_usmblks9090最大总分配空间
freeswitch_memory_fsmblks9090在快速块中持有的空闲字节
freeswitch_memory_uordblks9090总分配空间
freeswitch_memory_fordblks9090总空闲空间
freeswitch_memory_keepcost9090最上层可释放块

编解码器状态指标

指标名称端口描述
freeswitch_codec_status9090编解码器状态,标签包括: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_status9090端点状态,标签包括: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_module9090模块加载状态(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_registrations9090当前活动注册的总数
freeswitch_registration_defails9090详细注册信息,标签包括:expires, hostname, network_ip, network_port, network_proto, realm, reg_user, token, url

Sofia网关指标

指标名称端口描述
freeswitch_sofia_gateway_status9090网关状态,标签包括:context, name, profile, proxy, scheme, status (UP/DOWN)
freeswitch_sofia_gateway_call_in9090通过网关的入站呼叫数量
freeswitch_sofia_gateway_call_out9090通过网关的出站呼叫数量
freeswitch_sofia_gateway_failed_call_in9090失败的入站呼叫数量
freeswitch_sofia_gateway_failed_call_out9090失败的出站呼叫数量
freeswitch_sofia_gateway_ping9090最后一次ping的时间戳(Unix纪元)
freeswitch_sofia_gateway_pingtime9090最后一次ping的时间(毫秒)
freeswitch_sofia_gateway_pingfreq9090ping频率(秒)
freeswitch_sofia_gateway_pingcount9090发送的ping数量
freeswitch_sofia_gateway_pingmin9090记录的最小ping时间
freeswitch_sofia_gateway_pingmax9090记录的最大ping时间

导出器健康指标

指标名称端口描述
freeswitch_up9090最后一次抓取是否成功(1=成功,0=失败)
freeswitch_exporter_total_scrapes9090执行的抓取总数(计数器)
freeswitch_exporter_failed_scrapes9090失败的抓取总数(计数器)

↑ 返回顶部

8080端口 - TAS引擎指标

这些指标由电话应用服务器引擎暴露,提供对呼叫处理、数据库操作和Erlang VM性能的洞察。

应用呼叫指标

指标名称端口描述
call_simulations_total8080呼叫模拟的总数(计数器)
call_attempts_total8080呼叫尝试的总数(计数器)
call_rejections_total8080按原因拒绝的呼叫总数(计数器)
call_param_errors_total8080呼叫参数解析错误的总数(计数器)
active_calls8080当前活动呼叫的数量,标签:call_type(mo/mt/emergency)
tracked_call_sessions8080当前在ETS中跟踪的呼叫会话数量

Diameter协议指标

指标名称端口描述
diameter_peer_state8080Diameter对等体的状态(1=在线,0=离线),标签:peer_host, peer_realm, application
diameter_requests_total8080Diameter请求的总数(计数器)
diameter_responses_total8080Diameter响应的总数(计数器)
diameter_response_duration_milliseconds8080Diameter请求的持续时间(毫秒)(直方图)

电话操作指标

指标名称端口描述
hlr_lookups_total8080HLR查找的总数(计数器)
hlr_data_duration_milliseconds8080HLR数据检索的持续时间(毫秒)(直方图)
subscriber_data_lookups_total8080订阅者数据查找的总数(计数器)
subscriber_data_duration_milliseconds8080Sh订阅者数据检索的持续时间(毫秒)(直方图)
ss7_map_operations_total8080SS7 MAP操作的总数(计数器)
ss7_map_http_duration_milliseconds8080SS7 MAP HTTP请求的持续时间(毫秒)(直方图)
tracked_registrations8080当前跟踪的SIP注册数量

在线计费系统(OCS)指标

指标名称端口描述
ocs_authorization_attempts_total8080OCS授权尝试的总数(计数器)
ocs_authorization_duration_milliseconds8080OCS授权的持续时间(毫秒)(直方图)
online_charging_events_total8080在线计费事件的总数(计数器)
authorization_decisions_total8080授权决策的总数(计数器)

拨号计划与处理指标

指标名称端口描述
http_requests_total8080HTTP请求的总数,标签:endpoint, status_code(计数器)
http_dialplan_request_duration_milliseconds8080HTTP拨号计划请求的持续时间(毫秒)(直方图)
dialplan_module_duration_milliseconds8080单个拨号计划模块处理的持续时间(毫秒)(直方图)
freeswitch_variable_set_duration_milliseconds8080变量设置操作的持续时间(毫秒)(直方图)

事件套接字指标

指标名称端口描述
event_socket_connected8080事件套接字连接状态(1=已连接,0=未连接),标签:connection_type
event_socket_reconnections_total8080事件套接字重新连接尝试的总数(计数器)

Erlang Mnesia数据库指标

指标名称端口描述
erlang_mnesia_held_locks8080持有的锁数量
erlang_mnesia_lock_queue8080等待锁的事务数量
erlang_mnesia_transaction_participants8080参与事务的数量
erlang_mnesia_transaction_coordinators8080协调事务的数量
erlang_mnesia_failed_transactions8080失败(中止)事务的数量(计数器)
erlang_mnesia_committed_transactions8080提交的事务数量(计数器)
erlang_mnesia_logged_transactions8080记录的事务数量(计数器)
erlang_mnesia_restarted_transactions8080事务重启的总数(计数器)
erlang_mnesia_memory_usage_bytes8080所有mnesia表分配的总字节数
erlang_mnesia_tablewise_memory_usage_bytes8080每个mnesia表分配的字节数,标签:table
erlang_mnesia_tablewise_size8080每个表的行数,标签:table

Erlang VM内存指标

指标名称端口描述
erlang_vm_memory_atom_bytes_total8080为原子分配的内存,标签:usage(used/free)
erlang_vm_memory_bytes_total8080总分配内存,标签:kind(system/processes)
erlang_vm_memory_dets_tables8080DETS表的数量
erlang_vm_memory_ets_tables8080ETS表的数量
erlang_vm_memory_processes_bytes_total8080为进程分配的内存,标签:usage(used/free)
erlang_vm_memory_system_bytes_total8080模拟器的内存(与进程无关),标签:usage(atom/binary/code/ets/other)

Erlang VM统计信息

指标名称端口描述
erlang_vm_statistics_bytes_output_total8080输出到端口的总字节数(计数器)
erlang_vm_statistics_bytes_received_total8080通过端口接收的总字节数(计数器)
erlang_vm_statistics_context_switches8080自启动以来的上下文切换总数(计数器)
erlang_vm_statistics_dirty_cpu_run_queue_length8080脏CPU运行队列的长度
erlang_vm_statistics_dirty_io_run_queue_length8080脏IO运行队列的长度
erlang_vm_statistics_garbage_collection_number_of_gcs8080垃圾回收的数量(计数器)
erlang_vm_statistics_garbage_collection_bytes_reclaimed8080GC回收的字节数(计数器)
erlang_vm_statistics_garbage_collection_words_reclaimed8080GC回收的单词数(计数器)
erlang_vm_statistics_reductions_total8080总减少数(计数器)
erlang_vm_statistics_run_queues_length8080正常运行队列的长度
erlang_vm_statistics_runtime_milliseconds8080所有线程的运行时间总和(计数器)
erlang_vm_statistics_wallclock_time_milliseconds8080实际测量的时间(计数器)

Erlang VM系统信息

���标名称端口描述
erlang_vm_dirty_cpu_schedulers8080脏CPU调度线程的数量
erlang_vm_dirty_cpu_schedulers_online8080在线的脏CPU调度器数量
erlang_vm_dirty_io_schedulers8080脏I/O调度线程的数量
erlang_vm_ets_limit8080允许的最大ETS表数量
erlang_vm_logical_processors8080配置的逻辑处理器数量
erlang_vm_logical_processors_available8080可用的逻辑处理器数量
erlang_vm_logical_processors_online8080在线的逻辑处理器数量
erlang_vm_port_count8080当前存在的端口数量
erlang_vm_port_limit8080允许的最大端口数量
erlang_vm_process_count8080当前存在的进程数量
erlang_vm_process_limit8080允许的最大进程数量
erlang_vm_schedulers8080调度线程的数量
erlang_vm_schedulers_online8080在线的调度器数量
erlang_vm_smp_support80801表示编译时支持SMP,0表示不支持
erlang_vm_threads80801表示编译时支持线程,0表示不支持
erlang_vm_thread_pool_size8080池中异步线程的数量
erlang_vm_time_correction80801表示启用时间校正,0表示未启用
erlang_vm_wordsize_bytes8080Erlang术语字的字节大小
erlang_vm_atom_count8080当前存在的原子数量
erlang_vm_atom_limit8080允许的最大原子数量

Erlang VM微状态会计(MSACC)

调度程序活动的详细时间跟踪,标签:type, id

指标名称端口描述
erlang_vm_msacc_aux_seconds_total8080处理辅助作业所花费的时间(计数器)
erlang_vm_msacc_check_io_seconds_total8080检查新I/O事件所花费的时间(计数器)
erlang_vm_msacc_emulator_seconds_total8080执行Erlang进程所花费的时间(计数器)
erlang_vm_msacc_gc_seconds_total8080垃圾回收中所花费的时间(计数器)
erlang_vm_msacc_other_seconds_total8080在未计入活动中所花费的时间(计数器)
erlang_vm_msacc_port_seconds_total8080执行端口所花费的时间(计数器)
erlang_vm_msacc_sleep_seconds_total8080睡眠所花费的时间(计数器)
erlang_vm_msacc_alloc_seconds_total8080管理内存所花费的时间(计数器)
erlang_vm_msacc_bif_seconds_total8080在BIF中所花费的时间(计数器)
erlang_vm_msacc_busy_wait_seconds_total8080忙等待所花费的时间(计数器)
erlang_vm_msacc_ets_seconds_total8080在ETS BIF中所花费的时间(计数器)
erlang_vm_msacc_gc_full_seconds_total8080在全扫GC中所花费的时间(计数器)
erlang_vm_msacc_nif_seconds_total8080在NIF中所花费的时间(计数器)
erlang_vm_msacc_send_seconds_total8080发送消息所花费的时间(计数器)
erlang_vm_msacc_timers_seconds_total8080管理定时器所花费的时间(计数器)

Erlang VM分配器

带有标签:alloc, instance_no, kind, usage的详细内存分配器指标

指标名称端口描述
erlang_vm_allocators8080不同分配器的分配(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_info9093系统信息,标签:version
freeswitch_up9093就绪状态(1=就绪,0=未就绪)
freeswitch_stack_bytes9093堆栈大小(字节)
freeswitch_session_total9093会话总数
freeswitch_session_active9093活动会话数量
freeswitch_session_limit9093会话限制
rtp_channel_info9093RTP通道信息,带有通道详细信息的标签

RTP音频 - 字节计数器

指标名称端口描述
rtp_audio_in_raw_bytes_total9093接收的总字节数(包括头部)
rtp_audio_out_raw_bytes_total9093发送的总字节数(包括头部)
rtp_audio_in_media_bytes_total9093接收的总媒体字节数(仅有效载荷)
rtp_audio_out_media_bytes_total9093发送的总媒体字节数(仅有效载荷)

RTP音频 - 数据包计数器

指标名称端口描述
rtp_audio_in_packets_total9093接收的总数据包数量
rtp_audio_out_packets_total9093发送的总数据包数量
rtp_audio_in_media_packets_total9093接收的总媒体数据包数量
rtp_audio_out_media_packets_total9093发送的总媒体数据包数量
rtp_audio_in_skip_packets_total9093丢弃的入站数据包数量
rtp_audio_out_skip_packets_total9093丢弃的出站数据包数量

RTP音频 - 特殊数据��类型

指标名称端口描述
rtp_audio_in_jitter_packets_total9093接收的抖动缓冲数据包数量
rtp_audio_in_dtmf_packets_total9093接收的DTMF数据包数量
rtp_audio_out_dtmf_packets_total9093发送的DTMF数据包数量
rtp_audio_in_cng_packets_total9093接收的舒适噪声生成数据包数量
rtp_audio_out_cng_packets_total9093发送的舒适噪声生成数据包数量
rtp_audio_in_flush_packets_total9093被刷新数据包(缓冲区重置)

RTP音频 - 抖动与质量指标

指标名称端口描述
rtp_audio_in_jitter_buffer_bytes_max9093最大抖动缓冲区大小(字节)
rtp_audio_in_jitter_seconds_min9093最小抖动(秒)
rtp_audio_in_jitter_seconds_max9093最大抖动(秒)
rtp_audio_in_jitter_loss_rate9093由于抖动导致的数据包丢失率(比率)
rtp_audio_in_jitter_burst_rate9093由于抖动导致的数据包突发率(比率)
rtp_audio_in_mean_interval_seconds9093入站数据包之间的平均间隔
rtp_audio_in_flaw_total9093检测到的音频缺陷总数(故障、伪影)
rtp_audio_in_quality_percent9093��频质量百分比(0-100)
rtp_audio_in_quality_mos9093平均意见分数(1-5,5为最佳)

RTCP指标

指标名称端口描述
rtcp_audio_bytes_total9093总RTCP字节数
rtcp_audio_packets_total9093总RTCP数据包数量

Go运行时指标

指标名称端口描述
go_goroutines9090当前运行的goroutines数量
go_threads9090创建的OS线程数量
go_info9090Go环境的信息(带版本标签)
go_gc_duration_seconds9090垃圾回收周期的暂停持续时间(摘要)
go_memstats_alloc_bytes9090分配并仍在使用的字节数
go_memstats_alloc_bytes_total9090分配的总字节数(计数器)
go_memstats_heap_alloc_bytes9090分配并仍在使用的堆字节数
go_memstats_heap_idle_bytes9090等待使用的堆字节数
go_memstats_heap_inuse_bytes9090当前使用的堆字节数
go_memstats_heap_objects9090分配的堆对象数量
go_memstats_heap_released_bytes9090释放给OS的堆字节数
go_memstats_heap_sys_bytes9090从系统获取的堆字节数
go_memstats_sys_bytes9090从系统获取的总字节数

进程指标

指标名称端口描述
process_cpu_seconds_total9090花费的总用户和系统CPU时间(计数器)
process_max_fds9090最大打开文件描述符数量
process_open_fds9090当前打开的文件描述符数量
process_resident_memory_bytes9090常驻内存大小(字节)
process_virtual_memory_bytes9090虚拟内存大小(字节)
process_virtual_memory_max_bytes9090可用的最大虚拟内存量
process_start_time_seconds9090自Unix纪元以来的进程启动时间

Prometheus HTTP指标

指标名称端口描述
promhttp_metric_handler_requests_in_flight9090当前正在服务的抓取数量
promhttp_metric_handler_requests_total9090按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查找延迟(95百分位):

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)

↑ 返回顶部

指标时间单位配置

对开发者的重要性:

该系统中的所有持续时间指标在其直方图声明中使用duration_unit: false。这是关键的,因为:

  1. Prometheus Elixir库自动检测以_milliseconds结尾的指标名称
  2. 默认情况下,它会自动将原生Erlang时间单位转换为毫秒
  3. 我们的代码已经使用System.convert_time_unit/3将时间转换为毫秒
  4. 如果没有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)

↑ 返回顶部

Grafana仪表板集成

可以使用Prometheus数据源在Grafana中可视化这些指标。

推荐的仪表板布局

第一行:呼叫量与健康

  • 活动呼叫仪表(active_calls
  • 按类型的呼叫尝试率(rate(call_attempts_total[5m])
  • 呼叫拒绝率(rate(call_rejections_total[5m])
  • 网关健康(freeswitch_sofia_gateway_status

第二行:性能(延迟百分位)

  • 按呼叫类型的P95 HTTP拨号计划请求时间
  • P95 Sh订阅者数据查找时间
  • P95 HLR查找时间
  • P95 OCS授权时间
  • 按应用的P95 Diameter响应时间

第三行:成功率

  • 订阅者数据查找成功率
  • HLR查找成功率
  • OCS授权成功率
  • Diameter对等体状态

第四行:媒体质量

  • 呼叫质量MOS分数(rtp_audio_in_quality_mos
  • 音频质量百分比(rtp_audio_in_quality_percent
  • 抖动统计
  • 数据包丢失率

第五行:系统��源

  • Erlang VM进程数量
  • Erlang VM内存使用情况
  • ETS表数量
  • 调度器运行队列长度
  • 垃圾回收率

第六行:错误跟踪

  • 呼叫参数错误
  • 授权失败
  • 事件套接字连接状态
  • 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 }}每秒的失败"

↑ 返回顶部

使用指标进行故障排除

问题:指标显示不现实的值(纳秒而不是毫秒)

症状:

  • 直方图值在十亿级别
  • 延迟指标显示微秒/纳秒值

原因: 缺少直方图声明中的duration_unit: false

解决方案: 在所有持续时间直方图声明中添加duration_unit: false

Histogram.declare(
name: :my_metric_duration_milliseconds,
# ... 其他选项 ...
duration_unit: false
)

问题:呼叫缓慢

调查步骤:

  1. 检查整体拨号计划生成时间:
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
  1. 按组件细分:
# 订阅者数据查找
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]))
  1. 检查模块特定延迟:
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)

常见原因:

  • 外部系统延迟(HSS, HLR, OCS)
  • 网络问题
  • 数据库竞争
  • 高系统负载

问题:呼叫失败

调查步骤:

  1. 检查呼叫拒绝原因:
sum by (reason) (rate(call_rejections_total[5m]))
  1. 检查授权决策:
sum by (decision) (rate(authorization_decisions_total[5m]))
  1. 检查Diameter对等体健康:
diameter_peer_state
  1. 检查事件套接字连接:
event_socket_connected

问题:高负载

调查步骤:

  1. 检查呼叫量:
rate(call_attempts_total[5m])
active_calls
  1. 检查Erlang VM资源:
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
  1. 检查垃圾回收:
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

问题:媒体质量差

调查步骤:

  1. 检查MOS分数:
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
  1. 检查抖动:
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
  1. 检查数据包丢失:
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
  1. 检查带宽使用:
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

↑ 返回顶部

最佳实践

监控策略

  1. 为不同受众设置仪表板:

    • 操作仪表板:呼叫量、成功率、系统健康
    • 工程仪表板:延迟百分位、错误率、资源使用
    • 高管仪表板:高层KPI、正常运行时间、成本指标
  2. 在多个级别配置警报:

    • 关键:页面值班(系统故障,重大故障)
    • 高:在工作时间内警报(性能下降)
    • 警告:在票务系统中跟踪(潜在问题)
  3. 使用适当的时间范围:

    • 实时监控:5分钟窗口
    • 故障排除:15分钟到1小时窗口
    • 容量规划:每日/每周汇总
  4. 关注用户影响:

    • 优先考虑端到端延迟指标
    • 跟踪成功率而不是单个错误计数器
    • 监控媒体质量以提升用户体验

查询性能

  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]))
  1. 在查询中避免高基数标签(例如,不按电话号码分组)

  2. 使用适当的速率间隔:

    • 短期趋势:[5m]
    • 中期趋势:[1h]
    • 长期趋势:[1d]

指标基数

监控基数以防止Prometheus性能问题:

# 检查指标基数
count by (__name__) ({__name__=~".+"})

高基数风险:

  • 每个呼叫具有唯一值的标签(电话号码、呼叫ID)
  • 无界标签值
  • 标签具有>1000个唯一值

解决方案:

  • 使用标签进行分类,而不是唯一标识符
  • 在外部系统中��合高基数数据
  • 使用记录规则进行预聚合

↑ 返回顶部