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
- Puerto 9090 - Métricas del Sistema
- Puerto 8080 - Métricas del Motor TAS
- Métricas de Llamadas de Aplicación
- Métricas del Protocolo Diameter
- Métricas de Operaciones de Telefonía
- Métricas del Sistema de Carga en Línea (OCS)
- Métricas de Dialplan y Procesamiento
- Métricas de Socket de Evento
- Métricas de Base de Datos Erlang Mnesia
- Métricas de Memoria de la VM Erlang
- Estadísticas de la VM Erlang
- Información del Sistema de la VM Erlang
- Contabilidad de Microestado de la VM Erlang (MSACC)
- Asignadores de la VM Erlang
- Puerto 9093 - Métricas de Calidad de Medios y Llamadas
- Métricas de Tiempo de Ejecución de Go
- Métricas de Proceso
- Métricas HTTP de Prometheus
- Tipos de Métricas
- Uso
- Consultas de Ejemplo
- Configuración de Unidad de Tiempo de Métrica
- Integración del Dashboard de Grafana
- Ejemplos de Alertas
- Solución de Problemas con Métricas
- Líneas Base de Rendimiento
- Mejores Prácticas
Puntos finales de métricas
| Puerto | Endpoint | Propósito | Ir a la Sección |
|---|---|---|---|
| 9090 | /metrics | Métricas del sistema, gateway y telefonía central | Puerto 9090 → |
| 8080 | /metrics | Métricas del motor TAS, Diameter, HLR, OCS y VM Erlang | Puerto 8080 → |
| 9093 | /esl?module=default | Calidad de medios RTP/RTCP y estadísticas de llamadas | Puerto 9093 → |
Puerto 9090 - Métricas del Sistema
Métricas de Llamadas y Sesiones
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
freeswitch_bridged_calls | 9090 | Número de llamadas puenteadas actualmente activas |
freeswitch_detailed_bridged_calls | 9090 | Número de llamadas puenteadas detalladas activas |
freeswitch_current_calls | 9090 | Número de llamadas actualmente activas |
freeswitch_detailed_calls | 9090 | Número de llamadas detalladas activas |
freeswitch_current_channels | 9090 | Número de canales actualmente activos |
freeswitch_current_sessions | 9090 | Número de sesiones actualmente activas |
freeswitch_current_sessions_peak | 9090 | Número máximo de sesiones desde el inicio |
freeswitch_current_sessions_peak_last_5min | 9090 | Número máximo de sesiones en los últimos 5 minutos |
freeswitch_sessions_total | 9090 | Número total de sesiones desde el inicio (contador) |
freeswitch_current_sps | 9090 | Sesiones actuales por segundo |
freeswitch_current_sps_peak | 9090 | Sesiones máximas por segundo desde el inicio |
freeswitch_current_sps_peak_last_5min | 9090 | Sesiones máximas por segundo en los últimos 5 minutos |
freeswitch_max_sessions | 9090 | Número máximo de sesiones permitidas |
freeswitch_max_sps | 9090 | Máximo de sesiones por segundo permitidas |
Métricas de Recursos del Sistema
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
freeswitch_current_idle_cpu | 9090 | Porcentaje actual de CPU inactivo |
freeswitch_min_idle_cpu | 9090 | Porcentaje mínimo de CPU inactivo registrado |
freeswitch_uptime_seconds | 9090 | Tiempo de actividad en segundos |
freeswitch_time_synced | 9090 | Si 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étrica | Puerto | Descripción |
|---|---|---|
freeswitch_memory_arena | 9090 | Total de bytes no mapeados (arena malloc) |
freeswitch_memory_ordblks | 9090 | Número de bloques libres |
freeswitch_memory_smblks | 9090 | Número de bloques de fastbin libres |
freeswitch_memory_hblks | 9090 | Número de regiones mapeadas |
freeswitch_memory_hblkhd | 9090 | Bytes en regiones mapeadas |
freeswitch_memory_usmblks | 9090 | Espacio total máximo asignado |
freeswitch_memory_fsmblks | 9090 | Bytes libres mantenidos en fastbins |
freeswitch_memory_uordblks | 9090 | Espacio total asignado |
freeswitch_memory_fordblks | 9090 | Espacio total libre |
freeswitch_memory_keepcost | 9090 | Bloque más alto liberable |
Métricas de Estado de Codec
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
freeswitch_codec_status | 9090 | Estado 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étrica | Puerto | Descripción |
|---|---|---|
freeswitch_endpoint_status | 9090 | Estado 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étrica | Puerto | Descripción |
|---|---|---|
freeswitch_load_module | 9090 | Estado 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étrica | Puerto | Descripción |
|---|---|---|
freeswitch_registrations | 9090 | Número total de registros activos |
freeswitch_registration_defails | 9090 | Informació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étrica | Puerto | Descripción |
|---|---|---|
freeswitch_sofia_gateway_status | 9090 | Estado del gateway con etiquetas: context, name, profile, proxy, scheme, status (UP/DOWN) |
freeswitch_sofia_gateway_call_in | 9090 | Número de llamadas entrantes a través del gateway |
freeswitch_sofia_gateway_call_out | 9090 | Número de llamadas salientes a través del gateway |
freeswitch_sofia_gateway_failed_call_in | 9090 | Número de llamadas entrantes fallidas |
freeswitch_sofia_gateway_failed_call_out | 9090 | Número de llamadas salientes fallidas |
freeswitch_sofia_gateway_ping | 9090 | Última marca de tiempo de ping (época Unix) |
freeswitch_sofia_gateway_pingtime | 9090 | Último tiempo de ping en milisegundos |
freeswitch_sofia_gateway_pingfreq | 9090 | Frecuencia de ping en segundos |
freeswitch_sofia_gateway_pingcount | 9090 | Número de pings enviados |
freeswitch_sofia_gateway_pingmin | 9090 | Tiempo mínimo de ping registrado |
freeswitch_sofia_gateway_pingmax | 9090 | Tiempo máximo de ping registrado |
Métricas de Salud del Exportador
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
freeswitch_up | 9090 | Si la última recolección fue exitosa (1=éxito, 0=fallo) |
freeswitch_exporter_total_scrapes | 9090 | Número total de recolecciones realizadas (contador) |
freeswitch_exporter_failed_scrapes | 9090 | Número total de recolecciones fallidas (contador) |
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étrica | Puerto | Descripción |
|---|---|---|
call_simulations_total | 8080 | Número total de simulaciones de llamadas (contador) |
call_attempts_total | 8080 | Número total de intentos de llamadas (contador) |
call_rejections_total | 8080 | Número total de rechazos de llamadas por razón (contador) |
call_param_errors_total | 8080 | Número total de errores de análisis de parámetros de llamadas (contador) |
active_calls | 8080 | Número de llamadas actualmente activas con etiquetas: call_type (mo/mt/emergency) |
tracked_call_sessions | 8080 | Número de sesiones de llamadas actualmente rastreadas en ETS |
Métricas del Protocolo Diameter
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
diameter_peer_state | 8080 | Estado de los pares Diameter (1=arriba, 0=abajo) con etiquetas: peer_host, peer_realm, application |
diameter_requests_total | 8080 | Número total de solicitudes Diameter (contador) |
diameter_responses_total | 8080 | Número total de respuestas Diameter (contador) |
diameter_response_duration_milliseconds | 8080 | Duración de las solicitudes Diameter en milisegundos (histograma) |
Métricas de Operaciones de Telefonía
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
hlr_lookups_total | 8080 | Número total de búsquedas HLR (contador) |
hlr_data_duration_milliseconds | 8080 | Duración de la recuperación de datos HLR en milisegundos (histograma) |
subscriber_data_lookups_total | 8080 | Número total de búsquedas de datos de suscriptores (contador) |
subscriber_data_duration_milliseconds | 8080 | Duración de la recuperación de datos de suscriptores Sh en milisegundos (histograma) |
ss7_map_operations_total | 8080 | Número total de operaciones SS7 MAP (contador) |
ss7_map_http_duration_milliseconds | 8080 | Duración de las solicitudes HTTP SS7 MAP en milisegundos (histograma) |
tracked_registrations | 8080 | Número de registros SIP actualmente rastreados |
Métricas del Sistema de Carga en Línea (OCS)
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
ocs_authorization_attempts_total | 8080 | Número total de intentos de autorización OCS (contador) |
ocs_authorization_duration_milliseconds | 8080 | Duración de la autorización OCS en milisegundos (histograma) |
online_charging_events_total | 8080 | Número total de eventos de carga en línea (contador) |
authorization_decisions_total | 8080 | Número total de decisiones de autorización (contador) |
Métricas de Dialplan y Procesamiento
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
http_requests_total | 8080 | Número total de solicitudes HTTP con etiquetas: endpoint, status_code (contador) |
http_dialplan_request_duration_milliseconds | 8080 | Duración de las solicitudes de dialplan HTTP en milisegundos (histograma) |
dialplan_module_duration_milliseconds | 8080 | Duración del procesamiento de módulos de dialplan individuales (histograma) |
freeswitch_variable_set_duration_milliseconds | 8080 | Duración de las operaciones de configuración de variables (histograma) |
Métricas de Socket de Evento
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
event_socket_connected | 8080 | Estado de conexión del Socket de Evento (1=conectado, 0=desconectado) con etiqueta: connection_type |
event_socket_reconnections_total | 8080 | Número total de intentos de reconexión del Socket de Evento (contador) |
Métricas de Base de Datos Erlang Mnesia
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
erlang_mnesia_held_locks | 8080 | Número de bloqueos mantenidos |
erlang_mnesia_lock_queue | 8080 | Número de transacciones esperando un bloqueo |
erlang_mnesia_transaction_participants | 8080 | Número de transacciones participantes |
erlang_mnesia_transaction_coordinators | 8080 | Número de transacciones coordinadoras |
erlang_mnesia_failed_transactions | 8080 | Número de transacciones fallidas (abortadas) (contador) |
erlang_mnesia_committed_transactions | 8080 | Número de transacciones comprometidas (contador) |
erlang_mnesia_logged_transactions | 8080 | Número de transacciones registradas (contador) |
erlang_mnesia_restarted_transactions | 8080 | Número total de reinicios de transacciones (contador) |
erlang_mnesia_memory_usage_bytes | 8080 | Total de bytes asignados por todas las tablas mnesia |
erlang_mnesia_tablewise_memory_usage_bytes | 8080 | Bytes asignados por tabla mnesia con etiqueta: table |
erlang_mnesia_tablewise_size | 8080 | Número de filas por tabla con etiqueta: table |
Métricas de Memoria de la VM Erlang
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
erlang_vm_memory_atom_bytes_total | 8080 | Memoria asignada para átomos con etiqueta: usage (used/free) |
erlang_vm_memory_bytes_total | 8080 | Memoria total asignada con etiqueta: kind (system/processes) |
erlang_vm_memory_dets_tables | 8080 | Conteo de tablas DETS |
erlang_vm_memory_ets_tables | 8080 | Conteo de tablas ETS |
erlang_vm_memory_processes_bytes_total | 8080 | Memoria asignada para procesos con etiqueta: usage (used/free) |
erlang_vm_memory_system_bytes_total | 8080 | Memoria para el emulador (no relacionada con procesos) con etiqueta: usage (atom/binary/code/ets/other) |
Estadísticas de la VM Erlang
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
erlang_vm_statistics_bytes_output_total | 8080 | Total de bytes enviados a puertos (contador) |
erlang_vm_statistics_bytes_received_total | 8080 | Total de bytes recibidos a través de puertos (contador) |
erlang_vm_statistics_context_switches | 8080 | Total de cambios de contexto desde el inicio (contador) |
erlang_vm_statistics_dirty_cpu_run_queue_length | 8080 | Longitud de la cola de ejecución de CPU sucia |
erlang_vm_statistics_dirty_io_run_queue_length | 8080 | Longitud de la cola de ejecución de IO sucia |
erlang_vm_statistics_garbage_collection_number_of_gcs | 8080 | Número de recolecciones de basura (contador) |
erlang_vm_statistics_garbage_collection_bytes_reclaimed | 8080 | Bytes recuperados por GC (contador) |
erlang_vm_statistics_garbage_collection_words_reclaimed | 8080 | Palabras recuperadas por GC (contador) |
erlang_vm_statistics_reductions_total | 8080 | Total de reducciones (contador) |
erlang_vm_statistics_run_queues_length | 8080 | Longitud de colas de ejecución normales |
erlang_vm_statistics_runtime_milliseconds | 8080 | Suma del tiempo de ejecución para todos los hilos (contador) |
erlang_vm_statistics_wallclock_time_milliseconds | 8080 | Tiempo real medido (contador) |
Información del Sistema de la VM Erlang
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
erlang_vm_dirty_cpu_schedulers | 8080 | Número de hilos programadores de CPU sucios |
erlang_vm_dirty_cpu_schedulers_online | 8080 | Número de programadores de CPU sucios en línea |
erlang_vm_dirty_io_schedulers | 8080 | Número de hilos programadores de I/O sucios |
erlang_vm_ets_limit | 8080 | Número máximo de tablas ETS permitidas |
erlang_vm_logical_processors | 8080 | Número de procesadores lógicos configurados |
erlang_vm_logical_processors_available | 8080 | Número de procesadores lógicos disponibles |
erlang_vm_logical_processors_online | 8080 | Número de procesadores lógicos en línea |
erlang_vm_port_count | 8080 | Número de puertos actualmente existentes |
erlang_vm_port_limit | 8080 | Número máximo de puertos permitidos |
erlang_vm_process_count | 8080 | Número de procesos actualmente existentes |
erlang_vm_process_limit | 8080 | Número máximo de procesos permitidos |
erlang_vm_schedulers | 8080 | Número de hilos programadores |
erlang_vm_schedulers_online | 8080 | Número de programadores en línea |
erlang_vm_smp_support | 8080 | 1 si se compiló con soporte SMP, 0 en caso contrario |
erlang_vm_threads | 8080 | 1 si se compiló con soporte de hilos, 0 en caso contrario |
erlang_vm_thread_pool_size | 8080 | Número de hilos asíncronos en el grupo |
erlang_vm_time_correction | 8080 | 1 si la corrección de tiempo está habilitada, 0 en caso contrario |
erlang_vm_wordsize_bytes | 8080 | Tamaño de las palabras de términos Erlang en bytes |
erlang_vm_atom_count | 8080 | Número de átomos actualmente existentes |
erlang_vm_atom_limit | 8080 | Nú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étrica | Puerto | Descripción |
|---|---|---|
erlang_vm_msacc_aux_seconds_total | 8080 | Tiempo dedicado a manejar trabajos auxiliares (contador) |
erlang_vm_msacc_check_io_seconds_total | 8080 | Tiempo dedicado a verificar nuevos eventos de I/O (contador) |
erlang_vm_msacc_emulator_seconds_total | 8080 | Tiempo dedicado a ejecutar procesos Erlang (contador) |
erlang_vm_msacc_gc_seconds_total | 8080 | Tiempo dedicado a la recolección de basura (contador) |
erlang_vm_msacc_other_seconds_total | 8080 | Tiempo dedicado a actividades no contabilizadas (contador) |
erlang_vm_msacc_port_seconds_total | 8080 | Tiempo dedicado a ejecutar puertos (contador) |
erlang_vm_msacc_sleep_seconds_total | 8080 | Tiempo dedicado a dormir (contador) |
erlang_vm_msacc_alloc_seconds_total | 8080 | Tiempo dedicado a gestionar memoria (contador) |
erlang_vm_msacc_bif_seconds_total | 8080 | Tiempo dedicado a BIFs (contador) |
erlang_vm_msacc_busy_wait_seconds_total | 8080 | Tiempo dedicado a esperar ocupadamente (contador) |
erlang_vm_msacc_ets_seconds_total | 8080 | Tiempo dedicado a BIFs de ETS (contador) |
erlang_vm_msacc_gc_full_seconds_total | 8080 | Tiempo dedicado a la recolección de basura completa (contador) |
erlang_vm_msacc_nif_seconds_total | 8080 | Tiempo dedicado a NIFs (contador) |
erlang_vm_msacc_send_seconds_total | 8080 | Tiempo dedicado a enviar mensajes (contador) |
erlang_vm_msacc_timers_seconds_total | 8080 | Tiempo 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étrica | Puerto | Descripción |
|---|---|---|
erlang_vm_allocators | 8080 | Memoria 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
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étrica | Puerto | Descripción |
|---|---|---|
freeswitch_info | 9093 | Información del sistema con etiqueta: version |
freeswitch_up | 9093 | Estado de preparación (1=preparado, 0=no preparado) |
freeswitch_stack_bytes | 9093 | Tamaño de la pila en bytes |
freeswitch_session_total | 9093 | Número total de sesiones |
freeswitch_session_active | 9093 | Número activo de sesiones |
freeswitch_session_limit | 9093 | Límite de sesiones |
rtp_channel_info | 9093 | Información del canal RTP con etiquetas para detalles del canal |
RTP Audio - Contadores de Bytes
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
rtp_audio_in_raw_bytes_total | 9093 | Total de bytes recibidos (incluidos encabezados) |
rtp_audio_out_raw_bytes_total | 9093 | Total de bytes enviados (incluidos encabezados) |
rtp_audio_in_media_bytes_total | 9093 | Total de bytes de medios recibidos (solo carga útil) |
rtp_audio_out_media_bytes_total | 9093 | Total de bytes de medios enviados (solo carga útil) |
RTP Audio - Contadores de Paquetes
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
rtp_audio_in_packets_total | 9093 | Total de paquetes recibidos |
rtp_audio_out_packets_total | 9093 | Total de paquetes enviados |
rtp_audio_in_media_packets_total | 9093 | Total de paquetes de medios recibidos |
rtp_audio_out_media_packets_total | 9093 | Total de paquetes de medios enviados |
rtp_audio_in_skip_packets_total | 9093 | Paquetes entrantes descartados |
rtp_audio_out_skip_packets_total | 9093 | Paquetes salientes descartados |
RTP Audio - Tipos de Paquetes Especiales
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
rtp_audio_in_jitter_packets_total | 9093 | Paquetes de buffer de jitter recibidos |
rtp_audio_in_dtmf_packets_total | 9093 | Paquetes DTMF recibidos |
rtp_audio_out_dtmf_packets_total | 9093 | Paquetes DTMF enviados |
rtp_audio_in_cng_packets_total | 9093 | Paquetes de Generación de Ruido de Confort recibidos |
rtp_audio_out_cng_packets_total | 9093 | Paquetes de Generación de Ruido de Confort enviados |
rtp_audio_in_flush_packets_total | 9093 | Paquetes vaciados (reinicios de búfer) |
RTP Audio - Métricas de Jitter y Calidad
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
rtp_audio_in_jitter_buffer_bytes_max | 9093 | Tamaño máximo del búfer de jitter en bytes |
rtp_audio_in_jitter_seconds_min | 9093 | Jitter mínimo en segundos |
rtp_audio_in_jitter_seconds_max | 9093 | Jitter máximo en segundos |
rtp_audio_in_jitter_loss_rate | 9093 | Tasa de pérdida de paquetes debido al jitter (ratio) |
rtp_audio_in_jitter_burst_rate | 9093 | Tasa de ráfaga de paquetes debido al jitter (ratio) |
rtp_audio_in_mean_interval_seconds | 9093 | Intervalo medio entre paquetes entrantes |
rtp_audio_in_flaw_total | 9093 | Total de defectos de audio detectados (glitches, artefactos) |
rtp_audio_in_quality_percent | 9093 | Calidad de audio como porcentaje (0-100) |
rtp_audio_in_quality_mos | 9093 | Puntuación de Opinión Media (1-5, donde 5 es mejor) |
Métricas RTCP
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
rtcp_audio_bytes_total | 9093 | Total de bytes RTCP |
rtcp_audio_packets_total | 9093 | Total de paquetes RTCP |
Métricas de Tiempo de Ejecución de Go
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
go_goroutines | 9090 | Número de goroutines actualmente en ejecución |
go_threads | 9090 | Número de hilos del sistema operativo creados |
go_info | 9090 | Información sobre el entorno de Go (con etiqueta de versión) |
go_gc_duration_seconds | 9090 | Duración de pausa de ciclos de recolección de basura (resumen) |
go_memstats_alloc_bytes | 9090 | Número de bytes asignados y aún en uso |
go_memstats_alloc_bytes_total | 9090 | Número total de bytes asignados (contador) |
go_memstats_heap_alloc_bytes | 9090 | Bytes de heap asignados y aún en uso |
go_memstats_heap_idle_bytes | 9090 | Bytes de heap esperando ser utilizados |
go_memstats_heap_inuse_bytes | 9090 | Bytes de heap actualmente en uso |
go_memstats_heap_objects | 9090 | Número de objetos de heap asignados |
go_memstats_heap_released_bytes | 9090 | Bytes de heap liberados al sistema operativo |
go_memstats_heap_sys_bytes | 9090 | Bytes de heap obtenidos del sistema |
go_memstats_sys_bytes | 9090 | Total de bytes obtenidos del sistema |
Métricas de Proceso
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
process_cpu_seconds_total | 9090 | Tiempo total de CPU de usuario y sistema gastado (contador) |
process_max_fds | 9090 | Número máximo de descriptores de archivo abiertos |
process_open_fds | 9090 | Número actual de descriptores de archivo abiertos |
process_resident_memory_bytes | 9090 | Tamaño de la memoria residente en bytes |
process_virtual_memory_bytes | 9090 | Tamaño de la memoria virtual en bytes |
process_virtual_memory_max_bytes | 9090 | Cantidad máxima de memoria virtual disponible |
process_start_time_seconds | 9090 | Tiempo de inicio del proceso desde la época Unix |
Métricas HTTP de Prometheus
| Nombre de Métrica | Puerto | Descripción |
|---|---|---|
promhttp_metric_handler_requests_in_flight | 9090 | Número actual de recolecciones en curso |
promhttp_metric_handler_requests_total | 9090 | Número total de recolecciones por código de estado HTTP (contador) |
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)
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']
Consultas de Ejemplo
Enlaces Rápidos:
- Métricas Generales (Puerto 9090)
- Métricas de Calidad de Medios (Puerto 9093)
- Métricas del Motor TAS (Puerto 8080)
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)
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:
- La biblioteca Elixir de Prometheus detecta automáticamente los nombres de métricas que terminan en
_milliseconds - Por defecto, convierte las unidades de tiempo nativas de Erlang a milisegundos automáticamente
- Nuestro código ya convierte el tiempo a milisegundos usando
System.convert_time_unit/3 - 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)
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)
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"
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:
- Verifique el tiempo total de generación de dialplan:
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
- 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]))
- 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:
- Verifique las razones de rechazo de llamadas:
sum by (reason) (rate(call_rejections_total[5m]))
- Verifique las decisiones de autorización:
sum by (decision) (rate(authorization_decisions_total[5m]))
- Verifique la salud del par Diameter:
diameter_peer_state
- Verifique la conexión del Socket de Evento:
event_socket_connected
Problema: Alta carga
Pasos de Investigación:
- Verifique el volumen de llamadas:
rate(call_attempts_total[5m])
active_calls
- Verifique los recursos de la VM Erlang:
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
- 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:
- Verifique las puntuaciones MOS:
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
- Verifique el jitter:
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
- Verifique la pérdida de paquetes:
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
- Verifique el uso de ancho de banda:
rate(rtp_audio_in_media_bytes_total[1m]) * 8
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
Mejores Prácticas
Estrategia de Monitoreo
-
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
-
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)
-
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
-
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
- 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]))
-
Evite etiquetas de alta cardinalidad en consultas (por ejemplo, no agrupar por número de teléfono)
-
Utilice intervalos de tasa apropiados:
- Tendencias a corto plazo:
[5m] - Tendencias a medio plazo:
[1h] - Tendencias a largo plazo:
[1d]
- Tendencias a corto plazo:
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