Saltar al contenido principal

Documentación de Métricas

Este documento describe las métricas de Prometheus expuestas por los componentes del Servidor de Aplicaciones IMS.

Tabla de Contenidos

Puntos finales de métricas

PuertoEndpointPropósitoIr a la Sección
9090/metricsMétricas del sistema, gateway y telefonía centralPuerto 9090 →
8080/metricsMétricas del motor TAS, Diameter, HLR, OCS y VM ErlangPuerto 8080 →
9093/esl?module=defaultCalidad de medios RTP/RTCP y estadísticas de llamadasPuerto 9093 →

Puerto 9090 - Métricas del Sistema

Métricas de Llamadas y Sesiones

Nombre de MétricaPuertoDescripción
freeswitch_bridged_calls9090Número de llamadas puenteadas actualmente activas
freeswitch_detailed_bridged_calls9090Número de llamadas puenteadas detalladas activas
freeswitch_current_calls9090Número de llamadas actualmente activas
freeswitch_detailed_calls9090Número de llamadas detalladas activas
freeswitch_current_channels9090Número de canales actualmente activos
freeswitch_current_sessions9090Número de sesiones actualmente activas
freeswitch_current_sessions_peak9090Número máximo de sesiones desde el inicio
freeswitch_current_sessions_peak_last_5min9090Número máximo de sesiones en los últimos 5 minutos
freeswitch_sessions_total9090Número total de sesiones desde el inicio (contador)
freeswitch_current_sps9090Sesiones actuales por segundo
freeswitch_current_sps_peak9090Sesiones máximas por segundo desde el inicio
freeswitch_current_sps_peak_last_5min9090Sesiones máximas por segundo en los últimos 5 minutos
freeswitch_max_sessions9090Número máximo de sesiones permitidas
freeswitch_max_sps9090Máximo de sesiones por segundo permitidas

Métricas de Recursos del Sistema

Nombre de MétricaPuertoDescripción
freeswitch_current_idle_cpu9090Porcentaje actual de CPU inactivo
freeswitch_min_idle_cpu9090Porcentaje mínimo de CPU inactivo registrado
freeswitch_uptime_seconds9090Tiempo de actividad en segundos
freeswitch_time_synced9090Si el tiempo del sistema está sincronizado con el tiempo del host del exportador (1=sincronizado, 0=no sincronizado)

Métricas de Memoria

Nombre de MétricaPuertoDescripción
freeswitch_memory_arena9090Total de bytes no mapeados (arena malloc)
freeswitch_memory_ordblks9090Número de bloques libres
freeswitch_memory_smblks9090Número de bloques de fastbin libres
freeswitch_memory_hblks9090Número de regiones mapeadas
freeswitch_memory_hblkhd9090Bytes en regiones mapeadas
freeswitch_memory_usmblks9090Espacio total máximo asignado
freeswitch_memory_fsmblks9090Bytes libres mantenidos en fastbins
freeswitch_memory_uordblks9090Espacio total asignado
freeswitch_memory_fordblks9090Espacio total libre
freeswitch_memory_keepcost9090Bloque más alto liberable

Métricas de Estado de Codec

Nombre de MétricaPuertoDescripción
freeswitch_codec_status9090Estado del codec con etiquetas: ikey (módulo), name (nombre del codec), type (tipo de codec). Valor=1 indica que el codec está disponible

Los codecs disponibles incluyen:

  • G.711 alaw/ulaw
  • PROXY PASS-THROUGH
  • PROXY VIDEO PASS-THROUGH
  • RAW Signed Linear (16 bit)
  • Speex
  • VP8/VP9 Video
  • Variantes de AMR
  • B64
  • G.723.1, G.729, G.722, variantes de G.726
  • OPUS
  • MP3
  • ADPCM, GSM, LPC-10

Métricas de Estado de Endpoint

Nombre de MétricaPuertoDescripción
freeswitch_endpoint_status9090Estado del endpoint con etiquetas: ikey (módulo), name (nombre del endpoint), type (tipo de endpoint). Valor=1 indica que el endpoint está disponible

Los endpoints disponibles incluyen:

  • error, group, pickup, user (mod_dptools)
  • loopback, null (mod_loopback)
  • rtc (mod_rtc)
  • rtp, sofia (mod_sofia)
  • modem (mod_spandsp)

Métricas de Estado de Módulo

Nombre de MétricaPuertoDescripción
freeswitch_load_module9090Estado de carga del módulo (1=cargado, 0=no cargado) con etiqueta: módulo

Módulos clave monitoreados:

  • mod_sofia (SIP)
  • mod_conference, mod_conference_ims
  • mod_opus, mod_g729, mod_amr, etc.
  • mod_event_socket
  • mod_dptools
  • mod_python3
  • mod_rtc
  • Y muchos más...

Métricas de Registro

