Aller au contenu principal

Documentation des Métriques

Ce document décrit les métriques Prometheus exposées par les composants du serveur d'applications IMS.

Table des Matières

Points de terminaison des métriques

PortPoint de terminaisonObjectifAller à la section
9090/metricsMétriques système, passerelle et téléphonie de basePort 9090 →
8080/metricsMétriques moteur TAS, Diameter, HLR, OCS et VM ErlangPort 8080 →
9093/esl?module=defaultQualité des médias RTP/RTCP et statistiques d'appelPort 9093 →

Port 9090 - Métriques Système

Métriques d'Appel et de Session

Nom de la métriquePortDescription
freeswitch_bridged_calls9090Nombre d'appels en pont actuellement actifs
freeswitch_detailed_bridged_calls9090Nombre d'appels en pont détaillés actifs
freeswitch_current_calls9090Nombre d'appels actuellement actifs
freeswitch_detailed_calls9090Nombre d'appels détaillés actifs
freeswitch_current_channels9090Nombre de canaux actuellement actifs
freeswitch_current_sessions9090Nombre de sessions actuellement actives
freeswitch_current_sessions_peak9090Nombre maximal de sessions depuis le démarrage
freeswitch_current_sessions_peak_last_5min9090Nombre maximal de sessions au cours des 5 dernières minutes
freeswitch_sessions_total9090Nombre total de sessions depuis le démarrage (compteur)
freeswitch_current_sps9090Sessions actuelles par seconde
freeswitch_current_sps_peak9090Sessions maximales par seconde depuis le démarrage
freeswitch_current_sps_peak_last_5min9090Sessions maximales par seconde au cours des 5 dernières minutes
freeswitch_max_sessions9090Nombre maximal de sessions autorisées
freeswitch_max_sps9090Nombre maximal de sessions par seconde autorisées

Métriques des Ressources Système

Nom de la métriquePortDescription
freeswitch_current_idle_cpu9090Pourcentage actuel de CPU inactif
freeswitch_min_idle_cpu9090Pourcentage minimum de CPU inactif enregistré
freeswitch_uptime_seconds9090Temps de fonctionnement en secondes
freeswitch_time_synced9090Indique si l'heure système est synchronisée avec l'heure de l'hôte exportateur (1=synchronisé, 0=non synchronisé)

Métriques de Mémoire

Nom de la métriquePortDescription
freeswitch_memory_arena9090Total des bytes non mmappés (arène malloc)
freeswitch_memory_ordblks9090Nombre de morceaux libres
freeswitch_memory_smblks9090Nombre de blocs fastbin libres
freeswitch_memory_hblks9090Nombre de régions mappées
freeswitch_memory_hblkhd9090Bytes dans les régions mappées
freeswitch_memory_usmblks9090Espace total alloué maximum
freeswitch_memory_fsmblks9090Bytes libres détenus dans les fastbins
freeswitch_memory_uordblks9090Espace total alloué
freeswitch_memory_fordblks9090Espace total libre
freeswitch_memory_keepcost9090Bloc le plus haut libérable

Métriques de Statut de Codec

Nom de la métriquePortDescription
freeswitch_codec_status9090Statut du codec avec des étiquettes : ikey (module), name (nom du codec), type (codec). Valeur=1 indique que le codec est disponible

Les Codecs Disponibles Incluent :

  • 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étriques de Statut de Point de Terminaison

Nom de la métriquePortDescription
freeswitch_endpoint_status9090Statut du point de terminaison avec des étiquettes : ikey (module), name (nom du point de terminaison), type (point de terminaison). Valeur=1 indique que le point de terminaison est disponible

Les Points de Terminaison Disponibles Incluent :

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

Métriques de Statut de Module

Nom de la métriquePortDescription
freeswitch_load_module9090Statut de chargement du module (1=chargé, 0=non chargé) avec étiquette : module

Modules Clés Surveillés :

  • mod_sofia (SIP)
  • mod_conference, mod_conference_ims
  • mod_opus, mod_g729, mod_amr, etc.
  • mod_event_socket
  • mod_dptools
  • mod_python3
  • mod_rtc
  • Et bien d'autres...

Métriques d'Inscription

Nom de la métriquePortDescription
freeswitch_registrations9090Nombre total d'inscriptions actives
freeswitch_registration_defails9090Informations d'inscription détaillées avec des étiquettes : expires, hostname, network_ip, network_port, network_proto, realm, reg_user, token, url

Métriques de Passerelle Sofia

