Aller au contenu principal

Guide des métriques et de la surveillance Prometheus

Aperçu

OmniTAS exporte des métriques opérationnelles complètes au format Prometheus pour la surveillance, l'alerte et l'observabilité. Ce guide couvre toutes les métriques disponibles, leur utilisation, le dépannage et les meilleures pratiques de surveillance.

Point de terminaison des métriques

Toutes les métriques sont exposées à : http://<tas-ip>:8080/metrics

Référence complète des métriques

Métriques Diameter

diameter_response_duration_milliseconds

Type : Histogramme
Étiquettes : application (ro, sh), command (ccr, cca, etc), result (success, error, timeout)
Seaux : 10, 50, 100, 250, 500, 1000, 2500, 5000, 10000 ms
Description : Durée des requêtes Diameter en millisecondes

Utilisation :

# Temps de réponse moyen de Diameter
rate(diameter_response_duration_milliseconds_sum[5m]) /
rate(diameter_response_duration_milliseconds_count[5m])

# Latence P95 de Diameter
histogram_quantile(0.95, rate(diameter_response_duration_milliseconds_bucket[5m]))

Alerte lorsque :

  • P95 > 1000ms - Réponses Diameter lentes

diameter_requests_total

Type : Compteur
Étiquettes : application (ro, sh), command (ccr, udr, etc)
Description : Nombre total de requêtes Diameter envoyées

Utilisation :

# Taux de requêtes
rate(diameter_requests_total[5m])

diameter_responses_total

Type : Compteur
Étiquettes : application (ro, sh), command (ccr, udr, etc), result_code (2001, 3002, 5xxx, etc)
Description : Nombre total de réponses Diameter reçues

Utilisation :

# Taux de succès
rate(diameter_responses_total{result_code="2001"}[5m]) /
rate(diameter_responses_total[5m]) * 100

diameter_peer_state

Type : Jauge
Étiquettes : peer_host, peer_realm, application (ro, sh)
Description : État des pairs Diameter (1=up, 0=down)
Intervalle de mise à jour : Toutes les 10 secondes

Utilisation :

# Vérifier les pairs hors ligne
diameter_peer_state == 0

Alerte lorsque :

  • Un pair est hors ligne pendant > 1 minute

Métriques de génération de plan de numérotation

1. Métriques de requêtes HTTP

http_dialplan_request_duration_milliseconds

Type : Histogramme
Étiquettes : call_type (mt, mo, emergency, unknown)
Description : Durée de la requête HTTP de bout en bout depuis la réception de la requête HTTP du plan de numérotation jusqu'à l'envoi de la réponse. Cela inclut tout le traitement : analyse des paramètres, autorisation, recherches Diameter (Sh/Ro), recherches HLR (SS7 MAP) et génération XML.

Utilisation :

# Temps moyen de requête HTTP de bout en bout
rate(http_dialplan_request_duration_milliseconds_sum[5m]) /
rate(http_dialplan_request_duration_milliseconds_count[5m])

# P95 par type d'appel
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket[5m])
) by (call_type)

# Comparer les performances MT vs MO
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket{call_type="mt"}[5m])
)
vs
histogram_quantile(0.95,
rate(http_dialplan_request_duration_milliseconds_bucket{call_type="mo"}[5m])
)

Alerte lorsque :

  • P95 > 2000ms - Temps de réponse HTTP lents
  • P95 > 3000ms - Problème de performance critique
  • P99 > 5000ms - Dégradation sévère de la performance
  • Toute requête affichant call_type="unknown" - Échec de la détection du type d'appel