Nombre de MétricaPuertoDescripción
freeswitch_registrations9090Número total de registros activos
freeswitch_registration_defails9090Información de registro detallada con etiquetas: expires, hostname, network_ip, network_port, network_proto, realm, reg_user, token, url

Métricas de Sofia Gateway

Nombre de MétricaPuertoDescripción
freeswitch_sofia_gateway_status9090Estado del gateway con etiquetas: context, name, profile, proxy, scheme, status (UP/DOWN)
freeswitch_sofia_gateway_call_in9090Número de llamadas entrantes a través del gateway
freeswitch_sofia_gateway_call_out9090Número de llamadas salientes a través del gateway
freeswitch_sofia_gateway_failed_call_in9090Número de llamadas entrantes fallidas
freeswitch_sofia_gateway_failed_call_out9090Número de llamadas salientes fallidas
freeswitch_sofia_gateway_ping9090Última marca de tiempo de ping (época Unix)
freeswitch_sofia_gateway_pingtime9090Último tiempo de ping en milisegundos
freeswitch_sofia_gateway_pingfreq9090Frecuencia de ping en segundos
freeswitch_sofia_gateway_pingcount9090Número de pings enviados
freeswitch_sofia_gateway_pingmin9090Tiempo mínimo de ping registrado
freeswitch_sofia_gateway_pingmax9090Tiempo máximo de ping registrado

Métricas de Salud del Exportador

Nombre de MétricaPuertoDescripción
freeswitch_up9090Si la última recolección fue exitosa (1=éxito, 0=fallo)
freeswitch_exporter_total_scrapes9090Número total de recolecciones realizadas (contador)
freeswitch_exporter_failed_scrapes9090Número total de recolecciones fallidas (contador)

↑ Volver al inicio

Puerto 8080 - Métricas del Motor TAS

Estas métricas son expuestas por el motor del Servidor de Aplicaciones de Telefonía y proporcionan información sobre el procesamiento de llamadas, operaciones de base de datos y rendimiento de la VM Erlang.

Métricas de Llamadas de Aplicación

Nombre de MétricaPuertoDescripción
call_simulations_total8080Número total de simulaciones de llamadas (contador)
call_attempts_total8080Número total de intentos de llamadas (contador)
call_rejections_total8080Número total de rechazos de llamadas por razón (contador)
call_param_errors_total8080Número total de errores de análisis de parámetros de llamadas (contador)
active_calls8080Número de llamadas actualmente activas con etiquetas: call_type (mo/mt/emergency)
tracked_call_sessions8080Número de sesiones de llamadas actualmente rastreadas en ETS

Métricas del Protocolo Diameter

Nombre de MétricaPuertoDescripción
diameter_peer_state8080Estado de los pares Diameter (1=arriba, 0=abajo) con etiquetas: peer_host, peer_realm, application
diameter_requests_total8080Número total de solicitudes Diameter (contador)
diameter_responses_total8080Número total de respuestas Diameter (contador)
diameter_response_duration_milliseconds8080Duración de las solicitudes Diameter en milisegundos (histograma)

Métricas de Operaciones de Telefonía

Nombre de MétricaPuertoDescripción
hlr_lookups_total8080Número total de búsquedas HLR (contador)
hlr_data_duration_milliseconds8080Duración de la recuperación de datos HLR en milisegundos (histograma)
subscriber_data_lookups_total8080Número total de búsquedas de datos de suscriptores (contador)
subscriber_data_duration_milliseconds8080Duración de la recuperación de datos de suscriptores Sh en milisegundos (histograma)
ss7_map_operations_total8080Número total de operaciones SS7 MAP (contador)
ss7_map_http_duration_milliseconds8080Duración de las solicitudes HTTP SS7 MAP en milisegundos (histograma)
tracked_registrations8080Número de registros SIP actualmente rastreados

Métricas del Sistema de Carga en Línea (OCS)

Nombre de MétricaPuertoDescripción
ocs_authorization_attempts_total8080Número total de intentos de autorización OCS (contador)
ocs_authorization_duration_milliseconds8080Duración de la autorización OCS en milisegundos (histograma)
online_charging_events_total8080Número total de eventos de carga en línea (contador)
authorization_decisions_total8080Número total de decisiones de autorización (contador)

Métricas de Dialplan y Procesamiento

Nombre de MétricaPuertoDescripción
http_requests_total8080Número total de solicitudes HTTP con etiquetas: endpoint, status_code (contador)
http_dialplan_request_duration_milliseconds8080Duración de las solicitudes de dialplan HTTP en milisegundos (histograma)
dialplan_module_duration_milliseconds8080Duración del procesamiento de módulos de dialplan individuales (histograma)
freeswitch_variable_set_duration_milliseconds8080Duración de las operaciones de configuración de variables (histograma)

Métricas de Socket de Evento