Nom de la métriquePortDescription
freeswitch_sofia_gateway_status9090Statut de la passerelle avec des étiquettes : context, name, profile, proxy, scheme, status (UP/DOWN)
freeswitch_sofia_gateway_call_in9090Nombre d'appels entrants via la passerelle
freeswitch_sofia_gateway_call_out9090Nombre d'appels sortants via la passerelle
freeswitch_sofia_gateway_failed_call_in9090Nombre d'appels entrants échoués
freeswitch_sofia_gateway_failed_call_out9090Nombre d'appels sortants échoués
freeswitch_sofia_gateway_ping9090Dernière horodatage de ping (époque Unix)
freeswitch_sofia_gateway_pingtime9090Dernier temps de ping en millisecondes
freeswitch_sofia_gateway_pingfreq9090Fréquence de ping en secondes
freeswitch_sofia_gateway_pingcount9090Nombre de pings envoyés
freeswitch_sofia_gateway_pingmin9090Temps de ping minimum enregistré
freeswitch_sofia_gateway_pingmax9090Temps de ping maximum enregistré

Métriques de Santé de l'Exportateur

Nom de la métriquePortDescription
freeswitch_up9090Indique si le dernier scrape a été réussi (1=succès, 0=échec)
freeswitch_exporter_total_scrapes9090Nombre total de scrapes effectués (compteur)
freeswitch_exporter_failed_scrapes9090Nombre total de scrapes échoués (compteur)

↑ Retour en haut

Port 8080 - Métriques du Moteur TAS

Ces métriques sont exposées par le moteur du Serveur d'Applications Téléphoniques et fournissent des informations sur le traitement des appels, les opérations de base de données et la performance de la VM Erlang.

Métriques d'Appel d'Application

Nom de la métriquePortDescription
call_simulations_total8080Nombre total de simulations d'appels (compteur)
call_attempts_total8080Nombre total de tentatives d'appel (compteur)
call_rejections_total8080Nombre total de rejets d'appels par raison (compteur)
call_param_errors_total8080Nombre total d'erreurs de parsing des paramètres d'appel (compteur)
active_calls8080Nombre d'appels actuellement actifs avec des étiquettes : call_type (mo/mt/emergency)
tracked_call_sessions8080Nombre de sessions d'appel actuellement suivies dans ETS

Métriques du Protocole Diameter

Nom de la métriquePortDescription
diameter_peer_state8080État des pairs Diameter (1=up, 0=down) avec des étiquettes : peer_host, peer_realm, application
diameter_requests_total8080Nombre total de requêtes Diameter (compteur)
diameter_responses_total8080Nombre total de réponses Diameter (compteur)
diameter_response_duration_milliseconds8080Durée des requêtes Diameter en millisecondes (histogramme)

Métriques des Opérations Téléphoniques

Nom de la métriquePortDescription
hlr_lookups_total8080Nombre total de recherches HLR (compteur)
hlr_data_duration_milliseconds8080Durée de la récupération des données HLR en millisecondes (histogramme)
subscriber_data_lookups_total8080Nombre total de recherches de données d'abonnés (compteur)
subscriber_data_duration_milliseconds8080Durée de la récupération des données d'abonnés Sh en millisecondes (histogramme)
ss7_map_operations_total8080Nombre total d'opérations SS7 MAP (compteur)
ss7_map_http_duration_milliseconds8080Durée des requêtes HTTP SS7 MAP en millisecondes (histogramme)
tracked_registrations8080Nombre d'inscriptions SIP actuellement suivies

Métriques du Système de Chargement en Ligne (OCS)

Nom de la métriquePortDescription
ocs_authorization_attempts_total8080Nombre total de tentatives d'autorisation OCS (compteur)
ocs_authorization_duration_milliseconds8080Durée de l'autorisation OCS en millisecondes (histogramme)
online_charging_events_total8080Nombre total d'événements de chargement en ligne (compteur)
authorization_decisions_total8080Nombre total de décisions d'autorisation (compteur)

Métriques de Plan de Numérotation & de Traitement

Nom de la métriquePortDescription
http_requests_total8080Nombre total de requêtes HTTP avec des étiquettes : endpoint, status_code (compteur)
http_dialplan_request_duration_milliseconds8080Durée des requêtes de plan de numérotation HTTP en millisecondes (histogramme)
dialplan_module_duration_milliseconds8080Durée du traitement de chaque module de plan de numérotation (histogramme)
freeswitch_variable_set_duration_milliseconds8080Durée des opérations de définition de variables (histogramme)

Métriques de Socket d'Événement

Nom de la métriquePortDescription
event_socket_connected8080État de la connexion Socket d'Événement (1=connecté, 0=déconnecté) avec étiquette : connection_type
event_socket_reconnections_total8080Nombre total de tentatives de reconnexion Socket d'Événement (compteur)

Métriques de Base de Données Erlang Mnesia

