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'Appel d'Application
- Métriques du Protocole Diameter
- Métriques des Opérations T��léphoniques
- Métriques du Système de Chargement en Ligne (OCS)
- Métriques de Plan de Numérotation & de Traitement
- Métriques de Socket d'Événement
- 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 & d'Appel
- Métriques d'Exécution Go
- Métriques de Processus
- Métriques HTTP Prometheus
- Types de Métriques
- Utilisation
- Exemples de Requêtes
- Configuration de l'Unité de Temps des 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 | Aller à la section |
|---|---|---|---|
| 9090 | /metrics | Métriques système, passerelle et téléphonie de base | Port 9090 → |
| 8080 | /metrics | Métriques moteur TAS, Diameter, HLR, OCS et VM Erlang | Port 8080 → |
| 9093 | /esl?module=default | Qualité des médias RTP/RTCP et statistiques d'appel | Port 9093 → |
Port 9090 - Métriques Système
Métriques d'Appel et de Session
| 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 | Indique 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 bytes non mmappé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 | Bytes dans les régions mappées |
freeswitch_memory_usmblks | 9090 | Espace total alloué maximum |
freeswitch_memory_fsmblks | 9090 | Bytes 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 libérable |
Métriques de Statut de Codec
| Nom de la métrique | Port | Description |
|---|---|---|
freeswitch_codec_status | 9090 | Statut 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étrique | Port | Description |
|---|---|---|
freeswitch_endpoint_status | 9090 | Statut 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étrique | Port | Description |
|---|---|---|
freeswitch_load_module | 9090 | Statut 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étrique | Port | Description |
|---|---|---|
freeswitch_registrations | 9090 | Nombre total d'inscriptions actives |
freeswitch_registration_defails | 9090 | Informations 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étrique | Port | Description |
|---|---|---|
freeswitch_sofia_gateway_status | 9090 | Statut 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 | Indique 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 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étrique | Port | Description |
|---|---|---|
call_simulations_total | 8080 | Nombre total de simulations d'appels (compteur) |
call_attempts_total | 8080 | Nombre total de tentatives d'appel (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'appel (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'appel 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 |
diameter_requests_total | 8080 | Nombre total de requêtes Diameter (compteur) |
diameter_responses_total | 8080 | Nombre total de réponses Diameter (compteur) |
diameter_response_duration_milliseconds | 8080 | Durée des requêtes Diameter en millisecondes (histogramme) |
Métriques des Opérations Téléphoniques
| 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'inscriptions SIP actuellement suivies |
Métriques du Système de Chargement 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 chargement en ligne (compteur) |
authorization_decisions_total | 8080 | Nombre total de décisions d'autorisation (compteur) |
Métriques de Plan de Numérotation & 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 de chaque module de plan de numérotation (histogramme) |
freeswitch_variable_set_duration_milliseconds | 8080 | Durée des opérations de définition de variables (histogramme) |
Métriques de Socket d'Événement
| Nom de la métrique | Port | Description |
|---|---|---|
event_socket_connected | 8080 | État de la connexion Socket d'Événement (1=connecté, 0=déconnecté) avec étiquette : connection_type |
event_socket_reconnections_total | 8080 | Nombre total de tentatives de reconnexion Socket d'Événement (compteur) |
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 attendant un verrou |
erlang_mnesia_transaction_participants | 8080 | Nombre de transactions participantes |
erlang_mnesia_transaction_coordinators | 8080 | Nombre de transactions de coordination |
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 de bytes alloués par toutes les tables mnesia |
erlang_mnesia_tablewise_memory_usage_bytes | 8080 | Bytes 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 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 de bytes sortis vers les ports (compteur) |
erlang_vm_statistics_bytes_received_total | 8080 | Total de bytes reçus via les ports (compteur) |
erlang_vm_statistics_context_switches | 8080 | Total de commutations 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 | Bytes 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 planificateur CPU sale |
erlang_vm_dirty_cpu_schedulers_online | 8080 | Nombre de planificateurs CPU sale en ligne |
erlang_vm_dirty_io_schedulers | 8080 | Nombre de threads de planificateur IO sale |
erlang_vm_ets_limit | 8080 | Nombre maximum 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 maximum de ports autorisés |
erlang_vm_process_count | 8080 | Nombre de processus actuellement existants |
erlang_vm_process_limit | 8080 | Nombre maximum de processus autorisés |
erlang_vm_schedulers | 8080 | Nombre de threads de planificateur |
erlang_vm_schedulers_online | 8080 | Nombre de planificateurs en ligne |
erlang_vm_smp_support | 8080 | 1 si compilé avec le support SMP, 0 sinon |
erlang_vm_threads | 8080 | 1 si compilé avec le 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 du temps est activée, 0 sinon |
erlang_vm_wordsize_bytes | 8080 | Taille des mots de termes Erlang en bytes |
erlang_vm_atom_count | 8080 | Nombre d'atomes actuellement existants |
erlang_vm_atom_limit | 8080 | Nombre 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é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 de 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 la collecte de déchets complète (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 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é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 & 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étrique | Port | Description |
|---|---|---|
freeswitch_info | 9093 | Informations système avec étiquette : version |
freeswitch_up | 9093 | Statut prêt (1=prêt, 0=non prêt) |
freeswitch_stack_bytes | 9093 | Taille de la pile en bytes |
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 de bytes reçus (y compris les en-têtes) |
rtp_audio_out_raw_bytes_total | 9093 | Total de bytes envoyés (y compris les en-têtes) |
rtp_audio_in_media_bytes_total | 9093 | Total de bytes médias reçus (seulement le payload) |
rtp_audio_out_media_bytes_total | 9093 | Total de bytes médias envoy��s (seulement le payload) |
RTP Audio - Compteurs de Paquets
| Nom de la métrique | Port | Description |
|---|---|---|
rtp_audio_in_packets_total | 9093 | Total de paquets reçus |
rtp_audio_out_packets_total | 9093 | Total de paquets envoyés |
rtp_audio_in_media_packets_total | 9093 | Total de paquets médias reçus |
rtp_audio_out_media_packets_total | 9093 | Total de 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 de 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 & Métriques de Qualité
| Nom de la métrique | Port | Description |
|---|---|---|
rtp_audio_in_jitter_buffer_bytes_max | 9093 | Taille maximale du tampon de jitter en bytes |
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 (glitches, 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 de bytes RTCP |
rtcp_audio_packets_total | 9093 | Total de 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 (résumé) |
go_memstats_alloc_bytes | 9090 | Nombre de bytes alloués et encore en utilisation |
go_memstats_alloc_bytes_total | 9090 | Nombre total de bytes alloués (compteur) |
go_memstats_heap_alloc_bytes | 9090 | Bytes de tas alloués et encore en utilisation |
go_memstats_heap_idle_bytes | 9090 | Bytes de tas en attente d'utilisation |
go_memstats_heap_inuse_bytes | 9090 | Bytes de tas actuellement en utilisation |
go_memstats_heap_objects | 9090 | Nombre d'objets de tas alloués |
go_memstats_heap_released_bytes | 9090 | Bytes de tas libérés au système |
go_memstats_heap_sys_bytes | 9090 | Bytes de tas obtenus du système |
go_memstats_sys_bytes | 9090 | Total de bytes 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 maximum 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 bytes |
process_virtual_memory_bytes | 9090 | Taille de la mémoire virtuelle en bytes |
process_virtual_memory_max_bytes | 9090 | Montant maximum 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é 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)
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 :
- La bibliothèque Elixir Prometheus détecte automatiquement les noms de métriques se terminant par
_milliseconds - Par défaut, elle convertit automatiquement les unités de temps Erlang natives en millisecondes
- Notre code convertit déjà le temps en millisecondes en utilisant
System.convert_time_unit/3 - 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)
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)
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"
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 :
- 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]))
- 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]))
- 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 d'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 Socket d'Événement :
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 : Qualité des Médias Pauvre
É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 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
Meilleures Pratiques
Stratégie de Surveillance
-
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
-
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)
-
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
-
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
- 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 de 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
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