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
- Porta 9090 - Métricas do Sistema
- Porta 8080 - Métricas do Motor TAS
- Métricas de Chamadas de Aplicação
- Métricas do Protocolo Diameter
- Métricas de Operações de Telefonia
- Métricas do Sistema de Cobrança Online (OCS)
- Métricas de Dialplan & Processamento
- Métricas de Socket de Evento
- Métricas do Banco de Dados Erlang Mnesia
- Métricas de Memória da VM Erlang
- Estatísticas da VM Erlang
- Informações do Sistema da VM Erlang
- Contabilidade de Microestado da VM Erlang (MSACC)
- Alocadores da VM Erlang
- Porta 9093 - Métricas de Qualidade de Mídia & Chamadas
- Métricas de Tempo de Execução Go
- Métricas de Processo
- Métricas HTTP do Prometheus
- Tipos de Métricas
- Uso
- Consultas de Exemplo
- Configuração da Unidade de Tempo da Métrica
- Integração do Dashboard Grafana
- Exemplos de Alertas
- Solução de Problemas com Métricas
- Linhas de Base de Desempenho
- Melhores Práticas
Endpoints de Métricas
| Porta | Endpoint | Propósito | Ir para a Seção |
|---|---|---|---|
| 9090 | /metrics | Métricas do sistema, gateway e telefonia central | Porta 9090 → |
| 8080 | /metrics | Métricas do motor TAS, Diameter, HLR, OCS e VM Erlang | Porta 8080 → |
| 9093 | /esl?module=default | Qualidade de mídia RTP/RTCP e estatísticas de chamadas | Porta 9093 → |
Porta 9090 - Métricas do Sistema
Métricas de Chamadas e Sessões
| Nome da Métrica | Porta | Descrição |
|---|---|---|
freeswitch_bridged_calls | 9090 | Número de chamadas conectadas atualmente ativas |
freeswitch_detailed_bridged_calls | 9090 | Número de chamadas conectadas detalhadas ativas |
freeswitch_current_calls | 9090 | Número de chamadas atualmente ativas |
freeswitch_detailed_calls | 9090 | Número de chamadas detalhadas ativas |
freeswitch_current_channels | 9090 | Número de canais atualmente ativos |
freeswitch_current_sessions | 9090 | Número de sessões atualmente ativas |
freeswitch_current_sessions_peak | 9090 | Número máximo de sessões desde a inicialização |
freeswitch_current_sessions_peak_last_5min | 9090 | Número máximo de sessões nos últimos 5 minutos |
freeswitch_sessions_total | 9090 | Número total de sessões desde a inicialização (contador) |
freeswitch_current_sps | 9090 | Sessões atuais por segundo |
freeswitch_current_sps_peak | 9090 | Sessões máximas por segundo desde a inicialização |
freeswitch_current_sps_peak_last_5min | 9090 | Sessões máximas por segundo nos últimos 5 minutos |
freeswitch_max_sessions | 9090 | Número máximo de sessões permitidas |
freeswitch_max_sps | 9090 | Máximo de sessões por segundo permitidas |
Métricas de Recursos do Sistema
| Nome da Métrica | Porta | Descrição |
|---|---|---|
freeswitch_current_idle_cpu | 9090 | Porcentagem atual de CPU ociosa |
freeswitch_min_idle_cpu | 9090 | Porcentagem mínima de CPU ociosa registrada |
freeswitch_uptime_seconds | 9090 | Tempo de atividade em segundos |
freeswitch_time_synced | 9090 | Se 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étrica | Porta | Descrição |
|---|---|---|
freeswitch_memory_arena | 9090 | Total de bytes não mapeados (área malloc) |
freeswitch_memory_ordblks | 9090 | Número de blocos livres |
freeswitch_memory_smblks | 9090 | Número de blocos de fastbin livres |
freeswitch_memory_hblks | 9090 | Número de regiões mapeadas |
freeswitch_memory_hblkhd | 9090 | Bytes em regiões mapeadas |
freeswitch_memory_usmblks | 9090 | Espaço total alocado máximo |
freeswitch_memory_fsmblks | 9090 | Bytes livres mantidos em fastbins |
freeswitch_memory_uordblks | 9090 | Espaço total alocado |
freeswitch_memory_fordblks | 9090 | Espaço total livre |
freeswitch_memory_keepcost | 9090 | Bloco liberável mais alto |
Métricas de Status de Codec
| Nome da Métrica | Porta | Descrição |
|---|---|---|
freeswitch_codec_status | 9090 | Status 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étrica | Porta | Descrição |
|---|---|---|
freeswitch_endpoint_status | 9090 | Status 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étrica | Porta | Descrição |
|---|---|---|
freeswitch_load_module | 9090 | Status 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étrica | Porta | Descrição |
|---|---|---|
freeswitch_registrations | 9090 | Número total de registros ativos |
freeswitch_registration_defails | 9090 | Informaçõ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étrica | Porta | Descrição |
|---|---|---|
freeswitch_sofia_gateway_status | 9090 | Status do gateway com rótulos: context, name, profile, proxy, scheme, status (UP/DOWN) |
freeswitch_sofia_gateway_call_in | 9090 | Número de chamadas recebidas através do gateway |
freeswitch_sofia_gateway_call_out | 9090 | Número de chamadas enviadas através do gateway |
freeswitch_sofia_gateway_failed_call_in | 9090 | Número de chamadas recebidas que falharam |
freeswitch_sofia_gateway_failed_call_out | 9090 | Número de chamadas enviadas que falharam |
freeswitch_sofia_gateway_ping | 9090 | ��ltimo timestamp de ping (época Unix) |
freeswitch_sofia_gateway_pingtime | 9090 | Último tempo de ping em milissegundos |
freeswitch_sofia_gateway_pingfreq | 9090 | Frequência de ping em segundos |
freeswitch_sofia_gateway_pingcount | 9090 | Número de pings enviados |
freeswitch_sofia_gateway_pingmin | 9090 | Tempo mínimo de ping registrado |
freeswitch_sofia_gateway_pingmax | 9090 | Tempo máximo de ping registrado |
Métricas de Saúde do Exportador
| Nome da Métrica | Porta | Descrição |
|---|---|---|
freeswitch_up | 9090 | Se a última coleta foi bem-sucedida (1=sucesso, 0=falha) |
freeswitch_exporter_total_scrapes | 9090 | Número total de coletas realizadas (contador) |
freeswitch_exporter_failed_scrapes | 9090 | Número total de coletas falhadas (contador) |
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étrica | Porta | Descrição |
|---|---|---|
call_simulations_total | 8080 | Número total de simulações de chamadas (contador) |
call_attempts_total | 8080 | Número total de tentativas de chamadas (contador) |
call_rejections_total | 8080 | Número total de rejeições de chamadas por motivo (contador) |
call_param_errors_total | 8080 | Número total de erros de análise de parâmetros de chamadas (contador) |
active_calls | 8080 | Número de chamadas ativas atualmente com rótulos: call_type (mo/mt/emergency) |
tracked_call_sessions | 8080 | Número de sessões de chamadas atualmente rastreadas no ETS |
Métricas do Protocolo Diameter
| Nome da Métrica | Porta | Descrição |
|---|---|---|
diameter_peer_state | 8080 | Estado dos pares Diameter (1=ativo, 0=inativo) com rótulos: peer_host, peer_realm, application |
diameter_requests_total | 8080 | Número total de solicitações Diameter (contador) |
diameter_responses_total | 8080 | Número total de respostas Diameter (contador) |
diameter_response_duration_milliseconds | 8080 | Duração das solicitações Diameter em milissegundos (histograma) |
Métricas de Operações de Telefonia
| Nome da Métrica | Porta | Descrição |
|---|---|---|
hlr_lookups_total | 8080 | Número total de consultas HLR (contador) |
hlr_data_duration_milliseconds | 8080 | Duração da recuperação de dados HLR em milissegundos (histograma) |
subscriber_data_lookups_total | 8080 | Número total de consultas de dados de assinantes (contador) |
subscriber_data_duration_milliseconds | 8080 | Duração da recuperação de dados de assinantes Sh em milissegundos (histograma) |
ss7_map_operations_total | 8080 | Número total de operações SS7 MAP (contador) |
ss7_map_http_duration_milliseconds | 8080 | Duração das solicitações HTTP SS7 MAP em milissegundos (histograma) |
tracked_registrations | 8080 | Número de registros SIP atualmente rastreados |
Métricas do Sistema de Cobrança Online (OCS)
| Nome da Métrica | Porta | Descrição |
|---|---|---|
ocs_authorization_attempts_total | 8080 | Número total de tentativas de autorização OCS (contador) |
ocs_authorization_duration_milliseconds | 8080 | Duração da autorização OCS em milissegundos (histograma) |
online_charging_events_total | 8080 | Número total de eventos de cobrança online (contador) |
authorization_decisions_total | 8080 | Número total de decisões de autorização (contador) |
Métricas de Dialplan & Processamento
| Nome da Métrica | Porta | Descrição |
|---|---|---|
http_requests_total | 8080 | Número total de solicitações HTTP com rótulos: endpoint, status_code (contador) |
http_dialplan_request_duration_milliseconds | 8080 | Duração das solicitações de dialplan HTTP em milissegundos (histograma) |
dialplan_module_duration_milliseconds | 8080 | Duração do processamento de módulos de dialplan individuais (histograma) |
freeswitch_variable_set_duration_milliseconds | 8080 | Duração das operações de definição de variáveis (histograma) |
Métricas de Socket de Evento
| Nome da Métrica | Porta | Descrição |
|---|---|---|
event_socket_connected | 8080 | Estado da conexão do Socket de Evento (1=conectado, 0=desconectado) com rótulo: connection_type |
event_socket_reconnections_total | 8080 | Número total de tentativas de reconexão do Socket de Evento (contador) |
Métricas do Banco de Dados Erlang Mnesia
| Nome da Métrica | Porta | Descrição |
|---|---|---|
erlang_mnesia_held_locks | 8080 | Número de bloqueios mantidos |
erlang_mnesia_lock_queue | 8080 | Número de transações aguardando um bloqueio |
erlang_mnesia_transaction_participants | 8080 | Número de transações participantes |
erlang_mnesia_transaction_coordinators | 8080 | Número de transações coordenadoras |
erlang_mnesia_failed_transactions | 8080 | Número de transações falhadas (abortadas) (contador) |
erlang_mnesia_committed_transactions | 8080 | Número de transações comprometidas (contador) |
erlang_mnesia_logged_transactions | 8080 | Número de transações registradas (contador) |
erlang_mnesia_restarted_transactions | 8080 | Número total de reinicializações de transações (contador) |
erlang_mnesia_memory_usage_bytes | 8080 | Total de bytes alocados por todas as tabelas mnesia |
erlang_mnesia_tablewise_memory_usage_bytes | 8080 | Bytes alocados por tabela mnesia com rótulo: table |
erlang_mnesia_tablewise_size | 8080 | Número de linhas por tabela com rótulo: table |
Métricas de Memória da VM Erlang
| Nome da Métrica | Porta | Descrição |
|---|---|---|
erlang_vm_memory_atom_bytes_total | 8080 | Memória alocada para átomos com rótulo: usage (used/free) |
erlang_vm_memory_bytes_total | 8080 | Total de memória alocada com rótulo: kind (system/processes) |
erlang_vm_memory_dets_tables | 8080 | Contagem de tabelas DETS |
erlang_vm_memory_ets_tables | 8080 | Contagem de tabelas ETS |
erlang_vm_memory_processes_bytes_total | 8080 | Memória alocada para processos com rótulo: usage (used/free) |
erlang_vm_memory_system_bytes_total | 8080 | Memó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étrica | Porta | Descrição |
|---|---|---|
erlang_vm_statistics_bytes_output_total | 8080 | Total de bytes enviados para portas (contador) |
erlang_vm_statistics_bytes_received_total | 8080 | Total de bytes recebidos através de portas (contador) |
erlang_vm_statistics_context_switches | 8080 | Total de trocas de contexto desde a inicialização (contador) |
erlang_vm_statistics_dirty_cpu_run_queue_length | 8080 | Comprimento da fila de execução de CPU suja |
erlang_vm_statistics_dirty_io_run_queue_length | 8080 | Comprimento da fila de execução de E/S suja |
erlang_vm_statistics_garbage_collection_number_of_gcs | 8080 | Número de coletas de lixo (contador) |
erlang_vm_statistics_garbage_collection_bytes_reclaimed | 8080 | Bytes recuperados pelo GC (contador) |
erlang_vm_statistics_garbage_collection_words_reclaimed | 8080 | Palavras recuperadas pelo GC (contador) |
erlang_vm_statistics_reductions_total | 8080 | Total de reduções (contador) |
erlang_vm_statistics_run_queues_length | 8080 | Comprimento das filas de execução normais |
erlang_vm_statistics_runtime_milliseconds | 8080 | Soma do tempo de execução para todas as threads (contador) |
erlang_vm_statistics_wallclock_time_milliseconds | 8080 | Tempo real medido (contador) |
Informações do Sistema da VM Erlang
| Nome da Métrica | Porta | Descrição |
|---|---|---|
erlang_vm_dirty_cpu_schedulers | 8080 | Número de threads de escalonamento de CPU sujas |
erlang_vm_dirty_cpu_schedulers_online | 8080 | Número de escalonadores de CPU sujos online |
erlang_vm_dirty_io_schedulers | 8080 | Número de threads de escalonamento de E/S sujas |
erlang_vm_ets_limit | 8080 | Número máximo de tabelas ETS permitidas |
erlang_vm_logical_processors | 8080 | Número de processadores lógicos configurados |
erlang_vm_logical_processors_available | 8080 | Número de processadores lógicos disponíveis |
erlang_vm_logical_processors_online | 8080 | Número de processadores lógicos online |
erlang_vm_port_count | 8080 | Número de portas atualmente existentes |
erlang_vm_port_limit | 8080 | Número máximo de portas permitidas |
erlang_vm_process_count | 8080 | Número de processos atualmente existentes |
erlang_vm_process_limit | 8080 | Número máximo de processos permitidos |
erlang_vm_schedulers | 8080 | Número de threads de escalonamento |
erlang_vm_schedulers_online | 8080 | Número de escalonadores online |
erlang_vm_smp_support | 8080 | 1 se compilado com suporte SMP, 0 caso contrário |
erlang_vm_threads | 8080 | 1 se compilado com suporte a threads, 0 caso contrário |
erlang_vm_thread_pool_size | 8080 | Número de threads assíncronas no pool |
erlang_vm_time_correction | 8080 | 1 se a correção de tempo estiver habilitada, 0 caso contrário |
erlang_vm_wordsize_bytes | 8080 | Tamanho das palavras de termos Erlang em bytes |
erlang_vm_atom_count | 8080 | Número de átomos atualmente existentes |
erlang_vm_atom_limit | 8080 | Nú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étrica | Porta | Descrição |
|---|---|---|
erlang_vm_msacc_aux_seconds_total | 8080 | Tempo gasto lidando com trabalhos auxiliares (contador) |
erlang_vm_msacc_check_io_seconds_total | 8080 | Tempo gasto verificando novos eventos de E/S (contador) |
erlang_vm_msacc_emulator_seconds_total | 8080 | Tempo gasto executando processos Erlang (contador) |
erlang_vm_msacc_gc_seconds_total | 8080 | Tempo gasto em coleta de lixo (contador) |
erlang_vm_msacc_other_seconds_total | 8080 | Tempo gasto em atividades não contabilizadas (contador) |
erlang_vm_msacc_port_seconds_total | 8080 | Tempo gasto executando portas (contador) |
erlang_vm_msacc_sleep_seconds_total | 8080 | Tempo gasto dormindo (contador) |
erlang_vm_msacc_alloc_seconds_total | 8080 | Tempo gasto gerenciando memória (contador) |
erlang_vm_msacc_bif_seconds_total | 8080 | Tempo gasto em BIFs (contador) |
erlang_vm_msacc_busy_wait_seconds_total | 8080 | Tempo gasto esperando ativamente (contador) |
erlang_vm_msacc_ets_seconds_total | 8080 | Tempo gasto em BIFs ETS (contador) |
erlang_vm_msacc_gc_full_seconds_total | 8080 | Tempo gasto em GC de varredura completa (contador) |
erlang_vm_msacc_nif_seconds_total | 8080 | Tempo gasto em NIFs (contador) |
erlang_vm_msacc_send_seconds_total | 8080 | Tempo gasto enviando mensagens (contador) |
erlang_vm_msacc_timers_seconds_total | 8080 | Tempo 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étrica | Porta | Descrição |
|---|---|---|
erlang_vm_allocators | 8080 | Memó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
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étrica | Porta | Descrição |
|---|---|---|
freeswitch_info | 9093 | Informações do sistema com rótulo: version |
freeswitch_up | 9093 | Status de prontidão (1=pronto, 0=não pronto) |
freeswitch_stack_bytes | 9093 | Tamanho da pilha em bytes |
freeswitch_session_total | 9093 | Número total de sessões |
freeswitch_session_active | 9093 | Número ativo de sessões |
freeswitch_session_limit | 9093 | Limite de sessões |
rtp_channel_info | 9093 | Informações do canal RTP com rótulos para detalhes do canal |
RTP Áudio - Contadores de Bytes
| Nome da Métrica | Porta | Descrição |
|---|---|---|
rtp_audio_in_raw_bytes_total | 9093 | Total de bytes recebidos (incluindo cabeçalhos) |
rtp_audio_out_raw_bytes_total | 9093 | Total de bytes enviados (incluindo cabeçalhos) |
rtp_audio_in_media_bytes_total | 9093 | Total de bytes de mídia recebidos (apenas payload) |
rtp_audio_out_media_bytes_total | 9093 | Total de bytes de mídia enviados (apenas payload) |
RTP Áudio - Contadores de Pacotes
| Nome da Métrica | Porta | Descrição |
|---|---|---|
rtp_audio_in_packets_total | 9093 | Total de pacotes recebidos |
rtp_audio_out_packets_total | 9093 | Total de pacotes enviados |
rtp_audio_in_media_packets_total | 9093 | Total de pacotes de mídia recebidos |
rtp_audio_out_media_packets_total | 9093 | Total de pacotes de mídia enviados |
rtp_audio_in_skip_packets_total | 9093 | Pacotes de entrada descartados |
rtp_audio_out_skip_packets_total | 9093 | Pacotes de saída descartados |
RTP Áudio - Tipos Especiais de Pacotes
| Nome da Métrica | Porta | Descrição |
|---|---|---|
rtp_audio_in_jitter_packets_total | 9093 | Pacotes recebidos do buffer de jitter |
rtp_audio_in_dtmf_packets_total | 9093 | Pacotes DTMF recebidos |
rtp_audio_out_dtmf_packets_total | 9093 | Pacotes DTMF enviados |
rtp_audio_in_cng_packets_total | 9093 | Pacotes de Geração de Ruído de Conforto recebidos |
rtp_audio_out_cng_packets_total | 9093 | Pacotes de Geração de Ruído de Conforto enviados |
rtp_audio_in_flush_packets_total | 9093 | Pacotes descartados (reinicializações de buffer) |
RTP Áudio - Métricas de Jitter & Qualidade
| Nome da Métrica | Porta | Descrição |
|---|---|---|
rtp_audio_in_jitter_buffer_bytes_max | 9093 | Maior tamanho do buffer de jitter em bytes |
rtp_audio_in_jitter_seconds_min | 9093 | Jitter mínimo em segundos |
rtp_audio_in_jitter_seconds_max | 9093 | Jitter máximo em segundos |
rtp_audio_in_jitter_loss_rate | 9093 | Taxa de perda de pacotes devido ao jitter (razão) |
rtp_audio_in_jitter_burst_rate | 9093 | Taxa de explosão de pacotes devido ao jitter (razão) |
rtp_audio_in_mean_interval_seconds | 9093 | Intervalo médio entre pacotes de entrada |
rtp_audio_in_flaw_total | 9093 | Total de falhas de áudio detectadas (glitches, artefatos) |
rtp_audio_in_quality_percent | 9093 | Qualidade do áudio como porcentagem (0-100) |
rtp_audio_in_quality_mos | 9093 | Mean Opinion Score (1-5, onde 5 é o melhor) |
Métricas RTCP
| Nome da Métrica | Porta | Descrição |
|---|---|---|
rtcp_audio_bytes_total | 9093 | Total de bytes RTCP |
rtcp_audio_packets_total | 9093 | Total de pacotes RTCP |
Métricas de Tempo de Execução Go
| Nome da Métrica | Porta | Descrição |
|---|---|---|
go_goroutines | 9090 | Número de goroutines atualmente em execução |
go_threads | 9090 | Número de threads do OS criadas |
go_info | 9090 | Informações sobre o ambiente Go (com rótulo de versão) |
go_gc_duration_seconds | 9090 | Duração da pausa dos ciclos de coleta de lixo (resumo) |
go_memstats_alloc_bytes | 9090 | Número de bytes alocados e ainda em uso |
go_memstats_alloc_bytes_total | 9090 | Número total de bytes alocados (contador) |
go_memstats_heap_alloc_bytes | 9090 | Bytes do heap alocados e ainda em uso |
go_memstats_heap_idle_bytes | 9090 | Bytes do heap aguardando para serem usados |
go_memstats_heap_inuse_bytes | 9090 | Bytes do heap atualmente em uso |
go_memstats_heap_objects | 9090 | Número de objetos alocados no heap |
go_memstats_heap_released_bytes | 9090 | Bytes do heap liberados para o OS |
go_memstats_heap_sys_bytes | 9090 | Bytes do heap obtidos do sistema |
go_memstats_sys_bytes | 9090 | Total de bytes obtidos do sistema |
Métricas de Processo
| Nome da Métrica | Porta | Descrição |
|---|---|---|
process_cpu_seconds_total | 9090 | Total de tempo de CPU gasto em usuário e sistema (contador) |
process_max_fds | 9090 | Número máximo de descritores de arquivo abertos |
process_open_fds | 9090 | Número atual de descritores de arquivo abertos |
process_resident_memory_bytes | 9090 | Tamanho da memória residente em bytes |
process_virtual_memory_bytes | 9090 | Tamanho da memória virtual em bytes |
process_virtual_memory_max_bytes | 9090 | Quantidade máxima de memória virtual disponível |
process_start_time_seconds | 9090 | Tempo de início do processo desde a época Unix |
Métricas HTTP do Prometheus
| Nome da Métrica | Porta | Descrição |
|---|---|---|
promhttp_metric_handler_requests_in_flight | 9090 | Número atual de coletas sendo atendidas |
promhttp_metric_handler_requests_total | 9090 | Número total de coletas por código de status HTTP (contador) |
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)
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']
Consultas de Exemplo
Links Rápidos:
- Métricas Gerais (Porta 9090)
- Métricas de Qualidade de Mídia (Porta 9093)
- Métricas do Motor TAS (Porta 8080)
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)
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:
- A biblioteca Elixir do Prometheus detecta automaticamente nomes de métricas que terminam em
_milliseconds - Por padrão, ela converte unidades de tempo nativas Erlang para milissegundos automaticamente
- Nosso código já converte o tempo para milissegundos usando
System.convert_time_unit/3 - 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)
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)
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"
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:
- Verifique o tempo total de geração de dialplan:
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
- 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]))
- 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:
- Verifique os motivos de rejeição de chamadas:
sum by (reason) (rate(call_rejections_total[5m]))
- Verifique as decisões de autorização:
sum by (decision) (rate(authorization_decisions_total[5m]))
- Verifique a saúde do par Diameter:
diameter_peer_state
- Verifique a conexão do Socket de Evento:
event_socket_connected
Problema: Alta carga
Passos de Investigação:
- Verifique o volume de chamadas:
rate(call_attempts_total[5m])
active_calls
- Verifique os recursos da VM Erlang:
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
- 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:
- Verifique as pontuações MOS:
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
- Verifique o jitter:
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
- Verifique a perda de pacotes:
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
- Verifique o uso de largura de banda:
rate(rtp_audio_in_media_bytes_total[1m]) * 8
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
Melhores Práticas
Estratégia de Monitoramento
-
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
-
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)
-
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
-
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
- 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]))
-
Evite rótulos de alta cardinalidade em consultas (por exemplo, não agrupe por número de telefone)
-
Use intervalos de taxa apropriados:
- Tendências de curto prazo:
[5m] - Tendências de médio prazo:
[1h] - Tendências de longo prazo:
[1d]
- Tendências de curto prazo:
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