Nom de la métriquePortDescription
erlang_mnesia_held_locks8080Nombre de verrous détenus
erlang_mnesia_lock_queue8080Nombre de transactions attendant un verrou
erlang_mnesia_transaction_participants8080Nombre de transactions participantes
erlang_mnesia_transaction_coordinators8080Nombre de transactions de coordination
erlang_mnesia_failed_transactions8080Nombre de transactions échouées (avortées) (compteur)
erlang_mnesia_committed_transactions8080Nombre de transactions validées (compteur)
erlang_mnesia_logged_transactions8080Nombre de transactions enregistrées (compteur)
erlang_mnesia_restarted_transactions8080Nombre total de redémarrages de transactions (compteur)
erlang_mnesia_memory_usage_bytes8080Total de bytes alloués par toutes les tables mnesia
erlang_mnesia_tablewise_memory_usage_bytes8080Bytes alloués par table mnesia avec étiquette : table
erlang_mnesia_tablewise_size8080Nombre de lignes par table avec étiquette : table

Métriques de Mémoire de la VM Erlang

Nom de la métriquePortDescription
erlang_vm_memory_atom_bytes_total8080Mémoire allouée pour les atomes avec étiquette : usage (used/free)
erlang_vm_memory_bytes_total8080Total de mémoire allouée avec étiquette : kind (system/processes)
erlang_vm_memory_dets_tables8080Nombre de tables DETS
erlang_vm_memory_ets_tables8080Nombre de tables ETS
erlang_vm_memory_processes_bytes_total8080Mémoire allouée pour les processus avec étiquette : usage (used/free)
erlang_vm_memory_system_bytes_total8080Mémoire pour l'émulateur (non liée aux processus) avec étiquette : usage (atom/binary/code/ets/other)

Statistiques de la VM Erlang

Nom de la métriquePortDescription
erlang_vm_statistics_bytes_output_total8080Total de bytes sortis vers les ports (compteur)
erlang_vm_statistics_bytes_received_total8080Total de bytes reçus via les ports (compteur)
erlang_vm_statistics_context_switches8080Total de commutations de contexte depuis le démarrage (compteur)
erlang_vm_statistics_dirty_cpu_run_queue_length8080Longueur de la file d'attente d'exécution CPU sale
erlang_vm_statistics_dirty_io_run_queue_length8080Longueur de la file d'attente d'exécution IO sale
erlang_vm_statistics_garbage_collection_number_of_gcs8080Nombre de collectes de déchets (compteur)
erlang_vm_statistics_garbage_collection_bytes_reclaimed8080Bytes récupérés par le GC (compteur)
erlang_vm_statistics_garbage_collection_words_reclaimed8080Mots récupérés par le GC (compteur)
erlang_vm_statistics_reductions_total8080Total des réductions (compteur)
erlang_vm_statistics_run_queues_length8080Longueur des files d'attente normales
erlang_vm_statistics_runtime_milliseconds8080Somme du temps d'exécution pour tous les threads (compteur)
erlang_vm_statistics_wallclock_time_milliseconds8080Temps réel mesuré (compteur)

Informations Système de la VM Erlang

Nom de la métriquePortDescription
erlang_vm_dirty_cpu_schedulers8080Nombre de threads de planificateur CPU sale
erlang_vm_dirty_cpu_schedulers_online8080Nombre de planificateurs CPU sale en ligne
erlang_vm_dirty_io_schedulers8080Nombre de threads de planificateur IO sale
erlang_vm_ets_limit8080Nombre maximum de tables ETS autorisées
erlang_vm_logical_processors8080Nombre de processeurs logiques configurés
erlang_vm_logical_processors_available8080Nombre de processeurs logiques disponibles
erlang_vm_logical_processors_online8080Nombre de processeurs logiques en ligne
erlang_vm_port_count8080Nombre de ports actuellement existants
erlang_vm_port_limit8080Nombre maximum de ports autorisés
erlang_vm_process_count8080Nombre de processus actuellement existants
erlang_vm_process_limit8080Nombre maximum de processus autorisés
erlang_vm_schedulers8080Nombre de threads de planificateur
erlang_vm_schedulers_online8080Nombre de planificateurs en ligne
erlang_vm_smp_support80801 si compilé avec le support SMP, 0 sinon
erlang_vm_threads80801 si compilé avec le support des threads, 0 sinon
erlang_vm_thread_pool_size8080Nombre de threads asynchrones dans le pool
erlang_vm_time_correction80801 si la correction du temps est activée, 0 sinon
erlang_vm_wordsize_bytes8080Taille des mots de termes Erlang en bytes
erlang_vm_atom_count8080Nombre d'atomes actuellement existants
erlang_vm_atom_limit8080Nombre maximum d'atomes autorisés

Comptabilité des Micro-États de la VM Erlang (MSACC)