Nombre de MétricaPuertoDescripción
event_socket_connected8080Estado de conexión del Socket de Evento (1=conectado, 0=desconectado) con etiqueta: connection_type
event_socket_reconnections_total8080Número total de intentos de reconexión del Socket de Evento (contador)

Métricas de Base de Datos Erlang Mnesia

Nombre de MétricaPuertoDescripción
erlang_mnesia_held_locks8080Número de bloqueos mantenidos
erlang_mnesia_lock_queue8080Número de transacciones esperando un bloqueo
erlang_mnesia_transaction_participants8080Número de transacciones participantes
erlang_mnesia_transaction_coordinators8080Número de transacciones coordinadoras
erlang_mnesia_failed_transactions8080Número de transacciones fallidas (abortadas) (contador)
erlang_mnesia_committed_transactions8080Número de transacciones comprometidas (contador)
erlang_mnesia_logged_transactions8080Número de transacciones registradas (contador)
erlang_mnesia_restarted_transactions8080Número total de reinicios de transacciones (contador)
erlang_mnesia_memory_usage_bytes8080Total de bytes asignados por todas las tablas mnesia
erlang_mnesia_tablewise_memory_usage_bytes8080Bytes asignados por tabla mnesia con etiqueta: table
erlang_mnesia_tablewise_size8080Número de filas por tabla con etiqueta: table

Métricas de Memoria de la VM Erlang

Nombre de MétricaPuertoDescripción
erlang_vm_memory_atom_bytes_total8080Memoria asignada para átomos con etiqueta: usage (used/free)
erlang_vm_memory_bytes_total8080Memoria total asignada con etiqueta: kind (system/processes)
erlang_vm_memory_dets_tables8080Conteo de tablas DETS
erlang_vm_memory_ets_tables8080Conteo de tablas ETS
erlang_vm_memory_processes_bytes_total8080Memoria asignada para procesos con etiqueta: usage (used/free)
erlang_vm_memory_system_bytes_total8080Memoria para el emulador (no relacionada con procesos) con etiqueta: usage (atom/binary/code/ets/other)

Estadísticas de la VM Erlang

Nombre de MétricaPuertoDescripción
erlang_vm_statistics_bytes_output_total8080Total de bytes enviados a puertos (contador)
erlang_vm_statistics_bytes_received_total8080Total de bytes recibidos a través de puertos (contador)
erlang_vm_statistics_context_switches8080Total de cambios de contexto desde el inicio (contador)
erlang_vm_statistics_dirty_cpu_run_queue_length8080Longitud de la cola de ejecución de CPU sucia
erlang_vm_statistics_dirty_io_run_queue_length8080Longitud de la cola de ejecución de IO sucia
erlang_vm_statistics_garbage_collection_number_of_gcs8080Número de recolecciones de basura (contador)
erlang_vm_statistics_garbage_collection_bytes_reclaimed8080Bytes recuperados por GC (contador)
erlang_vm_statistics_garbage_collection_words_reclaimed8080Palabras recuperadas por GC (contador)
erlang_vm_statistics_reductions_total8080Total de reducciones (contador)
erlang_vm_statistics_run_queues_length8080Longitud de colas de ejecución normales
erlang_vm_statistics_runtime_milliseconds8080Suma del tiempo de ejecución para todos los hilos (contador)
erlang_vm_statistics_wallclock_time_milliseconds8080Tiempo real medido (contador)

Información del Sistema de la VM Erlang

Nombre de MétricaPuertoDescripción
erlang_vm_dirty_cpu_schedulers8080Número de hilos programadores de CPU sucios
erlang_vm_dirty_cpu_schedulers_online8080Número de programadores de CPU sucios en línea
erlang_vm_dirty_io_schedulers8080Número de hilos programadores de I/O sucios
erlang_vm_ets_limit8080Número máximo de tablas ETS permitidas
erlang_vm_logical_processors8080Número de procesadores lógicos configurados
erlang_vm_logical_processors_available8080Número de procesadores lógicos disponibles
erlang_vm_logical_processors_online8080Número de procesadores lógicos en línea
erlang_vm_port_count8080Número de puertos actualmente existentes
erlang_vm_port_limit8080Número máximo de puertos permitidos
erlang_vm_process_count8080Número de procesos actualmente existentes
erlang_vm_process_limit8080Número máximo de procesos permitidos
erlang_vm_schedulers8080Número de hilos programadores
erlang_vm_schedulers_online8080Número de programadores en línea
erlang_vm_smp_support80801 si se compiló con soporte SMP, 0 en caso contrario
erlang_vm_threads80801 si se compiló con soporte de hilos, 0 en caso contrario
erlang_vm_thread_pool_size8080Número de hilos asíncronos en el grupo
erlang_vm_time_correction80801 si la corrección de tiempo está habilitada, 0 en caso contrario
erlang_vm_wordsize_bytes8080Tamaño de las palabras de términos Erlang en bytes
erlang_vm_atom_count8080Número de átomos actualmente existentes
erlang_vm_atom_limit8080Número máximo de átomos permitidos

