Pular para o conteúdo principal

Documentação de Métricas

Este documento descreve as métricas do Prometheus expostas pelos componentes do IMS Application Server.

Índice

Endpoints de Métricas

PortaEndpointPropósitoIr para a Seção
9090/metricsMétricas do sistema, gateway e telefonia centralPorta 9090 →
8080/metricsMétricas do motor TAS, Diameter, HLR, OCS e VM ErlangPorta 8080 →
9093/esl?module=defaultQualidade de mídia RTP/RTCP e estatísticas de chamadasPorta 9093 →

Porta 9090 - Métricas do Sistema

Métricas de Chamadas e Sessões

Nome da MétricaPortaDescrição
freeswitch_bridged_calls9090Número de chamadas conectadas atualmente ativas
freeswitch_detailed_bridged_calls9090Número de chamadas conectadas detalhadas ativas
freeswitch_current_calls9090Número de chamadas atualmente ativas
freeswitch_detailed_calls9090Número de chamadas detalhadas ativas
freeswitch_current_channels9090Número de canais atualmente ativos
freeswitch_current_sessions9090Número de sessões atualmente ativas
freeswitch_current_sessions_peak9090Número máximo de sessões desde a inicialização
freeswitch_current_sessions_peak_last_5min9090Número máximo de sessões nos últimos 5 minutos
freeswitch_sessions_total9090Número total de sessões desde a inicialização (contador)
freeswitch_current_sps9090Sessões atuais por segundo
freeswitch_current_sps_peak9090Sessões máximas por segundo desde a inicialização
freeswitch_current_sps_peak_last_5min9090Sessões máximas por segundo nos últimos 5 minutos
freeswitch_max_sessions9090Número máximo de sessões permitidas
freeswitch_max_sps9090Máximo de sessões por segundo permitidas

Métricas de Recursos do Sistema

Nome da MétricaPortaDescrição
freeswitch_current_idle_cpu9090Porcentagem atual de CPU ociosa
freeswitch_min_idle_cpu9090Porcentagem mínima de CPU ociosa registrada
freeswitch_uptime_seconds9090Tempo de atividade em segundos
freeswitch_time_synced9090Se o tempo do sistema está sincronizado com o tempo do host do exportador (1=síncrono, 0=não síncrono)

Métricas de Memória

Nome da MétricaPortaDescrição
freeswitch_memory_arena9090Total de bytes não mapeados (área malloc)
freeswitch_memory_ordblks9090Número de blocos livres
freeswitch_memory_smblks9090Número de blocos de fastbin livres
freeswitch_memory_hblks9090Número de regiões mapeadas
freeswitch_memory_hblkhd9090Bytes em regiões mapeadas
freeswitch_memory_usmblks9090Espaço total alocado máximo
freeswitch_memory_fsmblks9090Bytes livres mantidos em fastbins
freeswitch_memory_uordblks9090Espaço total alocado
freeswitch_memory_fordblks9090Espaço total livre
freeswitch_memory_keepcost9090Bloco liberável mais alto

Métricas de Status de Codec

Nome da MétricaPortaDescrição
freeswitch_codec_status9090Status do codec com rótulos: ikey (módulo), name (nome do codec), type (codec). Valor=1 indica que o codec está disponível

Codecs Disponíveis Incluem:

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

Métricas de Status de Endpoint

Nome da MétricaPortaDescrição
freeswitch_endpoint_status9090Status do endpoint com rótulos: ikey (módulo), name (nome do endpoint), type (endpoint). Valor=1 indica que o endpoint está disponível

Endpoints Disponíveis Incluem:

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

Métricas de Status de Módulo

Nome da MétricaPortaDescrição
freeswitch_load_module9090Status de carregamento do módulo (1=carregado, 0=não carregado) com rótulo: módulo

Módulos Chave Monitorados:

  • mod_sofia (SIP)
  • mod_conference, mod_conference_ims
  • mod_opus, mod_g729, mod_amr, etc.
  • mod_event_socket
  • mod_dptools
  • mod_python3
  • mod_rtc
  • E muitos mais...

Métricas de Registro

Nome da MétricaPortaDescrição
freeswitch_registrations9090Número total de registros ativos
freeswitch_registration_defails9090Informações detalhadas de registro com rótulos: expires, hostname, network_ip, network_port, network_proto, realm, reg_user, token, url

Métricas do Sofia Gateway