Aperçus :

  • C'est la métrique la plus importante pour comprendre la latence côté utilisateur
  • Valeurs typiques : P50 : 100-500ms, P95 : 500-2000ms, P99 : 1000-3000ms
  • Inclut tous les temps des composants (Sh + HLR + OCS + traitement)
  • Si cela est lent, approfondir les métriques des composants (subscriber_data, hlr_data, ocs_authorization)
  • Plage attendue : 100ms (appels locaux rapides) à 5000ms (lents avec réessais/délai d'attente)

Notes importantes :

  • Remplace l'ancienne métrique dialplan_generation_duration_milliseconds qui mesurait uniquement la génération XML
  • Reflète avec précision ce que FreeSWITCH/SBC expérimente
  • Utilisez ceci pour la surveillance SLA et la planification de capacité

2. Métriques de données d'abonnés

subscriber_data_duration_milliseconds

Type : Histogramme
Étiquettes : result (success, error)
Description : Temps nécessaire pour récupérer les données de l'abonné depuis l'interface Sh (HSS)

Utilisation :

# Temps moyen de recherche Sh
rate(subscriber_data_duration_milliseconds_sum[5m]) /
rate(subscriber_data_duration_milliseconds_count[5m])

# Temps de recherche Sh au 95e percentile
histogram_quantile(0.95,
rate(subscriber_data_duration_milliseconds_bucket[5m])
)

Alerte lorsque :

  • P95 > 100ms - Réponses HSS lentes
  • P95 > 500ms - Problème de performance critique HSS

subscriber_data_lookups_total

Type : Compteur
Étiquettes : result (success, error)
Description : Nombre total de recherches de données d'abonnés

Utilisation :

# Taux de recherche Sh
rate(subscriber_data_lookups_total[5m])

# Taux d'erreur Sh
rate(subscriber_data_lookups_total{result="error"}[5m])

# Pourcentage de taux de succès Sh
(rate(subscriber_data_lookups_total{result="success"}[5m]) /
rate(subscriber_data_lookups_total[5m])) * 100

Alerte lorsque :

  • Taux d'erreur > 5% - Problèmes de connectivité HSS
  • Taux d'erreur > 20% - Échec critique HSS

2. Métriques de données HLR

hlr_data_duration_milliseconds

Type : Histogramme
Étiquettes : result (success, error)
Description : Temps nécessaire pour récupérer les données HLR via SS7 MAP

Utilisation :

# Temps moyen de recherche HLR
rate(hlr_data_duration_milliseconds_sum[5m]) /
rate(hlr_data_duration_milliseconds_count[5m])

# Temps de recherche HLR au 95e percentile
histogram_quantile(0.95,
rate(hlr_data_duration_milliseconds_bucket[5m])
)

Alerte lorsque :

  • P95 > 500ms - Réponses SS7 MAP lentes
  • P95 > 2000ms - Problème critique SS7 MAP

hlr_lookups_total

Type : Compteur
Étiquettes : result_type (msrn, forwarding, error, unknown)
Description : Nombre total de recherches HLR par type de résultat

Utilisation :

# Taux de recherche HLR par type
rate(hlr_lookups_total[5m])

# Taux de découverte MSRN (abonnés en itinérance)
rate(hlr_lookups_total{result_type="msrn"}[5m])

# Taux de découverte de renvoi d'appel
rate(hlr_lookups_total{result_type="forwarding"}[5m])

# Taux d'erreur HLR
rate(hlr_lookups_total{result_type="error"}[5m])

Alerte lorsque :

  • Taux d'erreur > 10% - Problèmes SS7 MAP
  • Chute soudaine du taux MSRN - Problème d'itinérance possible

Aperçus :

  • Un taux MSRN élevé indique de nombreux abonnés en itinérance
  • Un taux de renvoi élevé indique de nombreux appels renvoyés
  • Comparer au volume d'appels pour le pourcentage d'itinérance

3. Métriques d'autorisation OCS

ocs_authorization_duration_milliseconds

Type : Histogramme
Étiquettes : result (success, error)
Description : Temps nécessaire pour l'autorisation OCS

Utilisation :

# Temps moyen d'authentification OCS
rate(ocs_authorization_duration_milliseconds_sum[5m]) /
rate(ocs_authorization_duration_milliseconds_count[5m])

# Temps d'authentification OCS au 95e percentile
histogram_quantile(0.95,
rate(ocs_authorization_duration_milliseconds_bucket[5m])
)

Alerte lorsque :

  • P95 > 1000ms - Réponses OCS lentes
  • P95 > 5000ms - Problème de performance critique OCS

ocs_authorization_attempts_total

Type : Compteur
Étiquettes : result (success, error), skipped (yes, no)
Description : Nombre total de tentatives d'autorisation OCS

Utilisation :

# Taux d'autorisation OCS
rate(ocs_authorization_attempts_total{skipped="no"}[5m])

# Taux d'erreur OCS
rate(ocs_authorization_attempts_total{result="error",skipped="no"}[5m])

# Taux de saut OCS (urgence, messagerie vocale, etc.)
rate(ocs_authorization_attempts_total{skipped="yes"}[5m])

# Pourcentage de taux de succès OCS
(rate(ocs_authorization_attempts_total{result="success",skipped="no"}[5m]) /
rate(ocs_authorization_attempts_total{skipped="no"}[5m])) * 100

Alerte lorsque :

  • Taux d'erreur > 5% - Problèmes de connectivité OCS
  • Taux de succès < 95% - OCS refusant trop d'appels

Aperçus :

  • Un taux de saut élevé indique de nombreux appels d'urgence/gratuits
  • Les pics de taux d'erreur indiquent des pannes OCS
  • Comparer le taux de succès aux attentes commerciales

4. Métriques de traitement des appels

call_param_errors_total

Type : Compteur
Étiquettes : error_type (parse_failed, missing_required_params)
Description : Erreurs de parsing des paramètres d'appel

Utilisation :

# Taux d'erreurs de paramètres
rate(call_param_errors_total[5m])

# Erreurs par type
rate(call_param_errors_total[5m]) by (error_type)

Alerte lorsque :

  • Toute erreur > 0 - Indique des requêtes de paramètres d'appel mal formées
  • Erreurs > 1% du volume d'appels - Problème critique

authorization_decisions_total

Type : Compteur
Étiquettes : disposition (mt, mo, emergency, unauthorized), result (success, error)
Description : Décisions d'autorisation par type d'appel

Utilisation :

# Taux d'autorisation par disposition
rate(authorization_decisions_total[5m]) by (disposition)

# Taux d'appels MT
rate(authorization_decisions_total{disposition="mt"}[5m])

# Taux d'appels MO
rate(authorization_decisions_total{disposition="mo"}[5m])

# Taux d'appels d'urgence
rate(authorization_decisions_total{disposition="emergency"}[5m])

# Taux d'appels non autorisés
rate(authorization_decisions_total{disposition="unauthorized"}[5m])

Alerte lorsque :

  • Taux non autorisé > 1% - Possible attaque ou mauvaise configuration
  • Pic soudain d'appels d'urgence - Événement d'urgence possible
  • Changement inattendu dans le ratio MT/MO - Problème possible

Aperçus :

  • Le ratio MT/MO indique les modèles de trafic
  • Le taux d'appels d'urgence indique l'utilisation du service
  • Le taux non autorisé indique la posture de sécurité

freeswitch_variable_set_duration_milliseconds

Type : Histogramme
Étiquettes : batch_size (1, 5, 10, 25, 50, 100)
Description : Temps pour définir les variables de plan de numérotation

Utilisation :

# Temps moyen de définition des variables
rate(freeswitch_variable_set_duration_milliseconds_sum[5m]) /
rate(freeswitch_variable_set_duration_milliseconds_count[5m])

# Temps de définition des variables par taille de lot
histogram_quantile(0.95,
rate(freeswitch_variable_set_duration_milliseconds_bucket[5m])
) by (batch_size)

Alerte lorsque :

  • P95 > 100ms - Performance de définition des variables lente
  • Tendance croissante - Problème de performance système possible

5. Métriques de traitement des modules

dialplan_module_duration_milliseconds

Type : Histogramme
Étiquettes : module (MT, MO, Urgence, CallParams, etc.), call_type
Description : Temps de traitement pour chaque module de plan de numérotation

Utilisation :

# Temps de traitement par module
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket[5m])
) by (module)