Suivi détaillé du temps pour les activités de planificateur avec des étiquettes : type, id

Nom de la métriquePortDescription
erlang_vm_msacc_aux_seconds_total8080Temps passé à gérer des travaux auxiliaires (compteur)
erlang_vm_msacc_check_io_seconds_total8080Temps passé à vérifier de nouveaux événements I/O (compteur)
erlang_vm_msacc_emulator_seconds_total8080Temps passé à exécuter des processus Erlang (compteur)
erlang_vm_msacc_gc_seconds_total8080Temps passé en collecte de déchets (compteur)
erlang_vm_msacc_other_seconds_total8080Temps passé sur des activités non comptabilisées (compteur)
erlang_vm_msacc_port_seconds_total8080Temps passé à exécuter des ports (compteur)
erlang_vm_msacc_sleep_seconds_total8080Temps passé à dormir (compteur)
erlang_vm_msacc_alloc_seconds_total8080Temps passé à gérer la mémoire (compteur)
erlang_vm_msacc_bif_seconds_total8080Temps passé dans les BIFs (compteur)
erlang_vm_msacc_busy_wait_seconds_total8080Temps passé à attendre activement (compteur)
erlang_vm_msacc_ets_seconds_total8080Temps passé dans les BIFs ETS (compteur)
erlang_vm_msacc_gc_full_seconds_total8080Temps passé dans la collecte de déchets complète (compteur)
erlang_vm_msacc_nif_seconds_total8080Temps passé dans les NIFs (compteur)
erlang_vm_msacc_send_seconds_total8080Temps passé à envoyer des messages (compteur)
erlang_vm_msacc_timers_seconds_total8080Temps passé à gérer des temporisateurs (compteur)

Allocateurs de la VM Erlang

Métriques détaillées des allocateurs de mémoire avec des étiquettes : alloc, instance_no, kind, usage

Nom de la métriquePortDescription
erlang_vm_allocators8080Mémoire allouée (carriers_size) et utilisée (blocks_size) pour différents allocateurs. Voir erts_alloc(3).

Les types d'allocateurs incluent : temp_alloc, sl_alloc, std_alloc, ll_alloc, eheap_alloc, ets_alloc, fix_alloc, literal_alloc, binary_alloc, driver_alloc


↑ Retour en haut

Port 9093 - Métriques de Qualité des Médias & d'Appel

Ces métriques fournissent des statistiques RTP/RTCP en temps réel et des informations sur la qualité des appels par canal.

Nom de la métriquePortDescription
freeswitch_info9093Informations système avec étiquette : version
freeswitch_up9093Statut prêt (1=prêt, 0=non prêt)
freeswitch_stack_bytes9093Taille de la pile en bytes
freeswitch_session_total9093Nombre total de sessions
freeswitch_session_active9093Nombre actif de sessions
freeswitch_session_limit9093Limite de session
rtp_channel_info9093Informations sur le canal RTP avec des étiquettes pour les détails du canal

RTP Audio - Compteurs de Bytes

Nom de la métriquePortDescription
rtp_audio_in_raw_bytes_total9093Total de bytes reçus (y compris les en-têtes)
rtp_audio_out_raw_bytes_total9093Total de bytes envoyés (y compris les en-têtes)
rtp_audio_in_media_bytes_total9093Total de bytes médias reçus (seulement le payload)
rtp_audio_out_media_bytes_total9093Total de bytes médias envoy��s (seulement le payload)

RTP Audio - Compteurs de Paquets

Nom de la métriquePortDescription
rtp_audio_in_packets_total9093Total de paquets reçus
rtp_audio_out_packets_total9093Total de paquets envoyés
rtp_audio_in_media_packets_total9093Total de paquets médias reçus
rtp_audio_out_media_packets_total9093Total de paquets médias envoyés
rtp_audio_in_skip_packets_total9093Paquets entrants rejetés
rtp_audio_out_skip_packets_total9093Paquets sortants rejetés

RTP Audio - Types de Paquets Spéciaux

Nom de la métriquePortDescription
rtp_audio_in_jitter_packets_total9093Paquets de tampon de jitter reçus
rtp_audio_in_dtmf_packets_total9093Paquets DTMF reçus
rtp_audio_out_dtmf_packets_total9093Paquets DTMF envoyés
rtp_audio_in_cng_packets_total9093Paquets de génération de bruit de confort reçus
rtp_audio_out_cng_packets_total9093Paquets de génération de bruit de confort envoyés
rtp_audio_in_flush_packets_total9093Paquets vidés (réinitialisations de tampon)

RTP Audio - Jitter & Métriques de Qualité