Nome da MétricaPortaDescrição
freeswitch_sofia_gateway_status9090Status do gateway com rótulos: context, name, profile, proxy, scheme, status (UP/DOWN)
freeswitch_sofia_gateway_call_in9090Número de chamadas recebidas através do gateway
freeswitch_sofia_gateway_call_out9090Número de chamadas enviadas através do gateway
freeswitch_sofia_gateway_failed_call_in9090Número de chamadas recebidas que falharam
freeswitch_sofia_gateway_failed_call_out9090Número de chamadas enviadas que falharam
freeswitch_sofia_gateway_ping9090��ltimo timestamp de ping (época Unix)
freeswitch_sofia_gateway_pingtime9090Último tempo de ping em milissegundos
freeswitch_sofia_gateway_pingfreq9090Frequência de ping em segundos
freeswitch_sofia_gateway_pingcount9090Número de pings enviados
freeswitch_sofia_gateway_pingmin9090Tempo mínimo de ping registrado
freeswitch_sofia_gateway_pingmax9090Tempo máximo de ping registrado

Métricas de Saúde do Exportador

Nome da MétricaPortaDescrição
freeswitch_up9090Se a última coleta foi bem-sucedida (1=sucesso, 0=falha)
freeswitch_exporter_total_scrapes9090Número total de coletas realizadas (contador)
freeswitch_exporter_failed_scrapes9090Número total de coletas falhadas (contador)

↑ Voltar ao topo

Porta 8080 - Métricas do Motor TAS

Essas métricas são expostas pelo motor do Telephony Application Server e fornecem insights sobre o processamento de chamadas, operações de banco de dados e desempenho da VM Erlang.

Métricas de Chamadas de Aplicação

Nome da MétricaPortaDescrição
call_simulations_total8080Número total de simulações de chamadas (contador)
call_attempts_total8080Número total de tentativas de chamadas (contador)
call_rejections_total8080Número total de rejeições de chamadas por motivo (contador)
call_param_errors_total8080Número total de erros de análise de parâmetros de chamadas (contador)
active_calls8080Número de chamadas ativas atualmente com rótulos: call_type (mo/mt/emergency)
tracked_call_sessions8080Número de sessões de chamadas atualmente rastreadas no ETS

Métricas do Protocolo Diameter

Nome da MétricaPortaDescrição
diameter_peer_state8080Estado dos pares Diameter (1=ativo, 0=inativo) com rótulos: peer_host, peer_realm, application
diameter_requests_total8080Número total de solicitações Diameter (contador)
diameter_responses_total8080Número total de respostas Diameter (contador)
diameter_response_duration_milliseconds8080Duração das solicitações Diameter em milissegundos (histograma)

Métricas de Operações de Telefonia

Nome da MétricaPortaDescrição
hlr_lookups_total8080Número total de consultas HLR (contador)
hlr_data_duration_milliseconds8080Duração da recuperação de dados HLR em milissegundos (histograma)
subscriber_data_lookups_total8080Número total de consultas de dados de assinantes (contador)
subscriber_data_duration_milliseconds8080Duração da recuperação de dados de assinantes Sh em milissegundos (histograma)
ss7_map_operations_total8080Número total de operações SS7 MAP (contador)
ss7_map_http_duration_milliseconds8080Duração das solicitações HTTP SS7 MAP em milissegundos (histograma)
tracked_registrations8080Número de registros SIP atualmente rastreados

Métricas do Sistema de Cobrança Online (OCS)

Nome da MétricaPortaDescrição
ocs_authorization_attempts_total8080Número total de tentativas de autorização OCS (contador)
ocs_authorization_duration_milliseconds8080Duração da autorização OCS em milissegundos (histograma)
online_charging_events_total8080Número total de eventos de cobrança online (contador)
authorization_decisions_total8080Número total de decisões de autorização (contador)

Métricas de Dialplan & Processamento

Nome da MétricaPortaDescrição
http_requests_total8080Número total de solicitações HTTP com rótulos: endpoint, status_code (contador)
http_dialplan_request_duration_milliseconds8080Duração das solicitações de dialplan HTTP em milissegundos (histograma)
dialplan_module_duration_milliseconds8080Duração do processamento de módulos de dialplan individuais (histograma)
freeswitch_variable_set_duration_milliseconds8080Duração das operações de definição de variáveis (histograma)

Métricas de Socket de Evento

Nome da MétricaPortaDescrição
event_socket_connected8080Estado da conexão do Socket de Evento (1=conectado, 0=desconectado) com rótulo: connection_type
event_socket_reconnections_total8080Número total de tentativas de reconexão do Socket de Evento (contador)

Métricas do Banco de Dados Erlang Mnesia