# Temps de traitement du module MT
histogram_quantile(0.95,
rate(dialplan_module_duration_milliseconds_bucket{module="MT"}[5m])
)

Alerte lorsque :

  • Tout module P95 > 500ms - Problème de performance
  • Tendance croissante dans n'importe quel module - Fuite ou problème potentiel

Aperçus :

  • Identifier quel module est le plus lent
  • Optimiser d'abord les modules les plus lents
  • Comparer les temps des modules selon les types d'appels

6. Métriques de volume d'appels

call_attempts_total

Type : Compteur
Étiquettes : call_type (mt, mo, emergency, unauthorized), result (success, rejected)
Description : Nombre total de tentatives d'appels

Utilisation :

# Taux de tentatives d'appels
rate(call_attempts_total[5m])

# Taux de succès par type d'appel
(rate(call_attempts_total{result="success"}[5m]) /
rate(call_attempts_total[5m])) * 100 by (call_type)

# Taux d'appels rejetés
rate(call_attempts_total{result="rejected"}[5m])

Alerte lorsque :

  • Taux rejeté > 5% - Problème possible
  • Chute soudaine du volume d'appels - Panne de service
  • Pic soudain du volume d'appels - Possible attaque

active_calls

Type : Jauge
Étiquettes : call_type (mt, mo, emergency)
Description : Appels actuellement actifs