Nom de la métriquePortDescription
rtp_audio_in_jitter_buffer_bytes_max9093Taille maximale du tampon de jitter en bytes
rtp_audio_in_jitter_seconds_min9093Jitter minimum en secondes
rtp_audio_in_jitter_seconds_max9093Jitter maximum en secondes
rtp_audio_in_jitter_loss_rate9093Taux de perte de paquets dû au jitter (ratio)
rtp_audio_in_jitter_burst_rate9093Taux de rafale de paquets dû au jitter (ratio)
rtp_audio_in_mean_interval_seconds9093Intervalle moyen entre les paquets entrants
rtp_audio_in_flaw_total9093Total des défauts audio détectés (glitches, artefacts)
rtp_audio_in_quality_percent9093Qualité audio en pourcentage (0-100)
rtp_audio_in_quality_mos9093Score d'opinion moyen (1-5, où 5 est le meilleur)

Métriques RTCP

Nom de la métriquePortDescription
rtcp_audio_bytes_total9093Total de bytes RTCP
rtcp_audio_packets_total9093Total de paquets RTCP

Métriques d'Exécution Go

Nom de la métriquePortDescription
go_goroutines9090Nombre de goroutines actuellement en cours d'exécution
go_threads9090Nombre de threads OS créés
go_info9090Informations sur l'environnement Go (avec étiquette de version)
go_gc_duration_seconds9090Durée de pause des cycles de collecte de déchets (résumé)
go_memstats_alloc_bytes9090Nombre de bytes alloués et encore en utilisation
go_memstats_alloc_bytes_total9090Nombre total de bytes alloués (compteur)
go_memstats_heap_alloc_bytes9090Bytes de tas alloués et encore en utilisation
go_memstats_heap_idle_bytes9090Bytes de tas en attente d'utilisation
go_memstats_heap_inuse_bytes9090Bytes de tas actuellement en utilisation
go_memstats_heap_objects9090Nombre d'objets de tas alloués
go_memstats_heap_released_bytes9090Bytes de tas libérés au système
go_memstats_heap_sys_bytes9090Bytes de tas obtenus du système
go_memstats_sys_bytes9090Total de bytes obtenus du système

Métriques de Processus

Nom de la métriquePortDescription
process_cpu_seconds_total9090Temps total CPU utilisateur et système dépensé (compteur)
process_max_fds9090Nombre maximum de descripteurs de fichiers ouverts
process_open_fds9090Nombre actuel de descripteurs de fichiers ouverts
process_resident_memory_bytes9090Taille de la mémoire résidente en bytes
process_virtual_memory_bytes9090Taille de la mémoire virtuelle en bytes
process_virtual_memory_max_bytes9090Montant maximum de mémoire virtuelle disponible
process_start_time_seconds9090Heure de démarrage du processus depuis l'époque Unix

Métriques HTTP Prometheus

Nom de la métriquePortDescription
promhttp_metric_handler_requests_in_flight9090Nombre actuel de scrapes en cours
promhttp_metric_handler_requests_total9090Nombre total de scrapes par code d'état HTTP (compteur)

↑ Retour en haut

Types de Métriques

  • gauge : Une métrique qui peut augmenter ou diminuer (par exemple, current_calls, cpu_idle)
  • counter : Une métrique qui n'augmente que (par exemple, sessions_total, failed_scrapes)
  • summary : Une métrique qui suit les quantiles sur une fenêtre de temps glissante (par exemple, gc_duration_seconds)

↑ Retour en haut

Utilisation

Pour scrapper ces métriques, configurez votre serveur Prometheus pour scrapper les trois points de terminaison :

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

↑ Retour en haut

Exemples de Requêtes

Liens Rapides :

Métriques Générales

Volume d'appels actuel :

freeswitch_current_calls

Santé de la passerelle :

freeswitch_sofia_gateway_status{status="UP"}

Temps de ping moyen vers les passerelles :

avg(freeswitch_sofia_gateway_pingtime)

Taux de sessions par seconde :

freeswitch_current_sps

Utilisation de la mémoire :

freeswitch_memory_uordblks

Métriques de Qualité des Médias

Qualité d'appel (score MOS) :

rtp_audio_in_quality_mos

Pourcentage de qualité audio :

rtp_audio_in_quality_percent

Taux de jitter :

rate(rtp_audio_in_jitter_packets_total[5m])

Taux de perte de paquets :

rtp_audio_in_jitter_loss_rate

Jitter moyen :

avg(rtp_audio_in_jitter_seconds_max - rtp_audio_in_jitter_seconds_min)

Bande passante RTP (entrant) :

rate(rtp_audio_in_media_bytes_total[1m]) * 8

Défauts audio détectés :

increase(rtp_audio_in_flaw_total[5m])

Métriques du Moteur TAS

Appels actifs par type :