Nome da MétricaPortaDescrição
erlang_mnesia_held_locks8080Número de bloqueios mantidos
erlang_mnesia_lock_queue8080Número de transações aguardando um bloqueio
erlang_mnesia_transaction_participants8080Número de transações participantes
erlang_mnesia_transaction_coordinators8080Número de transações coordenadoras
erlang_mnesia_failed_transactions8080Número de transações falhadas (abortadas) (contador)
erlang_mnesia_committed_transactions8080Número de transações comprometidas (contador)
erlang_mnesia_logged_transactions8080Número de transações registradas (contador)
erlang_mnesia_restarted_transactions8080Número total de reinicializações de transações (contador)
erlang_mnesia_memory_usage_bytes8080Total de bytes alocados por todas as tabelas mnesia
erlang_mnesia_tablewise_memory_usage_bytes8080Bytes alocados por tabela mnesia com rótulo: table
erlang_mnesia_tablewise_size8080Número de linhas por tabela com rótulo: table

Métricas de Memória da VM Erlang

Nome da MétricaPortaDescrição
erlang_vm_memory_atom_bytes_total8080Memória alocada para átomos com rótulo: usage (used/free)
erlang_vm_memory_bytes_total8080Total de memória alocada com rótulo: kind (system/processes)
erlang_vm_memory_dets_tables8080Contagem de tabelas DETS
erlang_vm_memory_ets_tables8080Contagem de tabelas ETS
erlang_vm_memory_processes_bytes_total8080Memória alocada para processos com rótulo: usage (used/free)
erlang_vm_memory_system_bytes_total8080Memória para emulador (não relacionada a processos) com rótulo: usage (atom/binary/code/ets/other)

Estatísticas da VM Erlang

Nome da MétricaPortaDescrição
erlang_vm_statistics_bytes_output_total8080Total de bytes enviados para portas (contador)
erlang_vm_statistics_bytes_received_total8080Total de bytes recebidos através de portas (contador)
erlang_vm_statistics_context_switches8080Total de trocas de contexto desde a inicialização (contador)
erlang_vm_statistics_dirty_cpu_run_queue_length8080Comprimento da fila de execução de CPU suja
erlang_vm_statistics_dirty_io_run_queue_length8080Comprimento da fila de execução de E/S suja
erlang_vm_statistics_garbage_collection_number_of_gcs8080Número de coletas de lixo (contador)
erlang_vm_statistics_garbage_collection_bytes_reclaimed8080Bytes recuperados pelo GC (contador)
erlang_vm_statistics_garbage_collection_words_reclaimed8080Palavras recuperadas pelo GC (contador)
erlang_vm_statistics_reductions_total8080Total de reduções (contador)
erlang_vm_statistics_run_queues_length8080Comprimento das filas de execução normais
erlang_vm_statistics_runtime_milliseconds8080Soma do tempo de execução para todas as threads (contador)
erlang_vm_statistics_wallclock_time_milliseconds8080Tempo real medido (contador)

Informações do Sistema da VM Erlang

Nome da MétricaPortaDescrição
erlang_vm_dirty_cpu_schedulers8080Número de threads de escalonamento de CPU sujas
erlang_vm_dirty_cpu_schedulers_online8080Número de escalonadores de CPU sujos online
erlang_vm_dirty_io_schedulers8080Número de threads de escalonamento de E/S sujas
erlang_vm_ets_limit8080Número máximo de tabelas ETS permitidas
erlang_vm_logical_processors8080Número de processadores lógicos configurados
erlang_vm_logical_processors_available8080Número de processadores lógicos disponíveis
erlang_vm_logical_processors_online8080Número de processadores lógicos online
erlang_vm_port_count8080Número de portas atualmente existentes
erlang_vm_port_limit8080Número máximo de portas permitidas
erlang_vm_process_count8080Número de processos atualmente existentes
erlang_vm_process_limit8080Número máximo de processos permitidos
erlang_vm_schedulers8080Número de threads de escalonamento
erlang_vm_schedulers_online8080Número de escalonadores online
erlang_vm_smp_support80801 se compilado com suporte SMP, 0 caso contrário
erlang_vm_threads80801 se compilado com suporte a threads, 0 caso contrário
erlang_vm_thread_pool_size8080Número de threads assíncronas no pool
erlang_vm_time_correction80801 se a correção de tempo estiver habilitada, 0 caso contrário
erlang_vm_wordsize_bytes8080Tamanho das palavras de termos Erlang em bytes
erlang_vm_atom_count8080Número de átomos atualmente existentes
erlang_vm_atom_limit8080Número máximo de átomos permitidos

Contabilidade de Microestado da VM Erlang (MSACC)