Contabilidad de Microestado de la VM Erlang (MSACC)

Seguimiento detallado del tiempo para actividades de programador con etiquetas: type, id

Nombre de MétricaPuertoDescripción
erlang_vm_msacc_aux_seconds_total8080Tiempo dedicado a manejar trabajos auxiliares (contador)
erlang_vm_msacc_check_io_seconds_total8080Tiempo dedicado a verificar nuevos eventos de I/O (contador)
erlang_vm_msacc_emulator_seconds_total8080Tiempo dedicado a ejecutar procesos Erlang (contador)
erlang_vm_msacc_gc_seconds_total8080Tiempo dedicado a la recolección de basura (contador)
erlang_vm_msacc_other_seconds_total8080Tiempo dedicado a actividades no contabilizadas (contador)
erlang_vm_msacc_port_seconds_total8080Tiempo dedicado a ejecutar puertos (contador)
erlang_vm_msacc_sleep_seconds_total8080Tiempo dedicado a dormir (contador)
erlang_vm_msacc_alloc_seconds_total8080Tiempo dedicado a gestionar memoria (contador)
erlang_vm_msacc_bif_seconds_total8080Tiempo dedicado a BIFs (contador)
erlang_vm_msacc_busy_wait_seconds_total8080Tiempo dedicado a esperar ocupadamente (contador)
erlang_vm_msacc_ets_seconds_total8080Tiempo dedicado a BIFs de ETS (contador)
erlang_vm_msacc_gc_full_seconds_total8080Tiempo dedicado a la recolección de basura completa (contador)
erlang_vm_msacc_nif_seconds_total8080Tiempo dedicado a NIFs (contador)
erlang_vm_msacc_send_seconds_total8080Tiempo dedicado a enviar mensajes (contador)
erlang_vm_msacc_timers_seconds_total8080Tiempo dedicado a gestionar temporizadores (contador)

Asignadores de la VM Erlang

Métricas detalladas del asignador de memoria con etiquetas: alloc, instance_no, kind, usage

Nombre de MétricaPuertoDescripción
erlang_vm_allocators8080Memoria asignada (carriers_size) y utilizada (blocks_size) para diferentes asignadores. Ver erts_alloc(3).

Los tipos de asignadores incluyen: temp_alloc, sl_alloc, std_alloc, ll_alloc, eheap_alloc, ets_alloc, fix_alloc, literal_alloc, binary_alloc, driver_alloc


↑ Volver al inicio

Puerto 9093 - Métricas de Calidad de Medios y Llamadas

Estas métricas proporcionan estadísticas RTP/RTCP en tiempo real e información sobre la calidad de las llamadas por canal.

Nombre de MétricaPuertoDescripción
freeswitch_info9093Información del sistema con etiqueta: version
freeswitch_up9093Estado de preparación (1=preparado, 0=no preparado)
freeswitch_stack_bytes9093Tamaño de la pila en bytes
freeswitch_session_total9093Número total de sesiones
freeswitch_session_active9093Número activo de sesiones
freeswitch_session_limit9093Límite de sesiones
rtp_channel_info9093Información del canal RTP con etiquetas para detalles del canal

RTP Audio - Contadores de Bytes

Nombre de MétricaPuertoDescripción
rtp_audio_in_raw_bytes_total9093Total de bytes recibidos (incluidos encabezados)
rtp_audio_out_raw_bytes_total9093Total de bytes enviados (incluidos encabezados)
rtp_audio_in_media_bytes_total9093Total de bytes de medios recibidos (solo carga útil)
rtp_audio_out_media_bytes_total9093Total de bytes de medios enviados (solo carga útil)

RTP Audio - Contadores de Paquetes

Nombre de MétricaPuertoDescripción
rtp_audio_in_packets_total9093Total de paquetes recibidos
rtp_audio_out_packets_total9093Total de paquetes enviados
rtp_audio_in_media_packets_total9093Total de paquetes de medios recibidos
rtp_audio_out_media_packets_total9093Total de paquetes de medios enviados
rtp_audio_in_skip_packets_total9093Paquetes entrantes descartados
rtp_audio_out_skip_packets_total9093Paquetes salientes descartados

RTP Audio - Tipos de Paquetes Especiales

Nombre de MétricaPuertoDescripción
rtp_audio_in_jitter_packets_total9093Paquetes de buffer de jitter recibidos
rtp_audio_in_dtmf_packets_total9093Paquetes DTMF recibidos
rtp_audio_out_dtmf_packets_total9093Paquetes DTMF enviados
rtp_audio_in_cng_packets_total9093Paquetes de Generación de Ruido de Confort recibidos
rtp_audio_out_cng_packets_total9093Paquetes de Generación de Ruido de Confort enviados
rtp_audio_in_flush_packets_total9093Paquetes vaciados (reinicios de búfer)