active_calls

Santé des pairs Diameter :

diameter_peer_state{application="sh"}

Taux de tentatives d'appel :

rate(call_attempts_total[5m])

Latence de recherche HLR (95e percentile) :

histogram_quantile(0.95, hlr_data_duration_milliseconds)

Latence d'autorisation OCS :

histogram_quantile(0.99, ocs_authorization_duration_milliseconds)

Taux de recherche de données d'abonnés :

rate(subscriber_data_lookups_total[5m])

Taux de succès des requêtes Diameter :

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

Statut de connexion Socket d'Événement :

event_socket_connected

Performance des transactions Mnesia :

rate(erlang_mnesia_committed_transactions[5m])

Taux de transactions échouées Mnesia :

rate(erlang_mnesia_failed_transactions[5m])

Nombre de processus VM Erlang :

erlang_vm_process_count

Utilisation de la mémoire VM Erlang :

erlang_vm_memory_bytes_total

Taux de collecte des déchets :

rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

Longueur de la file d'attente d'exécution du planificateur :

erlang_vm_statistics_run_queues_length

Nombre de tables ETS :

erlang_vm_memory_ets_tables

Durée de la requête de plan de numérotation HTTP (médiane) :

histogram_quantile(0.5, http_dialplan_request_duration_milliseconds)

↑ Retour en haut

Configuration de l'Unité de Temps des Métriques

Important pour les Développeurs :

Toutes les métriques de durée dans ce système utilisent duration_unit: false dans leurs déclarations d'histogramme. C'est critique car :

  1. La bibliothèque Elixir Prometheus détecte automatiquement les noms de métriques se terminant par _milliseconds
  2. Par défaut, elle convertit automatiquement les unités de temps Erlang natives en millisecondes
  3. Notre code convertit déjà le temps en millisecondes en utilisant System.convert_time_unit/3
  4. Sans duration_unit: false, la bibliothèque convertirait les millisecondes en nanosecondes (divisant par ~1,000,000)

Exemple :

# Configuration correcte
Histogram.declare(
name: :http_dialplan_request_duration_milliseconds,
help: "Durée des requêtes de plan de numérotation HTTP en millisecondes",
labels: [:call_type],
buckets: [100, 250, 500, 750, 1000, 1500, 2000, 3000, 5000],
duration_unit: false # REQUIS pour éviter une double conversion
)

# Mesurer le temps correctement
start_time = System.monotonic_time()
# ... faire du travail ...
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)

↑ Retour en haut

Intégration du Tableau de Bord Grafana

Les métriques peuvent être visualisées dans Grafana en utilisant la source de données Prometheus.

Mise en Page Recommandée du Tableau de Bord

Ligne 1 : Volume d'Appels & Santé

  • Jauge des appels actifs (active_calls)
  • Taux de tentatives d'appel par type (rate(call_attempts_total[5m]))
  • Taux de rejet d'appels (rate(call_rejections_total[5m]))
  • Santé de la passerelle (freeswitch_sofia_gateway_status)

Ligne 2 : Performance (Percentiles de Latence)

  • Temps de requête de plan de numérotation HTTP P95 par type d'appel
  • Temps de recherche de données d'abonnés Sh P95
  • Temps de recherche HLR P95
  • Temps d'autorisation OCS P95
  • Temps de réponse Diameter P95 par application

Ligne 3 : Taux de Succès

  • Taux de succès des recherches de données d'abonnés
  • Taux de succès des recherches HLR
  • Taux de succès des autorisations OCS
  • État des pairs Diameter

Ligne 4 : Qualité des Médias

  • Score MOS de qualité d'appel (rtp_audio_in_quality_mos)
  • Pourcentage de qualité audio (rtp_audio_in_quality_percent)
  • Statistiques de jitter
  • Taux de perte de paquets

Ligne 5 : Ressources Système

  • Nombre de processus VM Erlang
  • Utilisation de la mémoire VM Erlang
  • Nombre de tables ETS
  • Longueur de la file d'attente d'exécution du planificateur
  • Taux de collecte des déchets

Ligne 6 : Suivi des Erreurs

  • Erreurs de paramètres d'appel
  • Échecs d'autorisation
  • Statut de connexion Socket d'Événement
  • Échecs de transactions Mnesia

Exemples de Requêtes de Panneau

Appels Actifs par Type :

sum by (call_type) (active_calls)

Latence de Génération de Plan de Numérotation P95 :

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

Taux de Succès Diameter :

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

Qualité des Médias - MOS Moyen :

avg(rtp_audio_in_quality_mos)

↑ Retour en haut

Exemples d'Alerte

Alertes Critiques (Page Immédiatement)

Système Hors Service - Aucune Tentative d'Appel :