Rastreamento detalhado do tempo para atividades de escalonamento com rótulos: type, id

Nome da MétricaPortaDescrição
erlang_vm_msacc_aux_seconds_total8080Tempo gasto lidando com trabalhos auxiliares (contador)
erlang_vm_msacc_check_io_seconds_total8080Tempo gasto verificando novos eventos de E/S (contador)
erlang_vm_msacc_emulator_seconds_total8080Tempo gasto executando processos Erlang (contador)
erlang_vm_msacc_gc_seconds_total8080Tempo gasto em coleta de lixo (contador)
erlang_vm_msacc_other_seconds_total8080Tempo gasto em atividades não contabilizadas (contador)
erlang_vm_msacc_port_seconds_total8080Tempo gasto executando portas (contador)
erlang_vm_msacc_sleep_seconds_total8080Tempo gasto dormindo (contador)
erlang_vm_msacc_alloc_seconds_total8080Tempo gasto gerenciando memória (contador)
erlang_vm_msacc_bif_seconds_total8080Tempo gasto em BIFs (contador)
erlang_vm_msacc_busy_wait_seconds_total8080Tempo gasto esperando ativamente (contador)
erlang_vm_msacc_ets_seconds_total8080Tempo gasto em BIFs ETS (contador)
erlang_vm_msacc_gc_full_seconds_total8080Tempo gasto em GC de varredura completa (contador)
erlang_vm_msacc_nif_seconds_total8080Tempo gasto em NIFs (contador)
erlang_vm_msacc_send_seconds_total8080Tempo gasto enviando mensagens (contador)
erlang_vm_msacc_timers_seconds_total8080Tempo gasto gerenciando temporizadores (contador)

Alocadores da VM Erlang

Métricas detalhadas do alocador de memória com rótulos: alloc, instance_no, kind, usage

Nome da MétricaPortaDescrição
erlang_vm_allocators8080Memória alocada (carriers_size) e usada (blocks_size) para diferentes alocadores. Veja erts_alloc(3).

Os tipos de alocadores incluem: temp_alloc, sl_alloc, std_alloc, ll_alloc, eheap_alloc, ets_alloc, fix_alloc, literal_alloc, binary_alloc, driver_alloc


↑ Voltar ao topo

Porta 9093 - Métricas de Qualidade de Mídia & Chamadas

Essas métricas fornecem estatísticas RTP/RTCP em tempo real e informações de qualidade de chamadas por canal.

Nome da MétricaPortaDescrição
freeswitch_info9093Informações do sistema com rótulo: version
freeswitch_up9093Status de prontidão (1=pronto, 0=não pronto)
freeswitch_stack_bytes9093Tamanho da pilha em bytes
freeswitch_session_total9093Número total de sessões
freeswitch_session_active9093Número ativo de sessões
freeswitch_session_limit9093Limite de sessões
rtp_channel_info9093Informações do canal RTP com rótulos para detalhes do canal

RTP Áudio - Contadores de Bytes

Nome da MétricaPortaDescrição
rtp_audio_in_raw_bytes_total9093Total de bytes recebidos (incluindo cabeçalhos)
rtp_audio_out_raw_bytes_total9093Total de bytes enviados (incluindo cabeçalhos)
rtp_audio_in_media_bytes_total9093Total de bytes de mídia recebidos (apenas payload)
rtp_audio_out_media_bytes_total9093Total de bytes de mídia enviados (apenas payload)

RTP Áudio - Contadores de Pacotes

Nome da MétricaPortaDescrição
rtp_audio_in_packets_total9093Total de pacotes recebidos
rtp_audio_out_packets_total9093Total de pacotes enviados
rtp_audio_in_media_packets_total9093Total de pacotes de mídia recebidos
rtp_audio_out_media_packets_total9093Total de pacotes de mídia enviados
rtp_audio_in_skip_packets_total9093Pacotes de entrada descartados
rtp_audio_out_skip_packets_total9093Pacotes de saída descartados

RTP Áudio - Tipos Especiais de Pacotes

Nome da MétricaPortaDescrição
rtp_audio_in_jitter_packets_total9093Pacotes recebidos do buffer de jitter
rtp_audio_in_dtmf_packets_total9093Pacotes DTMF recebidos
rtp_audio_out_dtmf_packets_total9093Pacotes DTMF enviados
rtp_audio_in_cng_packets_total9093Pacotes de Geração de Ruído de Conforto recebidos
rtp_audio_out_cng_packets_total9093Pacotes de Geração de Ruído de Conforto enviados
rtp_audio_in_flush_packets_total9093Pacotes descartados (reinicializações de buffer)