RTP Audio - Métricas de Jitter y Calidad

Nombre de MétricaPuertoDescripción
rtp_audio_in_jitter_buffer_bytes_max9093Tamaño máximo del búfer de jitter en bytes
rtp_audio_in_jitter_seconds_min9093Jitter mínimo en segundos
rtp_audio_in_jitter_seconds_max9093Jitter máximo en segundos
rtp_audio_in_jitter_loss_rate9093Tasa de pérdida de paquetes debido al jitter (ratio)
rtp_audio_in_jitter_burst_rate9093Tasa de ráfaga de paquetes debido al jitter (ratio)
rtp_audio_in_mean_interval_seconds9093Intervalo medio entre paquetes entrantes
rtp_audio_in_flaw_total9093Total de defectos de audio detectados (glitches, artefactos)
rtp_audio_in_quality_percent9093Calidad de audio como porcentaje (0-100)
rtp_audio_in_quality_mos9093Puntuación de Opinión Media (1-5, donde 5 es mejor)

Métricas RTCP

Nombre de MétricaPuertoDescripción
rtcp_audio_bytes_total9093Total de bytes RTCP
rtcp_audio_packets_total9093Total de paquetes RTCP

Métricas de Tiempo de Ejecución de Go

Nombre de MétricaPuertoDescripción
go_goroutines9090Número de goroutines actualmente en ejecución
go_threads9090Número de hilos del sistema operativo creados
go_info9090Información sobre el entorno de Go (con etiqueta de versión)
go_gc_duration_seconds9090Duración de pausa de ciclos de recolección de basura (resumen)
go_memstats_alloc_bytes9090Número de bytes asignados y aún en uso
go_memstats_alloc_bytes_total9090Número total de bytes asignados (contador)
go_memstats_heap_alloc_bytes9090Bytes de heap asignados y aún en uso
go_memstats_heap_idle_bytes9090Bytes de heap esperando ser utilizados
go_memstats_heap_inuse_bytes9090Bytes de heap actualmente en uso
go_memstats_heap_objects9090Número de objetos de heap asignados
go_memstats_heap_released_bytes9090Bytes de heap liberados al sistema operativo
go_memstats_heap_sys_bytes9090Bytes de heap obtenidos del sistema
go_memstats_sys_bytes9090Total de bytes obtenidos del sistema

Métricas de Proceso

Nombre de MétricaPuertoDescripción
process_cpu_seconds_total9090Tiempo total de CPU de usuario y sistema gastado (contador)
process_max_fds9090Número máximo de descriptores de archivo abiertos
process_open_fds9090Número actual de descriptores de archivo abiertos
process_resident_memory_bytes9090Tamaño de la memoria residente en bytes
process_virtual_memory_bytes9090Tamaño de la memoria virtual en bytes
process_virtual_memory_max_bytes9090Cantidad máxima de memoria virtual disponible
process_start_time_seconds9090Tiempo de inicio del proceso desde la época Unix

Métricas HTTP de Prometheus

Nombre de MétricaPuertoDescripción
promhttp_metric_handler_requests_in_flight9090Número actual de recolecciones en curso
promhttp_metric_handler_requests_total9090Número total de recolecciones por código de estado HTTP (contador)

↑ Volver al inicio

Tipos de Métricas

  • gauge: Una métrica que puede aumentar o disminuir (por ejemplo, current_calls, cpu_idle)
  • counter: Una métrica que solo aumenta (por ejemplo, sessions_total, failed_scrapes)
  • summary: Una métrica que rastrea cuantiles a través de una ventana de tiempo deslizante (por ejemplo, gc_duration_seconds)

↑ Volver al inicio

Uso

Para recolectar estas métricas, configure su servidor Prometheus para recolectar los tres puntos finales:

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']

↑ Volver al inicio

Consultas de Ejemplo

Enlaces Rápidos:

Métricas Generales

Volumen de llamadas actual:

freeswitch_current_calls

Salud del gateway:

freeswitch_sofia_gateway_status{status="UP"}

Tiempo promedio de ping a gateways:

avg(freeswitch_sofia_gateway_pingtime)

Tasa de sesiones por segundo:

freeswitch_current_sps

Uso de memoria:

freeswitch_memory_uordblks

Métricas de Calidad de Medios

Calidad de llamada (puntuación MOS):

rtp_audio_in_quality_mos

Porcentaje de calidad de audio:

rtp_audio_in_quality_percent

Tasa de jitter:

rate(rtp_audio_in_jitter_packets_total[5m])

Tasa de pérdida de paquetes:

rtp_audio_in_jitter_loss_rate

Jitter promedio:

avg(rtp_audio_in_jitter_seconds_max - rtp_audio_in_jitter_seconds_min)

Ancho de banda RTP (entrante):