Utilisation :

# Appels actifs actuels
active_calls

# Appels actifs par type
active_calls by (call_type)

# Pic d'appels actifs (dernière heure)
max_over_time(active_calls[1h])

Alerte lorsque :

  • Appels actifs > capacité - Surcharge
  • Appels actifs = 0 pendant une période prolongée - Service hors ligne

7. Métriques de simulation

call_simulations_total

Type : Compteur
Étiquettes : call_type (mt, mo, emergency, unauthorized), source (web, api)
Description : Simulations d'appels exécutées

Utilisation :

# Taux de simulation
rate(call_simulations_total[5m])

# Simulations par type
rate(call_simulations_total[5m]) by (call_type)

Aperçus :

  • Suivre l'utilisation des outils de diagnostic
  • Identifier les utilisateurs lourds
  • Corréler avec l'activité de dépannage

8. Métriques SS7 MAP

ss7_map_http_duration_milliseconds

Type : Histogramme
Étiquettes : operation (sri, prn), result (success, error, timeout)
Seaux : 10, 50, 100, 250, 500, 1000, 2500, 5000, 10000 ms
Description : Durée des requêtes HTTP SS7 MAP en millisecondes

Utilisation :

# Taux d'erreur SS7 MAP
rate(ss7_map_operations_total{result="error"}[5m]) /
rate(ss7_map_operations_total[5m]) * 100

Alerte lorsque :

  • P95 > 500ms - Réponses SS7 MAP lentes
  • Taux d'erreur > 50% - Problème critique SS7 MAP

ss7_map_operations_total

Type : Compteur
Étiquettes : operation (sri, prn), result (success, error)
Description : Nombre total d'opérations SS7 MAP

9. Métriques de facturation en ligne

online_charging_events_total

Type : Compteur
Étiquettes : event_type (authorize, answer, reauth, hangup), result (success, nocredit, error, timeout)
Description : Nombre total d'événements de facturation en ligne

Utilisation :

# Échecs de crédit OCS
rate(online_charging_events_total{result="nocredit"}[5m])

Alerte lorsque :

  • Taux élevé d'échecs de crédit

10. Métriques d'état du système

tracked_registrations

Type : Jauge
Description : Nombre d'enregistrements SIP actuellement actifs (à partir de la base de données d'enregistrement Sofia de FreeSWITCH)
Intervalle de mise à jour : Toutes les 10 secondes

