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
- Port 9090 : Métriques système
- Port 8080 : Métriques du moteur TAS
- Métriques d'appels d'application
- Métriques du protocole Diameter
- Métriques des opérations de téléphonie
- Métriques du système de recharge en ligne (OCS)
- Métriques de plan de numérotation et de traitement
- Métriques de socket d'événements
- Métriques d'utilisation des fonctionnalités
- Métriques de déclenchement SMS
- Métriques de cluster de messagerie vocale
- Métriques de base de données Erlang Mnesia
- Métriques de mémoire de la VM Erlang
- Statistiques de la VM Erlang
- Informations système de la VM Erlang
- Comptabilité des micro-états de la VM Erlang (MSACC)
- Allocateurs de la VM Erlang
- Port 9093 : Métriques de qualité des médias et des appels
- Métriques d'exécution Go
- Métriques de processus
- Métriques HTTP Prometheus
- Types de métriques
- Utilisation
- Exemples de requêtes
- Types de métriques
- Intégration du tableau de bord Grafana
- Exemples d'alerte
- Dépannage avec les métriques
- Lignes de base de performance
- Meilleures pratiques
Points de terminaison des métriques
| Port | Point de terminaison | Objectif | Accéder à la section |
|---|---|---|---|
| 9090 | /metrics | Métriques système, passerelle et téléphonie de base | Port 9090 → |
| 8080 | /metrics | Métriques du moteur TAS, Diameter, HLR, OCS et VM Erlang | Port 8080 → |
| 9093 | /esl?module=default | Qualité des médias RTP/RTCP et statistiques d'appels | Port 9093 → |
Port 9090 : Métriques système
Métriques d'appels et de sessions
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_bridged_calls | 9090 | Nombre d'appels en pont actuellement actifs |
freeswitch_detailed_bridged_calls | 9090 | Nombre d'appels en pont détaillés actifs |
freeswitch_current_calls | 9090 | Nombre d'appels actuellement actifs |
freeswitch_detailed_calls | 9090 | Nombre d'appels détaillés actifs |
freeswitch_current_channels | 9090 | Nombre de canaux actuellement actifs |
freeswitch_current_sessions | 9090 | Nombre de sessions actuellement actives |
freeswitch_current_sessions_peak | 9090 | Nombre maximal de sessions depuis le démarrage |
freeswitch_current_sessions_peak_last_5min | 9090 | Nombre maximal de sessions au cours des 5 dernières minutes |
freeswitch_sessions_total | 9090 | Nombre total de sessions depuis le démarrage (compteur) |
freeswitch_current_sps | 9090 | Sessions actuelles par seconde |
freeswitch_current_sps_peak | 9090 | Sessions maximales par seconde depuis le démarrage |
freeswitch_current_sps_peak_last_5min | 9090 | Sessions maximales par seconde au cours des 5 dernières minutes |
freeswitch_max_sessions | 9090 | Nombre maximal de sessions autorisées |
freeswitch_max_sps | 9090 | Nombre maximal de sessions par seconde autorisées |
Métriques des ressources système
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_current_idle_cpu | 9090 | Pourcentage actuel de CPU inactif |
freeswitch_min_idle_cpu | 9090 | Pourcentage minimum de CPU inactif enregistré |
freeswitch_uptime_seconds | 9090 | Temps de fonctionnement en secondes |
freeswitch_time_synced | 9090 | 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étrique | Port | Description |
|---|---|---|
freeswitch_memory_arena | 9090 | Total des octets non mappés (arène malloc) |
freeswitch_memory_ordblks | 9090 | Nombre de morceaux libres |
freeswitch_memory_smblks | 9090 | Nombre de blocs fastbin libres |
freeswitch_memory_hblks | 9090 | Nombre de régions mappées |
freeswitch_memory_hblkhd | 9090 | Octets dans les régions mappées |
freeswitch_memory_usmblks | 9090 | Espace total alloué maximum |
freeswitch_memory_fsmblks | 9090 | Octets libres détenus dans les fastbins |
freeswitch_memory_uordblks | 9090 | Espace total alloué |
freeswitch_memory_fordblks | 9090 | Espace total libre |
freeswitch_memory_keepcost | 9090 | Bloc le plus haut pouvant être libéré |
Métriques d'état des codecs
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_codec_status | 9090 | État 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 d'état des points de terminaison
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_endpoint_status | 9090 | État 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 d'état des modules
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_load_module | 9090 | État 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'enregistrement
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_registrations | 9090 | Nombre total d'enregistrements actifs |
freeswitch_registration_defails | 9090 | Informations d'enregistrement détaillées avec des étiquettes : expires, hostname, network_ip, network_port, network_proto, realm, reg_user, token, url |
Métriques de la passerelle Sofia
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_sofia_gateway_status | 9090 | État de la passerelle avec des étiquettes : context, name, profile, proxy, scheme, status (UP/DOWN) |
freeswitch_sofia_gateway_call_in | 9090 | Nombre d'appels entrants via la passerelle |
freeswitch_sofia_gateway_call_out | 9090 | Nombre d'appels sortants via la passerelle |
freeswitch_sofia_gateway_failed_call_in | 9090 | Nombre d'appels entrants échoués |
freeswitch_sofia_gateway_failed_call_out | 9090 | Nombre d'appels sortants échoués |
freeswitch_sofia_gateway_ping | 9090 | Dernière horodatage de ping (époque Unix) |
freeswitch_sofia_gateway_pingtime | 9090 | Dernier temps de ping en millisecondes |
freeswitch_sofia_gateway_pingfreq | 9090 | Fréquence de ping en secondes |
freeswitch_sofia_gateway_pingcount | 9090 | Nombre de pings envoyés |
freeswitch_sofia_gateway_pingmin | 9090 | Temps de ping minimum enregistré |
freeswitch_sofia_gateway_pingmax | 9090 | Temps de ping maximum enregistré |
Métriques de santé de l'exportateur
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_up | 9090 | Si le dernier scrape a été réussi (1=succès, 0=échec) |
freeswitch_exporter_total_scrapes | 9090 | Nombre total de scrapes effectués (compteur) |
freeswitch_exporter_failed_scrapes | 9090 | Nombre total de scrapes échoués (compteur) |
Port 8080 : Métriques du moteur TAS
Ces métriques sont exposées par le moteur du serveur d'applications de téléphonie et fournissent des informations sur le traitement des appels, les opérations de base de données et les performances de la VM Erlang.
Métriques d'appels d'application
| Nom de la métrique | Port | Description |
|---|---|---|
call_simulations_total | 8080 | Nombre total de simulations d'appels (compteur) |
call_attempts_total | 8080 | Nombre total de tentatives d'appels (compteur) |
call_rejections_total | 8080 | Nombre total de rejets d'appels par raison (compteur) |
call_param_errors_total | 8080 | Nombre total d'erreurs de parsing des paramètres d'appels (compteur) |
active_calls | 8080 | Nombre d'appels actuellement actifs avec des étiquettes : call_type (mo/mt/emergency) |
tracked_call_sessions | 8080 | Nombre de sessions d'appels actuellement suivies dans ETS |
Métriques du protocole Diameter
| Nom de la métrique | Port | Description |
|---|---|---|
diameter_peer_state | 8080 | État des pairs Diameter (1=up, 0=down) avec des étiquettes : peer_host, peer_realm, application. Pollé toutes les 10s pour chaque pair Ro et Sh configuré. |
diameter_requests_total | 8080 | Nombre total de requêtes Diameter (compteur) avec des étiquettes : application, command |
diameter_responses_total | 8080 | Nombre total de réponses Diameter (compteur) avec des étiquettes : application, command, result_code |
diameter_response_duration_milliseconds | 8080 | Durée des requêtes Diameter en millisecondes (histogramme) avec des étiquettes : application, command, result |
Valeurs des étiquettes application / command :
| application | command | Interface |
|---|---|---|
ro | ccr_i | Credit-Control-Request, INITIAL (mise en place de l'appel) |
ro | ccr_u | Credit-Control-Request, UPDATE (réautorisation intermédiaire) |
ro | ccr_t | Credit-Control-Request, TERMINATION (fin d'appel) |
sh | udr | User-Data-Request |
Remarque : Les métriques de contrôle de crédit Ro sont divisées par type de requête (
ccr_i/ccr_u/ccr_t) afin que les pics dans, par exemple, les mises à jour intermédiaires échouées soient visibles indépendamment de la mise en place/fin. Le chemin Shudrenregistre le nombre de requêtes et la latence (diameter_requests_total/diameter_response_duration_milliseconds) en plus des codes de réponse, correspondant au chemin Ro.result_codeporte le code de résultat Diameter (par exemple,2001) ;0désigne un délai d'attente ou une réponse non analysable. L'étiquetteresultsur l'histogramme de durée est l'une desuccess,nocredit,error, plusunknown_user/no_replypour Sh.
Métriques des opérations de téléphonie
| Nom de la métrique | Port | Description |
|---|---|---|
hlr_lookups_total | 8080 | Nombre total de recherches HLR (compteur) |
hlr_data_duration_milliseconds | 8080 | Durée de la récupération des données HLR en millisecondes (histogramme) |
subscriber_data_lookups_total | 8080 | Nombre total de recherches de données d'abonnés (compteur) |
subscriber_data_duration_milliseconds | 8080 | Durée de la récupération des données d'abonnés Sh en millisecondes (histogramme) |
ss7_map_operations_total | 8080 | Nombre total d'opérations SS7 MAP (compteur) |
ss7_map_http_duration_milliseconds | 8080 | Durée des requêtes HTTP SS7 MAP en millisecondes (histogramme) |
tracked_registrations | 8080 | Nombre d'enregistrements SIP actuellement suivis |
Métriques du système de recharge en ligne (OCS)
| Nom de la métrique | Port | Description |
|---|---|---|
ocs_authorization_attempts_total | 8080 | Nombre total de tentatives d'autorisation OCS (compteur) |
ocs_authorization_duration_milliseconds | 8080 | Durée de l'autorisation OCS en millisecondes (histogramme) |
online_charging_events_total | 8080 | Nombre total d'événements de recharge en ligne (compteur) avec des étiquettes : event_type, result |
authorization_decisions_total | 8080 | Nombre total de décisions d'autorisation (compteur) |
ro_charging_quota_seconds | 8080 | Quota de contrôle de crédit Ro en secondes (histogramme) avec des étiquettes : request_type (ccr_i/ccr_u/ccr_t), kind (requested/granted/used) |
Étiquettes de online_charging_events_total :
- event_type :
authorize,answer,reauth,hangup,credit_exhaustion_hangup,hangup_rescheduled - result :
success,nocredit,timeout,error,triggered
ro_charging_quota_seconds — quota observé sur chaque CCR :
kind="requested"— réservation demandée sur CCR-I/CCR-U (Requested-Service-UnitCC-Time)kind="granted"— quota que l'OCS a approuvé dans le CCA (Granted-Service-UnitCC-Time ;0= pas de crédit)kind="used"— unités rapportées comme consommées sur CCR-T (Used-Service-UnitCC-Time)
Comparer granted par rapport à used expose une sur- ou sous-réservation et est le principal signal de correction de facturation pour l'interface Ro.
Métriques de plan de numérotation et de traitement
| Nom de la métrique | Port | Description |
|---|---|---|
http_requests_total | 8080 | Nombre total de requêtes HTTP avec des étiquettes : endpoint, status_code (compteur) |
http_dialplan_request_duration_milliseconds | 8080 | Durée des requêtes de plan de numérotation HTTP en millisecondes (histogramme) |
dialplan_module_duration_milliseconds | 8080 | Durée du traitement des modules de plan de numérotation individuels (histogramme) |
freeswitch_variable_set_duration_milliseconds | 8080 | Durée des opérations de définition de variables (histogramme) |
Métriques de socket d'événements
| Nom de la métrique | Port | Description |
|---|---|---|
event_socket_connected | 8080 | État de la connexion de socket d'événements (1=connecté, 0=déconnecté) avec étiquette : connection_type |
event_socket_reconnections_total | 8080 | Nombre total de tentatives de reconnexion de socket d'événements (compteur) avec des étiquettes : connection_type, result |
event_socket_commands_total | 8080 | Nombre total de commandes de socket d'événements exécutées (compteur) avec des étiquettes : command_type, result |
event_socket_command_timeouts_total | 8080 | Nombre total de délais d'attente de commandes de socket d'événements (compteur) avec étiquette : command_type |
Types de commandes suivis :
- uuid_setvar, uuid_dump, uuid_kill, uuid_transfer
- uuid_set_media_stats
- sched_hangup, sched_transfer
- vm_boxcount
- status, echo, show, sofia
Valeurs de résultat :
- success : La commande s'est terminée avec succès
- timeout : La commande a dépassé le seuil de délai d'attente
- error : La commande a renvoyé une réponse inattendue
Métriques d'utilisation des fonctionnalités
| Nom de la métrique | Port | Description |
|---|---|---|
feature_invocations_total | 8080 | Nombre total d'invocations de fonctionnalités TAS (compteur) avec des étiquettes : feature, call_type, result |
feature_data_source_total | 8080 | Nombre total d'utilisations de sources de données de fonctionnalités (compteur) avec des étiquettes : feature, source |
Fonctionnalités :
call_forward_all- Transfert d'appel inconditionnelcall_forward_not_reachable- Transfert d'appel lorsque l'abonné n'est pas joignablecall_forward_no_reply- Transfert d'appel en cas de non-réponsecall_barring- Interdiction d'appel basée sur l'OCS (crédit insuffisant)cli_withheld- Confidentialité/sélection CLI
Types d'appels : mo, mt
Sources de données : sh_interface, hlr, config_fallback
Valeurs de résultat : success, error, skipped
Métriques de déclenchement SMS
| Nom de la métrique | Port | Description |
|---|---|---|
sms_trigger_attempts_total | 8080 | Nombre total de tentatives de déclenchement SMS (compteur) avec des étiquettes : trigger_type, result |
sms_trigger_errors_total | 8080 | Nombre total d'erreurs de déclenchement SMS (compteur) avec des étiquettes : trigger_type, error_stage |
smsc_requests_total | 8080 | Nombre total de requêtes HTTP SMSC (compteur) avec des étiquettes : message_type, result |
Types de déclencheurs : voicemail_deposit, voicemail_clear
Étapes d'erreur : vm_boxcount, template_render, smsc_request
Types de messages : notification, mwi
Valeurs de résultat : success, error
Métriques de cluster de messagerie vocale
Émis uniquement lorsque le clustering de messagerie vocale multi-TAS est configuré (config :tas, voicemail: %{cluster: ...}). Dans un cluster, une demande de boîte aux lettres se propage à chaque TAS pair ; ce compteur enregistre un pair qui a expiré ou a échoué afin que les conditions de sous-comptage et de messages manquants puissent être alertées plutôt que tolérées silencieusement.
| Nom de la métrique | Port | Description |
|---|---|---|
voicemail_cluster_fanout_errors_total | 8080 | Échecs de propagation de pairs de cluster de messagerie vocale (compteur) avec étiquette : operation |
Opérations : count, messages, media, greeting, mark_read, delete, clear_greeting, clear_mailbox
Utilisation :
# Taux d'erreur de propagation de cluster par opération
sum by (operation) (rate(voicemail_cluster_fanout_errors_total[5m]))
Alerte lorsque :
- Erreurs soutenues > 0 — un TAS pair est inaccessible, donc les vues de boîte aux lettres inter-nœuds peuvent être incomplètes
Métriques de base de données Erlang Mnesia
| Nom de la métrique | Port | Description |
|---|---|---|
erlang_mnesia_held_locks | 8080 | Nombre de verrous détenus |
erlang_mnesia_lock_queue | 8080 | Nombre de transactions en attente d'un verrou |
erlang_mnesia_transaction_participants | 8080 | Nombre de transactions participantes |
erlang_mnesia_transaction_coordinators | 8080 | Nombre de transactions de coordinateurs |
erlang_mnesia_failed_transactions | 8080 | Nombre de transactions échouées (avortées) (compteur) |
erlang_mnesia_committed_transactions | 8080 | Nombre de transactions validées (compteur) |
erlang_mnesia_logged_transactions | 8080 | Nombre de transactions enregistrées (compteur) |
erlang_mnesia_restarted_transactions | 8080 | Nombre total de redémarrages de transactions (compteur) |
erlang_mnesia_memory_usage_bytes | 8080 | Total des octets alloués par toutes les tables mnesia |
erlang_mnesia_tablewise_memory_usage_bytes | 8080 | Octets alloués par table mnesia avec étiquette : table |
erlang_mnesia_tablewise_size | 8080 | Nombre de lignes par table avec étiquette : table |
Métriques de mémoire de la VM Erlang
| Nom de la métrique | Port | Description |
|---|---|---|
erlang_vm_memory_atom_bytes_total | 8080 | Mémoire allouée pour les atomes avec étiquette : usage (used/free) |
erlang_vm_memory_bytes_total | 8080 | Total de la mémoire allouée avec étiquette : kind (system/processes) |
erlang_vm_memory_dets_tables | 8080 | Nombre de tables DETS |
erlang_vm_memory_ets_tables | 8080 | Nombre de tables ETS |
erlang_vm_memory_processes_bytes_total | 8080 | Mémoire allouée pour les processus avec étiquette : usage (used/free) |
erlang_vm_memory_system_bytes_total | 8080 | Mé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étrique | Port | Description |
|---|---|---|
erlang_vm_statistics_bytes_output_total | 8080 | Total des octets sortants vers les ports (compteur) |
erlang_vm_statistics_bytes_received_total | 8080 | Total des octets reçus via les ports (compteur) |
erlang_vm_statistics_context_switches | 8080 | Total des changements de contexte depuis le démarrage (compteur) |
erlang_vm_statistics_dirty_cpu_run_queue_length | 8080 | Longueur de la file d'attente d'exécution CPU sale |
erlang_vm_statistics_dirty_io_run_queue_length | 8080 | Longueur de la file d'attente d'exécution IO sale |
erlang_vm_statistics_garbage_collection_number_of_gcs | 8080 | Nombre de collectes de déchets (compteur) |
erlang_vm_statistics_garbage_collection_bytes_reclaimed | 8080 | Octets récupérés par le GC (compteur) |
erlang_vm_statistics_garbage_collection_words_reclaimed | 8080 | Mots récupérés par le GC (compteur) |
erlang_vm_statistics_reductions_total | 8080 | Total des réductions (compteur) |
erlang_vm_statistics_run_queues_length | 8080 | Longueur des files d'attente normales |
erlang_vm_statistics_runtime_milliseconds | 8080 | Somme du temps d'exécution pour tous les threads (compteur) |
erlang_vm_statistics_wallclock_time_milliseconds | 8080 | Temps réel mesuré (compteur) |
Informations système de la VM Erlang
| Nom de la métrique | Port | Description |
|---|---|---|
erlang_vm_dirty_cpu_schedulers | 8080 | Nombre de threads de planification CPU sale |
erlang_vm_dirty_cpu_schedulers_online | 8080 | Nombre de planificateurs CPU sales en ligne |
erlang_vm_dirty_io_schedulers | 8080 | Nombre de threads de planification I/O sale |
erlang_vm_ets_limit | 8080 | Nombre maximal de tables ETS autorisées |
erlang_vm_logical_processors | 8080 | Nombre de processeurs logiques configurés |
erlang_vm_logical_processors_available | 8080 | Nombre de processeurs logiques disponibles |
erlang_vm_logical_processors_online | 8080 | Nombre de processeurs logiques en ligne |
erlang_vm_port_count | 8080 | Nombre de ports actuellement existants |
erlang_vm_port_limit | 8080 | Nombre maximal de ports autorisés |
erlang_vm_process_count | 8080 | Nombre de processus actuellement existants |
erlang_vm_process_limit | 8080 | Nombre maximal de processus autorisés |
erlang_vm_schedulers | 8080 | Nombre de threads de planification |
erlang_vm_schedulers_online | 8080 | Nombre de planificateurs en ligne |
erlang_vm_smp_support | 8080 | 1 si compilé avec support SMP, 0 sinon |
erlang_vm_threads | 8080 | 1 si compilé avec support des threads, 0 sinon |
erlang_vm_thread_pool_size | 8080 | Nombre de threads asynchrones dans le pool |
erlang_vm_time_correction | 8080 | 1 si la correction de l'heure est activée, 0 sinon |
erlang_vm_wordsize_bytes | 8080 | Taille des mots de termes Erlang en octets |
erlang_vm_atom_count | 8080 | Nombre d'atomes actuellement existants |
erlang_vm_atom_limit | 8080 | Nombre maximal d'atomes autorisés |
Comptabilité des micro-états de la VM Erlang (MSACC)
Suivi détaillé du temps pour les activités de planification avec des étiquettes : type, id
| Nom de la métrique | Port | Description |
|---|---|---|
erlang_vm_msacc_aux_seconds_total | 8080 | Temps passé à gérer des travaux auxiliaires (compteur) |
erlang_vm_msacc_check_io_seconds_total | 8080 | Temps passé à vérifier les nouveaux événements I/O (compteur) |
erlang_vm_msacc_emulator_seconds_total | 8080 | Temps passé à exécuter des processus Erlang (compteur) |
erlang_vm_msacc_gc_seconds_total | 8080 | Temps passé en collecte de déchets (compteur) |
erlang_vm_msacc_other_seconds_total | 8080 | Temps passé sur des activités non comptabilisées (compteur) |
erlang_vm_msacc_port_seconds_total | 8080 | Temps passé à exécuter des ports (compteur) |
erlang_vm_msacc_sleep_seconds_total | 8080 | Temps passé à dormir (compteur) |
erlang_vm_msacc_alloc_seconds_total | 8080 | Temps passé à gérer la mémoire (compteur) |
erlang_vm_msacc_bif_seconds_total | 8080 | Temps passé dans les BIFs (compteur) |
erlang_vm_msacc_busy_wait_seconds_total | 8080 | Temps passé à attendre activement (compteur) |
erlang_vm_msacc_ets_seconds_total | 8080 | Temps passé dans les BIFs ETS (compteur) |
erlang_vm_msacc_gc_full_seconds_total | 8080 | Temps passé dans le GC fullsweep (compteur) |
erlang_vm_msacc_nif_seconds_total | 8080 | Temps passé dans les NIFs (compteur) |
erlang_vm_msacc_send_seconds_total | 8080 | Temps passé à envoyer des messages (compteur) |
erlang_vm_msacc_timers_seconds_total | 8080 | Temps passé à gérer des minuteries (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étrique | Port | Description |
|---|---|---|
erlang_vm_allocators | 8080 | Mé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
Port 9093 : Métriques de qualité des médias et des appels
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étrique | Port | Description |
|---|---|---|
freeswitch_info | 9093 | Informations système avec étiquette : version |
freeswitch_up | 9093 | État prêt (1=prêt, 0=non prêt) |
freeswitch_stack_bytes | 9093 | Taille de la pile en octets |
freeswitch_session_total | 9093 | Nombre total de sessions |
freeswitch_session_active | 9093 | Nombre actif de sessions |
freeswitch_session_limit | 9093 | Limite de session |
rtp_channel_info | 9093 | Informations sur le canal RTP avec des étiquettes pour les détails du canal |
RTP Audio : Compteurs de bytes
| Nom de la métrique | Port | Description |
|---|---|---|
rtp_audio_in_raw_bytes_total | 9093 | Total des octets reçus (y compris les en-têtes) |
rtp_audio_out_raw_bytes_total | 9093 | Total des octets envoyés (y compris les en-têtes) |
rtp_audio_in_media_bytes_total | 9093 | Total des octets médias reçus (charge utile uniquement) |
rtp_audio_out_media_bytes_total | 9093 | Total des octets médias envoyés (charge utile uniquement) |
RTP Audio : Compteurs de paquets
| Nom de la métrique | Port | Description |
|---|---|---|
rtp_audio_in_packets_total | 9093 | Total des paquets reçus |
rtp_audio_out_packets_total | 9093 | Total des paquets envoyés |
rtp_audio_in_media_packets_total | 9093 | Total des paquets médias reçus |
rtp_audio_out_media_packets_total | 9093 | Total des paquets médias envoyés |
rtp_audio_in_skip_packets_total | 9093 | Paquets entrants rejetés |
rtp_audio_out_skip_packets_total | 9093 | Paquets sortants rejetés |
RTP Audio : Types de paquets spéciaux
| Nom de la métrique | Port | Description |
|---|---|---|
rtp_audio_in_jitter_packets_total | 9093 | Paquets du tampon de jitter reçus |
rtp_audio_in_dtmf_packets_total | 9093 | Paquets DTMF reçus |
rtp_audio_out_dtmf_packets_total | 9093 | Paquets DTMF envoyés |
rtp_audio_in_cng_packets_total | 9093 | Paquets de génération de bruit de confort reçus |
rtp_audio_out_cng_packets_total | 9093 | Paquets de génération de bruit de confort envoyés |
rtp_audio_in_flush_packets_total | 9093 | Paquets vidés (réinitialisations de tampon) |
RTP Audio : Jitter et métriques de qualité
| Nom de la métrique | Port | Description |
|---|---|---|
rtp_audio_in_jitter_buffer_bytes_max | 9093 | Plus grande taille de tampon de jitter en octets |
rtp_audio_in_jitter_seconds_min | 9093 | Jitter minimum en secondes |
rtp_audio_in_jitter_seconds_max | 9093 | Jitter maximum en secondes |
rtp_audio_in_jitter_loss_rate | 9093 | Taux de perte de paquets dû au jitter (ratio) |
rtp_audio_in_jitter_burst_rate | 9093 | Taux de rafale de paquets dû au jitter (ratio) |
rtp_audio_in_mean_interval_seconds | 9093 | Intervalle moyen entre les paquets entrants |
rtp_audio_in_flaw_total | 9093 | Total des défauts audio détectés (glitch, artefacts) |
rtp_audio_in_quality_percent | 9093 | Qualité audio en pourcentage (0-100) |
rtp_audio_in_quality_mos | 9093 | Score d'opinion moyen (1-5, où 5 est le meilleur) |
Métriques RTCP
| Nom de la métrique | Port | Description |
|---|---|---|
rtcp_audio_bytes_total | 9093 | Total des octets RTCP |
rtcp_audio_packets_total | 9093 | Total des paquets RTCP |
Métriques d'exécution Go
| Nom de la métrique | Port | Description |
|---|---|---|
go_goroutines | 9090 | Nombre de goroutines actuellement en cours d'exécution |
go_threads | 9090 | Nombre de threads OS créés |
go_info | 9090 | Informations sur l'environnement Go (avec étiquette de version) |
go_gc_duration_seconds | 9090 | Durée de pause des cycles de collecte de déchets (synthèse) |
go_memstats_alloc_bytes | 9090 | Nombre d'octets alloués et encore utilisés |
go_memstats_alloc_bytes_total | 9090 | Nombre total d'octets alloués (compteur) |
go_memstats_heap_alloc_bytes | 9090 | Octets de tas alloués et encore utilisés |
go_memstats_heap_idle_bytes | 9090 | Octets de tas en attente d'utilisation |
go_memstats_heap_inuse_bytes | 9090 | Octets de tas actuellement utilisés |
go_memstats_heap_objects | 9090 | Nombre d'objets de tas alloués |
go_memstats_heap_released_bytes | 9090 | Octets de tas libérés au système |
go_memstats_heap_sys_bytes | 9090 | Octets de tas obtenus du système |
go_memstats_sys_bytes | 9090 | Nombre total d'octets obtenus du système |
Métriques de processus
| Nom de la métrique | Port | Description |
|---|---|---|
process_cpu_seconds_total | 9090 | Temps total CPU utilisateur et système dépensé (compteur) |
process_max_fds | 9090 | Nombre maximal de descripteurs de fichiers ouverts |
process_open_fds | 9090 | Nombre actuel de descripteurs de fichiers ouverts |
process_resident_memory_bytes | 9090 | Taille de la mémoire résidente en octets |
process_virtual_memory_bytes | 9090 | Taille de la mémoire virtuelle en octets |
process_virtual_memory_max_bytes | 9090 | Montant maximal de mémoire virtuelle disponible |
process_start_time_seconds | 9090 | Heure de démarrage du processus depuis l'époque Unix |
Métriques HTTP Prometheus
| Nom de la métrique | Port | Description |
|---|---|---|
promhttp_metric_handler_requests_in_flight | 9090 | Nombre actuel de scrapes en cours |
promhttp_metric_handler_requests_total | 9090 | Nombre total de scrapes par code d'état HTTP (compteur) |
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)
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']
Exemples de requêtes
Liens rapides :
- Métriques générales (Port 9090)
- Métriques de qualité des médias (Port 9093)
- Métriques du moteur TAS (Port 8080)
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é des appels (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'appels :
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])
Taux de CCR par type de requête (détecter les pics dans les mises à jour intermédiaires) :
sum by (command) (rate(diameter_requests_total{application="ro"}[5m]))
Taux d'erreur CCR, par type de requête :
sum by (command) (rate(diameter_responses_total{application="ro", result_code!="2001"}[5m]))
Latence P95 Sh (UDR) :
histogram_quantile(0.95, rate(diameter_response_duration_milliseconds_bucket{application="sh"}[5m]))
Quota de contrôle de crédit accordé médian lors de la mise en place d'un appel :
histogram_quantile(0.5, rate(ro_charging_quota_seconds_bucket{request_type="ccr_i", kind="granted"}[5m]))
Accords sans crédit (allocations de zéro seconde) par seconde :
rate(ro_charging_quota_seconds_bucket{kind="granted", le="0"}[5m])
État de connexion du socket d'événements :
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 de la VM Erlang :
erlang_vm_process_count
Utilisation de la mémoire de la 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 des requêtes de plan de numérotation HTTP (médiane) :
histogram_quantile(0.5, http_dialplan_request_duration_milliseconds)
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'appels 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 de recherche de données d'abonnés
- Taux de succès de recherche HLR
- Taux de succès d'autorisation 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 de la VM Erlang
- Utilisation de la mémoire de la 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'appels
- Échecs d'autorisation
- État de connexion du socket d'événements
- É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)
Exemples d'alerte
Alertes critiques (Page immédiatement)
Système hors ligne - 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 ligne - aucune tentative d'appel"
description: "Aucune tentative d'appel détectée pendant 2 minutes"
Pair Diameter hors ligne :
alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Le pair Diameter {{ $labels.peer_host }} est hors ligne"
description: "Pair pour l'application {{ $labels.application }} est indisponible"
Socket d'événements déconnecté :
alert: EventSocketDisconnected
expr: event_socket_connected == 0
for: 30s
labels:
severity: critical
annotations:
summary: "Socket d'événements {{ $labels.connection_type }} déconnecté"
description: "Canal de communication critique hors ligne"
Alertes de haute gravité
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 {{ $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'appel é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'appel supérieur à 5%"
description: "{{ $value | humanizePercentage }} des appels ont été rejetés"
Mauvaise qualité des médias :
alert: PoorMediaQuality
expr: avg(rtp_audio_in_quality_mos) < 3.5
for: 3m
labels:
severity: high
annotations:
summary: "Mauvaise qualité d'appel détectée"
description: "Le score MOS moyen est {{ $value }}"
Alertes d'avertissement
Utilisation de la mémoire élevée :
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: "Longueur de la file d'attente est {{ $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"
Dépannage avec les métriques
Problème : Les appels sont lents
Étapes d'investigation :
- Vérifiez le temps de génération global du plan de numérotation :
histogram_quantile(0.95, rate(http_dialplan_request_duration_milliseconds_bucket[5m]))
- Décomposez 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]))
- 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 :
- Vérifiez les raisons de rejet des appels :
sum by (reason) (rate(call_rejections_total[5m]))
- Vérifiez les décisions d'autorisation :
sum by (decision) (rate(authorization_decisions_total[5m]))
- Vérifiez la santé des pairs Diameter :
diameter_peer_state
- Vérifiez la connexion du socket d'événements :
event_socket_connected
Problème : Charge élevée
Étapes d'investigation :
- Vérifiez le volume d'appels :
rate(call_attempts_total[5m])
active_calls
- Vérifiez les ressources de la VM Erlang :
erlang_vm_process_count
erlang_vm_statistics_run_queues_length
erlang_vm_memory_bytes_total
- Vérifiez la collecte des déchets :
rate(erlang_vm_statistics_garbage_collection_number_of_gcs[5m])
Problème : Mauvaise qualité des médias
Étapes d'investigation :
- Vérifiez les scores MOS :
rtp_audio_in_quality_mos
rtp_audio_in_quality_percent
- Vérifiez le jitter :
rtp_audio_in_jitter_seconds_max
rtp_audio_in_jitter_loss_rate
- Vérifiez la perte de paquets :
rtp_audio_in_skip_packets_total
rtp_audio_in_flaw_total
- Vérifiez l'utilisation de la bande passante :
rate(rtp_audio_in_media_bytes_total[1m]) * 8
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 (Sh) d'abonnés : 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 sans)
- 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
Meilleures pratiques
Stratégie de surveillance
-
Configurer 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'erreur, utilisation des ressources
- Tableau de bord exécutif : KPI de haut niveau, disponibilité, métriques de coût
-
Configurer des alertes à plusieurs niveaux :
- Critique : Page en cas d'appel (système hors ligne, panne majeure)
- Élevé : Alerte pendant les heures de bureau (performance dégradée)
- Avertissement : Suivre dans le système de tickets (problèmes potentiels)
-
Utiliser des plages horaires 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
-
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'erreur individuels
- Surveiller la qualité des médias pour l'expérience utilisateur
Performance des requêtes
- 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]))
-
Éviter les étiquettes à haute cardinalité dans les requêtes (par exemple, ne pas grouper par numéro de téléphone)
-
Utiliser des intervalles de taux appropriés :
- Tendances à court terme :
[5m] - Tendances à moyen terme :
[1h] - Tendances à long terme :
[1d]
- Tendances à court terme :
Cardinalité des métriques
Surveiller la cardinalité pour éviter les problèmes de performance de Prometheus :
# Vérifier 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, IDs d'appels)
- Valeurs d'étiquettes non bornées
- Étiquettes avec >1000 valeurs uniques
Solution :
- Utiliser des étiquettes pour des catégories, pas pour des identifiants uniques
- Agréger les données à haute cardinalité dans des systèmes externes
- Utiliser des règles d'enregistrement pour pré-agréger