RTP Áudio - Métricas de Jitter & Qualidade

Nome da MétricaPortaDescrição
rtp_audio_in_jitter_buffer_bytes_max9093Maior tamanho do buffer de jitter em bytes
rtp_audio_in_jitter_seconds_min9093Jitter mínimo em segundos
rtp_audio_in_jitter_seconds_max9093Jitter máximo em segundos
rtp_audio_in_jitter_loss_rate9093Taxa de perda de pacotes devido ao jitter (razão)
rtp_audio_in_jitter_burst_rate9093Taxa de explosão de pacotes devido ao jitter (razão)
rtp_audio_in_mean_interval_seconds9093Intervalo médio entre pacotes de entrada
rtp_audio_in_flaw_total9093Total de falhas de áudio detectadas (glitches, artefatos)
rtp_audio_in_quality_percent9093Qualidade do áudio como porcentagem (0-100)
rtp_audio_in_quality_mos9093Mean Opinion Score (1-5, onde 5 é o melhor)

Métricas RTCP

Nome da MétricaPortaDescrição
rtcp_audio_bytes_total9093Total de bytes RTCP
rtcp_audio_packets_total9093Total de pacotes RTCP

Métricas de Tempo de Execução Go

Nome da MétricaPortaDescrição
go_goroutines9090Número de goroutines atualmente em execução
go_threads9090Número de threads do OS criadas
go_info9090Informações sobre o ambiente Go (com rótulo de versão)
go_gc_duration_seconds9090Duração da pausa dos ciclos de coleta de lixo (resumo)
go_memstats_alloc_bytes9090Número de bytes alocados e ainda em uso
go_memstats_alloc_bytes_total9090Número total de bytes alocados (contador)
go_memstats_heap_alloc_bytes9090Bytes do heap alocados e ainda em uso
go_memstats_heap_idle_bytes9090Bytes do heap aguardando para serem usados
go_memstats_heap_inuse_bytes9090Bytes do heap atualmente em uso
go_memstats_heap_objects9090Número de objetos alocados no heap
go_memstats_heap_released_bytes9090Bytes do heap liberados para o OS
go_memstats_heap_sys_bytes9090Bytes do heap obtidos do sistema
go_memstats_sys_bytes9090Total de bytes obtidos do sistema

Métricas de Processo

Nome da MétricaPortaDescrição
process_cpu_seconds_total9090Total de tempo de CPU gasto em usuário e sistema (contador)
process_max_fds9090Número máximo de descritores de arquivo abertos
process_open_fds9090Número atual de descritores de arquivo abertos
process_resident_memory_bytes9090Tamanho da memória residente em bytes
process_virtual_memory_bytes9090Tamanho da memória virtual em bytes
process_virtual_memory_max_bytes9090Quantidade máxima de memória virtual disponível
process_start_time_seconds9090Tempo de início do processo desde a época Unix

Métricas HTTP do Prometheus

Nome da MétricaPortaDescrição
promhttp_metric_handler_requests_in_flight9090Número atual de coletas sendo atendidas
promhttp_metric_handler_requests_total9090Número total de coletas por código de status HTTP (contador)

↑ Voltar ao topo

Tipos de Métricas

  • gauge: Uma métrica que pode aumentar ou diminuir (por exemplo, current_calls, cpu_idle)
  • counter: Uma métrica que só aumenta (por exemplo, sessions_total, failed_scrapes)
  • summary: Uma métrica que rastreia quantis ao longo de uma janela de tempo deslizante (por exemplo, gc_duration_seconds)

↑ Voltar ao topo

Uso

Para coletar essas métricas, configure seu servidor Prometheus para coletar todos os três endpoints:

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

↑ Voltar ao topo

Consultas de Exemplo

Links Rápidos:

Métricas Gerais

Volume de chamadas atual:

freeswitch_current_calls

Saúde do gateway:

freeswitch_sofia_gateway_status{status="UP"}

Tempo médio de ping para gateways:

avg(freeswitch_sofia_gateway_pingtime)

Taxa de sessões por segundo:

freeswitch_current_sps

Uso de memória:

freeswitch_memory_uordblks

Métricas de Qualidade de Mídia

Qualidade da chamada (pontuação MOS):

rtp_audio_in_quality_mos

Porcentagem de qualidade de áudio:

rtp_audio_in_quality_percent

Taxa de jitter:

rate(rtp_audio_in_jitter_packets_total[5m])

Taxa de perda de pacotes:

rtp_audio_in_jitter_loss_rate

Jitter médio:

avg(rtp_audio_in_jitter_seconds_max - rtp_audio_in_jitter_seconds_min)

Largura de banda RTP (entrada):

rate(rtp_audio_in_media_bytes_total[1m]) * 8

Falhas de áudio detectadas:

increase(rtp_audio_in_flaw_total[5m])

Métricas do Motor TAS

Chamadas ativas por tipo:

active_calls

Saúde do par Diameter:

diameter_peer_state{application="sh"}

Taxa de tentativas de chamada:

rate(call_attempts_total[5m])

Latência de consulta HLR (percentil 95):

histogram_quantile(0.95, hlr_data_duration_milliseconds)

Latência de autorização OCS:

histogram_quantile(0.99, ocs_authorization_duration_milliseconds)

Taxa de consulta de dados de assinantes:

rate(subscriber_data_lookups_total[5m])

Taxa de sucesso de solicitações Diameter:

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

Status da conexão do Socket de Evento:

event_socket_connected

Desempenho da transação Mnesia:

rate(erlang_mnesia_committed_transactions[5m])

Taxa de transações falhadas Mnesia:

rate(erlang_mnesia_failed_transactions[5m])

Contagem de processos da VM Erlang:

erlang_vm_process_count

Uso de memória da VM Erlang:

erlang_vm_memory_bytes_total

Taxa de coleta de lixo:

rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

Comprimento da fila de execução do escalonador:

erlang_vm_statistics_run_queues_length

Contagem de tabelas ETS:

erlang_vm_memory_ets_tables

Duração da solicitação de dialplan HTTP (mediana):

histogram_quantile(0.5, http_dialplan_request_duration_milliseconds)

↑ Voltar ao topo

Configuração da Unidade de Tempo da Métrica

Importante para Desenvolvedores:

Todas as métricas de duração neste sistema usam duration_unit: false em suas declarações de Histograma. Isso é crítico porque:

  1. A biblioteca Elixir do Prometheus detecta automaticamente nomes de métricas que terminam em _milliseconds
  2. Por padrão, ela converte unidades de tempo nativas Erlang para milissegundos automaticamente
  3. Nosso código já converte o tempo para milissegundos usando System.convert_time_unit/3
  4. Sem duration_unit: false, a biblioteca converteria milissegundos em nanosegundos (dividindo por ~1.000.000)

Exemplo:

# Configuração correta
Histogram.declare(
name: :http_dialplan_request_duration_milliseconds,
help: "Duração das solicitações de dialplan HTTP em milissegundos",
labels: [:call_type],
buckets: [100, 250, 500, 750, 1000, 1500, 2000, 3000, 5000],
duration_unit: false # OBRIGATÓRIO para evitar conversão dupla
)

# Medindo o tempo corretamente
start_time = System.monotonic_time()
# ... fazer trabalho ...
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)

↑ Voltar ao topo

Integração do Dashboard Grafana

As métricas podem ser visualizadas no Grafana usando a fonte de dados Prometheus.

Layout de Dashboard Recomendado

Linha 1: Volume de Chamadas & Saúde

  • Medidor de chamadas ativas (active_calls)
  • Taxa de tentativas de chamadas por tipo (rate(call_attempts_total[5m]))
  • Taxa de rejeição de chamadas (rate(call_rejections_total[5m]))
  • Saúde do gateway (freeswitch_sofia_gateway_status)

Linha 2: Desempenho (Percentis de Latência)

  • Tempo de solicitação de dialplan HTTP P95 por tipo de chamada
  • Tempo de consulta de dados de assinantes Sh P95
  • Tempo de consulta HLR P95
  • Tempo de autorização OCS P95
  • Tempo de resposta Diameter P95 por aplicação

Linha 3: Taxas de Sucesso

  • Taxa de sucesso de consulta de dados de assinantes
  • Taxa de sucesso de consulta HLR
  • Taxa de sucesso de autorização OCS
  • Estado do par Diameter

Linha 4: Qualidade de Mídia

  • Pontuação MOS de qualidade de chamada (rtp_audio_in_quality_mos)
  • Porcentagem de qualidade de áudio (rtp_audio_in_quality_percent)
  • Estatísticas de jitter
  • Taxa de perda de pacotes

Linha 5: Recursos do Sistema

  • Contagem de processos da VM Erlang
  • Uso de memória da VM Erlang
  • Contagem de tabelas ETS
  • Comprimento da fila de execução do escalonador
  • Taxa de coleta de lixo

Linha 6: Rastreamento de Erros

  • Erros de parâmetros de chamada
  • Falhas de autorização
  • Status da conexão do Socket de Evento
  • Falhas de transação Mnesia