Notes :

  • Se décrémente automatiquement lorsque les enregistrements expirent (FreeSWITCH gère l'expiration)

tracked_call_sessions

Type : Jauge
Description : Nombre de sessions d'appels actuellement suivies dans ETS
Intervalle de mise à jour : Toutes les 10 secondes

11. Métriques de requêtes HTTP

http_requests_total

Type : Compteur
Étiquettes : endpoint (dialplan, call_event, directory, voicemail, sms_ccr, metrics), status_code (200, 400, 500, etc)
Description : Nombre total de requêtes HTTP par point de terminaison

Utilisation :

# Taux d'erreur HTTP
rate(http_requests_total{status_code=~"5.."}[5m]) /
rate(http_requests_total[5m]) * 100

Alerte lorsque :

  • Taux d'erreur HTTP 5xx > 10%

12. Métriques de rejet d'appels

call_rejections_total

Type : Compteur
Étiquettes : call_type (mo, mt, emergency, unknown), reason (nocredit, unauthorized, parse_failed, missing_params, hlr_error, etc)
Description : Nombre total de rejets d'appels par raison

Utilisation :

# Taux de rejet d'appels par raison
sum by (reason) (rate(call_rejections_total[5m]))

Alerte lorsque :

  • Taux de rejet > 1/sec - Enquête nécessaire

13. Métriques de connexion de socket d'événements

event_socket_connected

Type : Jauge
Étiquettes : connection_type (main, log_listener)
Description : État de la connexion Socket d'événements (1=connecté, 0=déconnecté)
Intervalle de mise à jour : Temps réel sur les changements d'état de connexion

Utilisation :

# Statut de connexion Socket d'événements
event_socket_connected

Alerte lorsque :

  • Connexion hors ligne pendant > 30 secondes

event_socket_reconnections_total

Type : Compteur
Étiquettes : connection_type (main, log_listener), result (attempting, success, failed)
Description : Nombre total de tentatives de reconnexion Socket d'événements

Intégration du tableau de bord Grafana

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

Tableau de bord 1 : Volume d'appels

  • Jauge des appels actifs
  • Taux de tentatives d'appels par type (MO/MT/Urgent)
  • Taux de rejet d'appels

Tableau de bord 2 : Performance Diameter

  • Carte thermique du temps de réponse
  • Taux de requêtes/réponses
  • Tableau d'état des pairs
  • Taux d'erreur par code de résultat

Tableau de bord 3 : Santé de la facturation en ligne

  • Taux de succès d'autorisation de crédit
  • Taux d'événements "Pas de crédit"
  • Taux de délai d'attente OCS

Tableau de bord 4 : Performance du système

  • Latence de génération de plan de numérotation (P50/P95/P99)
  • Temps de réponse SS7 MAP
  • Disponibilité globale du système

Mise en page recommandée du tableau de bord Grafana

Ligne 1 : Volume d'appels

  • Taux de tentatives d'appels (par type)
  • Jauge des appels actifs
  • Pourcentage de taux de succès

Ligne 2 : Performance

  • Temps de requête HTTP P95 du plan de numérotation (par type d'appel) - MÉTRIQUE PRINCIPALE
  • Temps de recherche Sh P95
  • Temps de recherche HLR P95
  • Temps d'autorisation OCS P95
  • Temps de traitement du module de plan de numérotation P95 (par module)

Ligne 3 : Taux de succès

  • Taux de succès de recherche Sh
  • Taux de succès de recherche HLR
  • Taux de succès d'autorisation OCS
  • Taux de succès des tentatives d'appels

Ligne 4 : Performance des modules

  • Temps de traitement P95 par module
  • Comptes d'appels par module

Ligne 5 : Erreurs

  • Erreurs de paramètres
  • Tentatives non autorisées
  • Erreurs Sh
  • Erreurs HLR
  • Erreurs OCS

Alertes critiques

Priorité 1 (Page immédiatement) :

# Plan de numérotation complètement hors ligne
rate(call_attempts_total[5m]) == 0

# HSS complètement hors ligne
rate(subscriber_data_lookups_total{result="error"}[5m]) /
rate(subscriber_data_lookups_total[5m]) > 0.9

# OCS complètement hors ligne
rate(ocs_authorization_attempts_total{result="error"}[5m]) /
rate(ocs_authorization_attempts_total[5m]) > 0.9

Priorité 2 (Alerte) :

# Génération de plan de numérotation lente
histogram_quantile(0.95,
rate(dialplan_generation_duration_milliseconds_bucket[5m])
) > 1000

# Taux d'erreur HSS élevé
rate(subscriber_data_lookups_total{result="error"}[5m]) /
rate(subscriber_data_lookups_total[5m]) > 0.2

# Taux d'erreur OCS élevé
rate(ocs_authorization_attempts_total{result="error"}[5m]) /
rate(ocs_authorization_attempts_total[5m]) > 0.1

Priorité 3 (Avertissement) :

# Latence HSS élevée
histogram_quantile(0.95,
rate(subscriber_data_duration_milliseconds_bucket[5m])
) > 100

# Latence OCS élevée
histogram_quantile(0.95,
rate(ocs_authorization_duration_milliseconds_bucket[5m])
) > 1000

# Taux d'erreur modéré
rate(call_attempts_total{result="rejected"}[5m]) /
rate(call_attempts_total[5m]) > 0.05

Exemples d'alerte

Pair Diameter hors ligne

alert: DiameterPeerDown
expr: diameter_peer_state == 0
for: 1m
annotations:
summary: "Le pair Diameter {{ $labels.peer_host }} est hors ligne"

Latence Diameter élevée

alert: HighDiameterLatency
expr: histogram_quantile(0.95, rate(diameter_response_duration_milliseconds_bucket[5m])) > 1000
for: 5m
annotations:
summary: "Latence P95 Diameter au-dessus de 1s"

Échecs de crédit OCS

alert: HighOCSCreditFailures
expr: rate(online_charging_events_total{result="nocredit"}[5m]) > 0.1
for: 2m
annotations:
summary: "Taux élevé d'échecs de crédit OCS"

Erreurs de passerelle SS7 MAP

alert: SS7MapErrors
expr: rate(ss7_map_operations_total{result="error"}[5m]) / rate(ss7_map_operations_total[5m]) > 0.5
for: 3m
annotations:
summary: "Taux d'erreur SS7 MAP au-dessus de 50%"

Socket d'événements déconnecté

alert: EventSocketDown
expr: event_socket_connected == 0
for: 30s
annotations:
summary: "Socket d'événements {{ $labels.connection_type }} déconnecté"

Taux de rejet d'appels élevé

alert: HighCallRejectionRate
expr: rate(call_rejections_total[5m]) > 1
for: 2m
annotations:
summary: "Taux de rejet d'appels élevé : {{ $value }} rejets/sec"

Taux d'erreur HTTP élevé

alert: HighHTTPErrorRate
expr: rate(http_requests_total{status_code=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.1
for: 3m
annotations:
summary: "Taux d'erreur HTTP 5xx au-dessus de 10%"

Dépannage avec les métriques

Problème : Type d'appel affiché comme "inconnu"

Symptômes :

  • Toutes les métriques affichent call_type="unknown" au lieu de mt, mo ou emergency
  • Impossible de différencier la performance entre les types d'appels

Cause racine : L'extraction du type d'appel échoue ou n'est pas correctement transmise à travers le pipeline de traitement.

Enquête :

  1. Vérifiez les journaux pour les messages "requête HTTP de plan de numérotation" - ils devraient montrer le bon type d'appel
  2. Passez en revue les journaux système pour les erreurs de traitement du type d'appel

Résolution : Contactez le support si la détection du type d'appel continue d'échouer.

Problème : Les appels sont lents

Enquête :

  1. Vérifiez P95 de http_dialplan_request_duration_milliseconds - COMMENCEZ ICI
  2. Si élevé, vérifiez les temps des composants :
    • Vérifiez subscriber_data_duration_milliseconds pour les retards Sh
    • Vérifiez hlr_data_duration_milliseconds pour les retards HLR
    • Vérifiez ocs_authorization_duration_milliseconds pour les retards OCS
    • Vérifiez dialplan_module_duration_milliseconds pour les retards spécifiques aux modules
  3. Vérifiez si call_type="unknown" - indique un échec de détection du type d'appel
  4. Comparez les temps de traitement MT vs MO vs Urgence
  5. Corrélez avec les journaux système pour des messages d'erreur détaillés

Résolution : Optimisez le composant le plus lent

Problème : Les appels échouent

Enquête :

  1. Vérifiez le taux de call_attempts_total{result="rejected"}
  2. Vérifiez subscriber_data_lookups_total{result="error"} pour les problèmes Sh
  3. Vérifiez hlr_lookups_total{result_type="error"} pour les problèmes HLR
  4. Vérifiez ocs_authorization_attempts_total{result="error"} pour les problèmes OCS
  5. Vérifiez authorization_decisions_total{disposition="unauthorized"} pour les problèmes d'authentification

Résolution : Réparez le composant défaillant

Problème : Charge élevée

Enquête :

  1. Vérifiez la valeur actuelle de active_calls
  2. Vérifiez le taux de call_attempts_total
  3. Vérifiez si le taux correspond au trafic attendu
  4. Comparez le ratio MT/MO
  5. Vérifiez les modèles inhabituels (pics, croissance stable)

Résolution : Augmentez ou enquêtez sur un trafic inhabituel

Problème : Problèmes d'itinérance

Enquête :

  1. Vérifiez le taux de hlr_lookups_total{result_type="msrn"}
  2. Vérifiez hlr_data_duration_milliseconds pour les retards
  3. Utilisez l'outil de recherche HLR pour des abonnés spécifiques
  4. Vérifiez si MSRN est récupéré correctement

Résolution : Réparez la connectivité ou la configuration HLR

Bases de référence de performance

Valeurs typiques (système bien réglé)

  • Requête de plan de numérotation HTTP (de bout en bout) : P50 : 100-500ms, P95 : 500-2000ms, P99 : 1000-3000ms
  • Temps de recherche Sh : P50 : 15ms, P95 : 50ms, P99 : 100ms
  • Temps de recherche HLR : P50 : 100ms, P95 : 300ms, P99 : 800ms
  • Temps d'authentification OCS : P50 : 150ms, P95 : 500ms, P99 : 1500ms
  • Traitement du module de plan de numérotation : P50 : 1-5ms, P95 : 10-25ms, P99 : 50ms
  • Taux de succès Sh : > 99%
  • Taux de succès HLR : > 95% (plus bas est normal en raison des abonnés hors ligne)
  • Taux de succès OCS : > 98%
  • Taux de succès des appels : > 99%

Remarque : Le temps de requête HTTP du plan de numérotation est la somme de tous les temps des composants plus les frais généraux. Il devrait être approximativement égal à : recherche Sh + recherche HLR + authentification OCS + traitement du module de plan de numérotation + frais généraux réseau/analyse. Le temps minimum attendu est d'environ 100ms (lorsque seule la recherche Sh est nécessaire), le temps maximum typique est d'environ 2000ms (avec toutes les recherches et réessais).

Planification de capacité

Surveillez ces tendances :

  • Croissance du taux de call_attempts_total
  • Croissance du pic d'active_calls
  • Latences P95 stables ou améliorées
  • Taux de succès stables ou améliorés

Planifiez l'échelle lorsque :

  • Les appels actifs approchent 80% de la capacité
  • Les latences P95 augmentent malgré une charge stable
  • Les taux de succès diminuent malgré des systèmes externes stables

Intégration avec la journalisation

Corrélez les métriques avec les journaux :

  1. Taux d'erreur élevé dans les métriques → Recherchez les messages d'ERREUR dans les journaux
  2. Temps de réponse lents → Recherchez les messages d'AVERTISSEMENT dans les journaux concernant les délais d'attente
  3. Problèmes d'appels spécifiques → Recherchez dans les journaux par ID d'appel ou numéro de téléphone
  4. Utilisez l'outil de simulation pour reproduire et déboguer

Meilleures pratiques

  1. Configurez les tableaux de bord avant que les problèmes ne surviennent
  2. Définissez les seuils d'alerte en fonction de votre base de référence
  3. Testez les alertes en utilisant le simulateur d'appels
  4. Examinez les métriques chaque semaine pour identifier les tendances
  5. Corrélez les métriques avec des événements commerciaux (campagnes, pannes, etc.)
  6. Utilisez les métriques pour justifier les investissements en infrastructure
  7. Partagez les tableaux de bord avec l'équipe des opérations
  8. Documentez vos procédures de réponse aux alertes

Configuration

La collecte des métriques est automatiquement activée lorsque l'application démarre. Le point de terminaison des métriques est exposé sur le même port que l'API (par défaut : 8080).

Pour configurer Prometheus afin de récupérer les métriques, ajoutez ce travail à votre prometheus.yml :

scrape_configs:
- job_name: 'omnitas'
static_configs:
- targets: ['<tas-ip>:8080']
metrics_path: '/metrics'
scrape_interval: 10s

Cardinalité des métriques

Les métriques sont conçues avec une cardinalité contrôlée pour éviter de submerger Prometheus :

  • Étiquettes de pair : Limitées uniquement aux pairs configurés
  • Types d'appels : Ensemble fixe (mo, mt, emergency, unauthorized)
  • Codes de résultat : Limité aux codes de résultat Diameter/OCS réellement reçus
  • Opérations : Ensemble fixe par interface (sri/prn pour MAP, ccr/cca pour Diameter)

Total estimé de séries temporelles : ~200-500 en fonction du nombre de pairs configurés et de codes de résultat actifs.

Rétention des métriques

Périodes de rétention recommandées :

  • Métriques brutes : 30 jours (haute résolution)
  • Agrégats de 5 minutes : 90 jours
  • Agrégats d'une heure : 1 an
  • Agrégats quotidiens : 5 ans

Cela soutient :

  • Dépannage en temps réel (métriques brutes)
  • Analyse hebdomadaire/mensuelle (agrégats de 5 min/1 heure)
  • Planification de capacité (agrégats quotidiens)
  • Comparaison historique (agrégats annuels)