alert: SystemDown
expr: rate(call_attempts_total[5m]) == 0
for: 2m
labels:
severity: critical
annotations:
summary: "Le système TAS semble hors service - aucune tentative d'appel"
description: "Aucune tentative d'appel détectée pendant 2 minutes"

Pair Diameter Hors Service :

alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Le pair Diameter {{ $labels.peer_host }} est hors service"
description: "Le pair pour l'application {{ $labels.application }} est indisponible"

Socket d'Événement Déconnecté :

alert: EventSocketDisconnected
expr: event_socket_connected == 0
for: 30s
labels:
severity: critical
annotations:
summary: "Socket d'Événement {{ $labels.connection_type }} déconnecté"
description: "Canal de communication critique hors service"

Alertes de Haute Sévérité

Latence Diameter Élevée :

alert: HighDiameterLatency
expr: |
histogram_quantile(0.95,
rate(diameter_response_duration_milliseconds_bucket[5m])
) > 1000
for: 5m
labels:
severity: high
annotations:
summary: "Latence Diameter élevée détectée"
description: "La latence P95 est de {{ $value }}ms"

Échecs d'Autorisation 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: "Taux élevé de réponses OCS sans crédit"
description: "{{ $value | humanizePercentage }} des demandes ont été refusées de crédit"

Taux de Rejet d'Appels Élevé :

alert: HighCallRejectionRate
expr: |
rate(call_rejections_total[5m]) /
rate(call_attempts_total[5m]) > 0.05
for: 5m
labels:
severity: high
annotations:
summary: "Taux de rejet d'appels supérieur à 5%"
description: "{{ $value | humanizePercentage }} des appels rejetés"

Qualité des Médias Pauvre :

alert: PoorMediaQuality
expr: avg(rtp_audio_in_quality_mos) < 3.5
for: 3m
labels:
severity: high
annotations:
summary: "Qualité d'appel pauvre détectée"
description: "Le score MOS moyen est de {{ $value }}"

Alertes d'Avertissement

Utilisation Élevée de la Mémoire :

alert: HighMemoryUsage
expr: |
erlang_vm_memory_bytes_total{kind="processes"} /
(erlang_vm_process_limit * 1000000) > 0.8
for: 10m
labels:
severity: warning
annotations:
summary: "Utilisation de la mémoire de la VM Erlang élevée"
description: "Mémoire des processus à {{ $value | humanizePercentage }}"

Longueur de la File d'Attente d'Exécution du Planificateur Élevée :

alert: HighSchedulerRunQueue
expr: erlang_vm_statistics_run_queues_length > 10
for: 5m
labels:
severity: warning
annotations:
summary: "Longueur de la file d'attente d'exécution du planificateur élevée"
description: "La longueur de la file d'attente est de {{ $value }}"

Échecs de Transactions Mnesia :

alert: MnesiaTransactionFailures
expr: rate(erlang_mnesia_failed_transactions[5m]) > 1
for: 5m
labels:
severity: warning
annotations:
summary: "Échecs de transactions Mnesia détectés"
description: "{{ $value }} échecs par seconde"

↑ Retour en haut

Dépannage avec les Métriques

Problème : Les métriques affichent des valeurs irréalistes (nanosecondes au lieu de millisecondes)

Symptômes :

  • Valeurs d'histogramme dans les milliards
  • Métriques de latence affichant des valeurs en microsecondes/nanosecondes

Cause : Absence de duration_unit: false dans la déclaration de l'histogramme

Solution : Ajouter duration_unit: false à toutes les déclarations d'histogramme de durée :

Histogram.declare(
name: :my_metric_duration_milliseconds,
# ... autres options ...
duration_unit: false
)

Problème : Les appels sont lents

Étapes d'Investigation :

  1. Vérifiez le temps de génération de plan de numérotation global :
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
  1. Démantelez par composant :
# Recherche de données d'abonnés
histogram_quantile(0.95, rate(subscriber_data_duration_milliseconds_bucket[5m]))

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

# Autorisation OCS
histogram_quantile(0.95, rate(ocs_authorization_duration_milliseconds_bucket[5m]))
  1. Vérifiez les retards spécifiques aux modules :
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)

Causes Courantes :

  • Latence des systèmes externes (HSS, HLR, OCS)
  • Problèmes de réseau
  • Conflit de base de données
  • Charge système élevée

Problème : Les appels échouent

Étapes d'Investigation :

  1. Vérifiez les raisons de rejet d'appels :
sum by (reason) (rate(call_rejections_total[5m]))
  1. Vérifiez les décisions d'autorisation :
sum by (decision) (rate(authorization_decisions_total[5m]))
  1. Vérifiez la santé des pairs Diameter :