rate(rtp_audio_in_media_bytes_total[1m]) * 8

Defectos de audio detectados:

increase(rtp_audio_in_flaw_total[5m])

Métricas del Motor TAS

Llamadas activas por tipo:

active_calls

Salud del par Diameter:

diameter_peer_state{application="sh"}

Tasa de intentos de llamada:

rate(call_attempts_total[5m])

Latencia de búsqueda HLR (percentil 95):

histogram_quantile(0.95, hlr_data_duration_milliseconds)

Latencia de autorización OCS:

histogram_quantile(0.99, ocs_authorization_duration_milliseconds)

Tasa de búsqueda de datos de suscriptores:

rate(subscriber_data_lookups_total[5m])

Tasa de éxito de solicitudes Diameter:

rate(diameter_responses_total[5m]) / rate(diameter_requests_total[5m])

Estado de conexión del Socket de Evento:

event_socket_connected

Rendimiento de transacciones Mnesia:

rate(erlang_mnesia_committed_transactions[5m])

Tasa de transacciones fallidas Mnesia:

rate(erlang_mnesia_failed_transactions[5m])

Conteo de procesos de la VM Erlang:

erlang_vm_process_count

Uso de memoria de la VM Erlang:

erlang_vm_memory_bytes_total

Tasa de recolección de basura:

rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

Longitud de la cola de ejecución del programador:

erlang_vm_statistics_run_queues_length

Conteo de tablas ETS:

erlang_vm_memory_ets_tables

Duración de la solicitud de dialplan HTTP (mediana):

histogram_quantile(0.5, http_dialplan_request_duration_milliseconds)

↑ Volver al inicio

Configuración de Unidad de Tiempo de Métrica

Importante para Desarrolladores:

Todas las métricas de duración en este sistema utilizan duration_unit: false en sus declaraciones de Histograma. Esto es crítico porque:

  1. La biblioteca Elixir de Prometheus detecta automáticamente los nombres de métricas que terminan en _milliseconds
  2. Por defecto, convierte las unidades de tiempo nativas de Erlang a milisegundos automáticamente
  3. Nuestro código ya convierte el tiempo a milisegundos usando System.convert_time_unit/3
  4. Sin duration_unit: false, la biblioteca convertiría milisegundos a nanosegundos (dividiendo por ~1,000,000)

Ejemplo:

# Configuración correcta
Histogram.declare(
name: :http_dialplan_request_duration_milliseconds,
help: "Duración de las solicitudes de dialplan HTTP en milisegundos",
labels: [:call_type],
buckets: [100, 250, 500, 750, 1000, 1500, 2000, 3000, 5000],
duration_unit: false # REQUERIDO para evitar doble conversión
)

# Midiendo el tiempo correctamente
start_time = System.monotonic_time()
# ... hacer trabajo ...
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)

↑ Volver al inicio

Integración del Dashboard de Grafana

Las métricas pueden ser visualizadas en Grafana usando la fuente de datos de Prometheus.

Diseño de Dashboard Recomendado

Fila 1: Volumen de Llamadas y Salud

  • Medidor de llamadas activas (active_calls)
  • Tasa de intentos de llamadas por tipo (rate(call_attempts_total[5m]))
  • Tasa de rechazo de llamadas (rate(call_rejections_total[5m]))
  • Salud del gateway (freeswitch_sofia_gateway_status)

Fila 2: Rendimiento (Percentiles de Latencia)

  • Tiempo de solicitud de dialplan HTTP P95 por tipo de llamada
  • Tiempo de búsqueda de datos de suscriptor Sh P95
  • Tiempo de búsqueda HLR P95
  • Tiempo de autorización OCS P95
  • Tiempo de respuesta Diameter P95 por aplicación

Fila 3: Tasas de Éxito

  • Tasa de éxito de búsqueda de datos de suscriptores
  • Tasa de éxito de búsqueda HLR
  • Tasa de éxito de autorización OCS
  • Estado del par Diameter

Fila 4: Calidad de Medios

  • Puntuación MOS de calidad de llamada (rtp_audio_in_quality_mos)
  • Porcentaje de calidad de audio (rtp_audio_in_quality_percent)
  • Estadísticas de jitter
  • Tasa de pérdida de paquetes

Fila 5: Recursos del Sistema

  • Conteo de procesos de la VM Erlang
  • Uso de memoria de la VM Erlang
  • Conteo de tablas ETS
  • Longitud de la cola de ejecución del programador
  • Tasa de recolección de basura

Fila 6: Seguimiento de Errores

  • Errores de parámetros de llamada
  • Fallos de autorización
  • Estado de conexión del Socket de Evento
  • Fallos de transacciones Mnesia

Consultas de Panel de Ejemplo

Llamadas Activas por Tipo:

sum by (call_type) (active_calls)

Latencia de Generación de Dialplan P95:

histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket[5m])
)