Consultas de Painel de Exemplo

Chamadas Ativas por Tipo:

sum by (call_type) (active_calls)

Latência de Geração de Dialplan P95:

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

Taxa de Sucesso Diameter:

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

Qualidade de Mídia - MOS Médio:

avg(rtp_audio_in_quality_mos)

↑ Voltar ao topo

Exemplos de Alertas

Alertas Críticos (Página Imediatamente)

Sistema Fora do Ar - Sem Tentativas de Chamadas:

alert: SystemDown
expr: rate(call_attempts_total[5m]) == 0
for: 2m
labels:
severity: critical
annotations:
summary: "O sistema TAS parece estar fora do ar - sem tentativas de chamadas"
description: "Nenhuma tentativa de chamada detectada por 2 minutos"

Par Diameter Fora do Ar:

alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Par Diameter {{ $labels.peer_host }} está fora do ar"
description: "Par para a aplicação {{ $labels.application }} está indisponível"

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 comunicação crítico fora do ar"

Alertas de Alta Severidade

Alta Latência Diameter:

alert: HighDiameterLatency
expr: |
histogram_quantile(0.95,
rate(diameter_response_duration_milliseconds_bucket[5m])
) > 1000
for: 5m
labels:
severity: high
annotations:
summary: "Alta latência Diameter detectada"
description: "A latência P95 é {{ $value }}ms"

Falhas de Autorização 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 taxa de respostas de OCS sem crédito"
description: "{{ $value | humanizePercentage }} das solicitações negadas crédito"

Alta Taxa de Rejeição de Chamadas:

alert: HighCallRejectionRate
expr: |
rate(call_rejections_total[5m]) /
rate(call_attempts_total[5m]) > 0.05
for: 5m
labels:
severity: high
annotations:
summary: "Taxa de rejeição de chamadas acima de 5%"
description: "{{ $value | humanizePercentage }} das chamadas rejeitadas"

Qualidade de Mídia Ruim:

alert: PoorMediaQuality
expr: avg(rtp_audio_in_quality_mos) < 3.5
for: 3m
labels:
severity: high
annotations:
summary: "Qualidade de chamada ruim detectada"
description: "A pontuação média MOS é {{ $value }}"

Alertas de Aviso

Uso de Memória Alto:

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 memória da VM Erlang alto"
description: "Memória do processo em {{ $value | humanizePercentage }}"

Alta Fila de Execução do Escalonador:

alert: HighSchedulerRunQueue
expr: erlang_vm_statistics_run_queues_length > 10
for: 5m
labels:
severity: warning
annotations:
summary: "Comprimento da fila de execução do escalonador alto"
description: "Comprimento da fila de execução é {{ $value }}"

Falhas de Transação Mnesia:

alert: MnesiaTransactionFailures
expr: rate(erlang_mnesia_failed_transactions[5m]) > 1
for: 5m
labels:
severity: warning
annotations:
summary: "Falhas de transação Mnesia detectadas"
description: "{{ $value }} falhas por segundo"

↑ Voltar ao topo

Solução de Problemas com Métricas

Problema: Métricas mostrando valores irreais (nanosegundos em vez de milissegundos)

Sintomas:

  • Valores de histograma na casa dos bilhões
  • Métricas de latência mostrando valores em microssegundos/nanosegundos

Causa: Falta de duration_unit: false na declaração do Histograma

Solução: Adicione duration_unit: false a todas as declarações de histograma de duração:

Histogram.declare(
name: :my_metric_duration_milliseconds,
# ... outras opções ...
duration_unit: false
)

Problema: Chamadas estão lentas

Passos de Investigação:

  1. Verifique o tempo total de geração de dialplan:
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
  1. Divida por componente:
# Consulta de dados de assinantes
histogram_quantile(0.95, rate(subscriber_data_duration_milliseconds_bucket[5m]))

# Consulta HLR
histogram_quantile(0.95, rate(hlr_data_duration_milliseconds_bucket[5m]))

# Autorização OCS
histogram_quantile(0.95, rate(ocs_authorization_duration_milliseconds_bucket[5m]))
  1. Verifique atrasos específicos de módulo:
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)

Causas Comuns:

  • Latência de sistema externo (HSS, HLR, OCS)
  • Problemas de rede
  • Contenção de banco de dados
  • Alta carga do sistema

Problema: Chamadas estão falhando

Passos de Investigação:

  1. Verifique os motivos de rejeição de chamadas:
sum by (reason) (rate(call_rejections_total[5m]))
  1. Verifique as decisões de autorização:
sum by (decision) (rate(authorization_decisions_total[5m]))
  1. Verifique a saúde do par Diameter:
diameter_peer_state
  1. Verifique a conexão do Socket de Evento:
event_socket_connected

Problema: Alta carga

Passos de Investigação:

  1. Verifique o volume de chamadas:
rate(call_attempts_total[5m])
active_calls
  1. Verifique os recursos da VM Erlang:
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
  1. Verifique a coleta de lixo:
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

Problema: Qualidade de Mídia Ruim

Passos de Investigação:

  1. Verifique as pontuações MOS:
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
  1. Verifique o jitter:
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
  1. Verifique a perda de pacotes:
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
  1. Verifique o uso de largura de banda:
rate(rtp_audio_in_media_bytes_total[1m]) * 8

↑ Voltar ao topo

Linhas de Base de Desempenho

Valores Típicos (Sistema Bem Ajustado)

Latência (P95):

  • Solicitação de dialplan HTTP: 200-500ms
  • Consulta de dados de assinantes (Sh): 50-150ms
  • Consulta de dados HLR: 100-300ms
  • Autorização OCS: 100-250ms
  • Solicitações Diameter: 50-200ms
  • Processamento de módulos de dialplan: 10-50ms por módulo

Taxas de Sucesso:

  • Conclusão de chamadas: >95%
  • Consultas de dados de assinantes: >99%
  • Consultas HLR: >98%
  • Autorizações OCS: >99% (excluindo legítimos sem crédito)
  • Uptime de pares Diameter: >99.9%

Qualidade de Mídia:

  • Pontuação MOS: >4.0
  • Porcentagem de qualidade de áudio: >80%
  • Jitter: <30ms
  • Taxa de perda de pacotes: <1%

Recursos do Sistema:

  • Contagem de processos Erlang: <50% do limite
  • Uso de memória Erlang: <70% do disponível
  • Fila de execução do escalonador: <5
  • Tabelas ETS: <1000

Planejamento de Capacidade

Capacidade por Servidor (máximos recomendados):

  • Chamadas simultâneas: 500-1000 (depende do hardware)
  • Chamadas por segundo: 20-50 CPS
  • Assinantes registrados: 10.000-50.000

Indicadores de Escalonamento (adicionar capacidade quando):

  • Chamadas ativas consistentemente >70% da capacidade
  • Contagem de processos Erlang >70% do limite
  • Latência P95 degradando
  • Filas de execução do escalonador consistentemente >10

↑ Voltar ao topo

Melhores Práticas

Estratégia de Monitoramento

  1. Configure dashboards para diferentes públicos:

    • Dashboard de operações: Volume de chamadas, taxas de sucesso, saúde do sistema
    • Dashboard de engenharia: Percentis de latência, taxas de erro, uso de recursos
    • Dashboard executivo: KPIs de alto nível, uptime, métricas de custo
  2. Configure alertas em múltiplos níveis:

    • Crítico: Página o responsável (sistema fora do ar, grande interrupção)
    • Alto: Alerta durante o horário comercial (desempenho degradado)
    • Aviso: Acompanhe no sistema de tickets (problemas potenciais)
  3. Use intervalos de tempo apropriados:

    • Monitoramento em tempo real: Janelas de 5 minutos
    • Solução de problemas: Janelas de 15 minutos a 1 hora
    • Planejamento de capacidade: Agregados diários/semanais
  4. Foque no impacto do usuário:

    • Priorize métricas de latência de ponta a ponta
    • Acompanhe taxas de sucesso em vez de contadores de erro individuais
    • Monitore a qualidade da mídia para a experiência do usuário

Desempenho de Consultas

  1. Use regras de gravação para consultas frequentemente usadas:
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 rótulos de alta cardinalidade em consultas (por exemplo, não agrupe por número de telefone)

  2. Use intervalos de taxa apropriados:

    • Tendências de curto prazo: [5m]
    • Tendências de médio prazo: [1h]
    • Tendências de longo prazo: [1d]

Cardinalidade de Métricas

Monitore a cardinalidade para evitar problemas de desempenho do Prometheus:

# Verifique a cardinalidade da métrica
count by (__name__) ({__name__=~".+"})

Riscos de alta cardinalidade:

  • Rótulos com valores únicos por chamada (números de telefone, IDs de chamada)
  • Valores de rótulo não limitados
  • Rótulos com >1000 valores únicos

Solução:

  • Use rótulos para categorias, não identificadores únicos
  • Agregue dados de alta cardinalidade em sistemas externos
  • Use regras de gravação para pré-agregar

↑ Voltar ao topo