diameter_peer_state
  1. Vérifiez la connexion Socket d'Événement :
event_socket_connected

Problème : Charge élevée

Étapes d'Investigation :

  1. Vérifiez le volume d'appels :
rate(call_attempts_total[5m])
active_calls
  1. Vérifiez les ressources de la VM Erlang :
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
  1. Vérifiez la collecte des déchets :
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])

Problème : Qualité des Médias Pauvre

Étapes d'Investigation :

  1. Vérifiez les scores MOS :
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
  1. Vérifiez le jitter :
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
  1. Vérifiez la perte de paquets :
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
  1. Vérifiez l'utilisation de la bande passante :
rate(rtp_audio_in_media_bytes_total[1m]) * 8

↑ Retour en haut

Lignes de Base de Performance

Valeurs Typiques (Système Bien Réglé)

Latence (P95) :

  • Temps de requête de plan de numérotation HTTP : 200-500ms
  • Temps de recherche de données d'abonnés (Sh) : 50-150ms
  • Temps de recherche de données HLR : 100-300ms
  • Temps d'autorisation OCS : 100-250ms
  • Requêtes Diameter : 50-200ms
  • Temps de traitement des modules de plan de numérotation : 10-50ms par module

Taux de Succès :

  • Achèvement des appels : >95%
  • Recherches de données d'abonnés : >99%
  • Recherches HLR : >98%
  • Autorisations OCS : >99% (hors crédits légitimes)
  • Disponibilité des pairs Diameter : >99.9%

Qualité des Médias :

  • Score MOS : >4.0
  • Pourcentage de qualité audio : >80%
  • Jitter : <30ms
  • Taux de perte de paquets : <1%

Ressources Système :

  • Nombre de processus Erlang : <50% de la limite
  • Utilisation de la mémoire Erlang : <70% de disponible
  • File d'attente d'exécution du planificateur : <5
  • Tables ETS : <1000

Planification de Capacité

Capacité par Serveur (maximums recommandés) :

  • Appels simultanés : 500-1000 (dépend du matériel)
  • Appels par seconde : 20-50 CPS
  • Abonnés enregistrés : 10,000-50,000

Indicateurs de Mise à l'Échelle (ajouter de la capacité lorsque) :

  • Appels actifs constamment >70% de la capacité
  • Nombre de processus Erlang >70% de la limite
  • Latence P95 se dégrade
  • Files d'attente de planificateur constamment >10

↑ Retour en haut

Meilleures Pratiques

Stratégie de Surveillance

  1. Mettre en place des tableaux de bord pour différents publics :

    • Tableau de bord des opérations : Volume d'appels, taux de succès, santé du système
    • Tableau de bord d'ingénierie : Percentiles de latence, taux d'erreurs, utilisation des ressources
    • Tableau de bord exécutif : KPI de haut niveau, disponibilité, métriques de coût
  2. Configurer des alertes à plusieurs niveaux :

    • Critique : Page en cas d'appel (système hors service, panne majeure)
    • Élevé : Alerte pendant les heures de bureau (performance dégradée)
    • Avertissement : Suivre dans le système de tickets (problèmes potentiels)
  3. Utiliser des plages de temps appropriées :

    • Surveillance en temps réel : fenêtres de 5 minutes
    • Dépannage : fenêtres de 15 minutes à 1 heure
    • Planification de capacité : agrégats quotidiens/hebdomadaires
  4. Se concentrer sur l'impact utilisateur :

    • Prioriser les métriques de latence de bout en bout
    • Suivre les taux de succès plutôt que les compteurs d'erreurs individuels
    • Surveiller la qualité des médias pour l'expérience utilisateur

Performance des Requêtes

  1. Utiliser des règles d'enregistrement pour les requêtes fréquemment utilisées :
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. Éviter les étiquettes de haute cardinalité dans les requêtes (par exemple, ne pas grouper par numéro de téléphone)

  2. Utiliser des intervalles de taux appropriés :

    • Tendances à court terme : [5m]
    • Tendances à moyen terme : [1h]
    • Tendances à long terme : [1d]

Cardinalité des Métriques

Surveillez la cardinalité pour éviter les problèmes de performance de Prometheus :

# Vérifiez la cardinalité des métriques
count by (__name__) ({__name__=~".+"})

Risques de haute cardinalité :

  • Étiquettes avec des valeurs uniques par appel (numéros de téléphone, ID d'appel)
  • Valeurs d'étiquettes non bornées
  • Étiquettes avec >1000 valeurs uniques

Solution :

  • Utiliser des étiquettes pour les catégories, pas pour les identifiants uniques
  • Agréger les données de haute cardinalité dans des systèmes externes
  • Utiliser des règles d'enregistrement pour pré-agréger

↑ Retour en haut