Tasa de Éxito de Diameter:

rate(diameter_responses_total{result="success"}[5m]) /
rate(diameter_requests_total[5m]) * 100

Calidad de Medios - Promedio MOS:

avg(rtp_audio_in_quality_mos)

↑ Volver al inicio

Ejemplos de Alertas

Alertas Críticas (Página Inmediatamente)

Sistema Caído - Sin Intentos de Llamadas:

alert: SystemDown
expr: rate(call_attempts_total[5m]) == 0
for: 2m
labels:
severity: critical
annotations:
summary: "El sistema TAS parece estar caído - sin intentos de llamadas"
description: "No se han detectado intentos de llamadas durante 2 minutos"

Par Diameter Caído:

alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
labels:
severity: critical
annotations:
summary: "El par Diameter {{ $labels.peer_host }} está caído"
description: "El par para la aplicación {{ $labels.application }} no está disponible"

Socket de Evento Desconectado:

alert: EventSocketDisconnected
expr: event_socket_connected == 0
for: 30s
labels:
severity: critical
annotations:
summary: "Socket de Evento {{ $labels.connection_type }} desconectado"
description: "Canal de comunicación crítico caído"

Alertas de Alta Severidad

Alta Latencia de Diameter:

alert: HighDiameterLatency
expr: |
histogram_quantile(0.95,
rate(diameter_response_duration_milliseconds_bucket[5m])
) > 1000
for: 5m
labels:
severity: high
annotations:
summary: "Se ha detectado alta latencia de Diameter"
description: "La latencia P95 es {{ $value }}ms"

Fallos de Autorización 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: "Alta tasa de respuestas sin crédito de OCS"
description: "{{ $value | humanizePercentage }} de las solicitudes denegadas crédito"

Alta Tasa de Rechazo de Llamadas:

alert: HighCallRejectionRate
expr: |
rate(call_rejections_total[5m]) /
rate(call_attempts_total[5m]) > 0.05
for: 5m
labels:
severity: high
annotations:
summary: "Tasa de rechazo de llamadas superior al 5%"
description: "{{ $value | humanizePercentage }} de llamadas rechazadas"

Pobre Calidad de Medios:

alert: PoorMediaQuality
expr: avg(rtp_audio_in_quality_mos) < 3.5
for: 3m
labels:
severity: high
annotations:
summary: "Se ha detectado mala calidad de llamada"
description: "La puntuación MOS promedio es {{ $value }}"

Alertas de Advertencia

Alto Uso de Memoria:

alert: HighMemoryUsage
expr: |
erlang_vm_memory_bytes_total{kind="processes"} /
(erlang_vm_process_limit * 1000000) > 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "Uso de memoria de la VM Erlang alto"
description: "Memoria de proceso al {{ $value | humanizePercentage }}"

Alta Cola de Ejecución del Programador:

alert: HighSchedulerRunQueue
expr: erlang_vm_statistics_run_queues_length > 10
for: 5m
labels:
severity: warning
annotations:
summary: "Longitud alta de la cola de ejecución del programador"
description: "La longitud de la cola de ejecución es {{ $value }}"

Fallos de Transacciones Mnesia:

alert: MnesiaTransactionFailures
expr: rate(erlang_mnesia_failed_transactions[5m]) > 1
for: 5m
labels:
severity: warning
annotations:
summary: "Se han detectado fallos en transacciones Mnesia"
description: "{{ $value }} fallos por segundo"

↑ Volver al inicio

Solución de Problemas con Métricas

Problema: Métricas que muestran valores poco realistas (nanosegundos en lugar de milisegundos)

Síntomas:

  • Valores de histograma en miles de millones
  • Métricas de latencia que muestran valores en microsegundos/nanosegundos

Causa: Falta duration_unit: false en la declaración de Histograma

Solución: Agregue duration_unit: false a todas las declaraciones de histograma de duración:

Histogram.declare(
name: :my_metric_duration_milliseconds,
# ... otras opciones ...
duration_unit: false
)

Problema: Las llamadas son lentas

Pasos de Investigación:

  1. Verifique el tiempo total de generación de dialplan:
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
  1. Desglose por componente:
# Búsqueda de datos de suscriptor
histogram_quantile(0.95, rate(subscriber_data_duration_milliseconds_bucket[5m]))

# Búsqueda HLR
histogram_quantile(0.95, rate(hlr_data_duration_milliseconds_bucket[5m]))

# Autorización OCS
histogram_quantile(0.95, rate(ocs_authorization_duration_milliseconds_bucket[5m]))
  1. Verifique los retrasos específicos del módulo:
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)

Causas Comunes:

  • Latencia de sistemas externos (HSS, HLR, OCS)
  • Problemas de red
  • Contención de base de datos
  • Alta carga del sistema

Problema: Las llamadas están fallando

Pasos de Investigación:

  1. Verifique las razones de rechazo de llamadas:
sum by (reason) (rate(call_rejections_total[5m]))
  1. Verifique las decisiones de autorización:
sum by (decision) (rate(authorization_decisions_total[5m]))
  1. Verifique la salud del par Diameter:
diameter_peer_state
  1. Verifique la conexión del Socket de Evento:
event_socket_connected

Problema: Alta carga

Pasos de Investigación:

  1. Verifique el volumen de llamadas:
rate(call_attempts_total[5m])
active_calls
  1. Verifique los recursos de la VM Erlang:
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
  1. Verifique la recolección de basura:
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

Problema: Pobre Calidad de Medios

Pasos de Investigación:

  1. Verifique las puntuaciones MOS:
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
  1. Verifique el jitter:
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
  1. Verifique la pérdida de paquetes:
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
  1. Verifique el uso de ancho de banda:
rate(rtp_audio_in_media_bytes_total[1m]) * 8

↑ Volver al inicio

Líneas Base de Rendimiento

Valores Típicos (Sistema Bien Ajustado)

Latencia (P95):

  • Solicitud de dialplan HTTP: 200-500ms
  • Búsqueda de datos de suscriptor (Sh): 50-150ms
  • Búsqueda de datos HLR: 100-300ms
  • Autorización OCS: 100-250ms
  • Solicitudes Diameter: 50-200ms
  • Procesamiento de módulos de dialplan: 10-50ms por módulo

Tasas de Éxito:

  • Finalización de llamadas: >95%
  • Búsquedas de datos de suscriptores: >99%
  • Búsquedas HLR: >98%
  • Autorizaciones OCS: >99% (excluyendo no crédito legítimo)
  • Tiempo de actividad del par Diameter: >99.9%

Calidad de Medios:

  • Puntuación MOS: >4.0
  • Porcentaje de calidad de audio: >80%
  • Jitter: <30ms
  • Tasa de pérdida de paquetes: <1%

Recursos del Sistema:

  • Conteo de procesos Erlang: <50% del límite
  • Uso de memoria Erlang: <70% del disponible
  • Cola de ejecución del programador: <5
  • Tablas ETS: <1000

Planificación de Capacidad

Capacidad por Servidor (máximos recomendados):

  • Llamadas concurrentes: 500-1000 (depende del hardware)
  • Llamadas por segundo: 20-50 CPS
  • Suscriptores registrados: 10,000-50,000

Indicadores de Escalado (agregar capacidad cuando):

  • Llamadas activas consistentemente >70% de la capacidad
  • Conteo de procesos Erlang >70% del límite
  • Latencia P95 degradándose
  • Colas de ejecución del programador consistentemente >10

↑ Volver al inicio

Mejores Prácticas

Estrategia de Monitoreo

  1. Configure dashboards para diferentes audiencias:

    • Dashboard de operaciones: Volumen de llamadas, tasas de éxito, salud del sistema
    • Dashboard de ingeniería: Percentiles de latencia, tasas de error, uso de recursos
    • Dashboard ejecutivo: KPI de alto nivel, tiempo de actividad, métricas de costo
  2. Configure alertas en múltiples niveles:

    • Crítico: Página al de guardia (sistema caído, gran interrupción)
    • Alto: Alerta durante horas laborales (rendimiento degradado)
    • Advertencia: Seguimiento en el sistema de tickets (problemas potenciales)
  3. Utilice rangos de tiempo apropiados:

    • Monitoreo en tiempo real: ventanas de 5 minutos
    • Solución de problemas: ventanas de 15 minutos a 1 hora
    • Planificación de capacidad: agregados diarios/semanales
  4. Enfoque en el impacto del usuario:

    • Priorizar métricas de latencia de extremo a extremo
    • Rastrear tasas de éxito sobre contadores de error individuales
    • Monitorear calidad de medios para la experiencia del usuario

Rendimiento de Consultas

  1. Utilice reglas de grabación para consultas de uso frecuente:
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. Evite etiquetas de alta cardinalidad en consultas (por ejemplo, no agrupar por número de teléfono)

  2. Utilice intervalos de tasa apropiados:

    • Tendencias a corto plazo: [5m]
    • Tendencias a medio plazo: [1h]
    • Tendencias a largo plazo: [1d]

Cardinalidad de Métricas

Monitoree la cardinalidad para prevenir problemas de rendimiento en Prometheus:

# Verifique la cardinalidad de métricas
count by (__name__) ({__name__=~".+"})

Riesgos de alta cardinalidad:

  • Etiquetas con valores únicos por llamada (números de teléfono, IDs de llamada)
  • Valores de etiqueta no limitados
  • Etiquetas con >1000 valores únicos

Solución:

  • Utilice etiquetas para categorías, no identificadores únicos
  • Agregue datos de alta cardinalidad en sistemas externos
  • Utilice reglas de grabación para pre-agregar

↑ Volver al inicio