Aller au contenu principal

Documentation des métriques Prometheus de SMS-C

← Retour à l'index de documentation

Aperçu​

Ce document décrit toutes les métriques Prometheus exposées par le système SMS-C. Ces métriques sont conçues pour le personnel opérationnel afin de surveiller la santé du système, les performances et de résoudre les problèmes.

Accès aux métriques​

Le point de terminaison des métriques Prometheus est disponible à l'adresse :

http://localhost:9568/metrics

Ce point de terminaison expose des métriques au format texte Prometheus que le serveur Prometheus peut récupérer. Le système met à jour les métriques en temps réel au fur et à mesure qu'il traite les messages.

Convention de nommage des métriques​

Toutes les métriques suivent le modèle : sms_c.<category>.<metric_name>.<type>

Catégories :

  • license - Métriques de statut de licence
  • message - Métriques de traitement des messages
  • routing - Métriques de décision de routage
  • enum - Métriques de recherche ENUM/NAPTR
  • delivery - Métriques de livraison des messages
  • queue - Métriques de gestion de la file d'attente
  • charging - Métriques de facturation
  • mnesia - Métriques de base de données
  • frontend - Métriques de connexion frontend
  • location - Métriques de localisation/enregistrement
  • phoenix.endpoint - Métriques de requêtes API HTTP
  • vm - Métriques système de la VM Erlang

Métriques de licence​

sms_c_license_status​

Type : Gauge

Description : Statut actuel de la licence du système SMS-C OmniMessage.

Valeurs :

  • 1 - Licence valide
  • 0 - Licence invalide/expirée

Labels : Aucun

Nom du produit : omnimessage

Cas d'utilisation : Surveiller la validité de la licence pour s'assurer que le système fonctionne avec une licence valide. Lorsqu'elle est invalide, les messages sont toujours reçus mais routés vers la destination "NOLICENCE" au lieu du routage normal.

Comportement lorsque la licence est invalide :

  • Les messages entrants sont acceptés et stockés
  • La destination du message (dest_smsc) est automatiquement définie sur "NOLICENCE"
  • Le routage normal est contourné
  • L'interface utilisateur et la surveillance restent accessibles
  • La base de données et tous les services restent opérationnels

Alerting :

- alert: SMS_C_License_Invalid
expr: sms_c_license_status == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Licence SMS-C invalide ou expirée"
description: "Le statut de la licence est invalide - les messages sont routés vers NOLICENCE"

Exemples de requêtes Prometheus :

# Vérifier si la licence est valide
sms_c_license_status == 1

# Alerte sur licence invalide
sms_c_license_status == 0

# Compter les messages routés vers NOLICENCE (indique un problème de licence)
sms_c_routing_route_matched_count{dest_smsc="NOLICENCE"}

Métriques de traitement des messages​

sms_c_message_received_count​

Type : Counter

Description : Nombre total de messages reçus par le SMS-C de toutes les sources.

Labels :

  • source_smsc : Nom du SMSC source qui a envoyé le message
  • source_type : Type de connexion source (ims, circuit_switched, smpp)
  • message_type : Type de message (sms, mms)

Cas d'utilisation : Surveiller le volume de messages entrants par source et type. Utilisé pour détecter les modèles de trafic, identifier les périodes de forte activité et repérer les anomalies dans le flux de messages.

Alerting : Définir des alertes pour des baisses soudaines (problèmes de connectivité potentiels) ou des pics (attaque/spam potentiel).


sms_c_message_validated_count​

Type : Counter

Description : Nombre total de validations de messages effectuées.

Labels :

  • valid : Si la validation a réussi (true ou false)

Cas d'utilisation : Suivre les taux de succès/échec de validation. Des taux d'échec élevés peuvent indiquer des messages mal formés ou des problèmes d'intégration.

Alerting : Alerter lorsque le taux d'échec de validation dépasse un seuil (par exemple, > 5 % d'échecs).


sms_c_message_processing_stop_duration​

Type : Histogram

Description : Temps nécessaire pour traiter un message de la réception à l'achèvement (inclut validation, routage et mise en file d'attente).

Unité : Millisecondes

Seaux : 10, 50, 100, 250, 500, 1000, 2500, 5000 ms

Labels :

  • success : Si le traitement a réussi (true ou false)

Cas d'utilisation : Surveiller les performances de traitement des messages de bout en bout. Identifier les ralentissements dans le pipeline de traitement.

Alerting : Alerter lorsque la latence p95 ou p99 dépasse les seuils SLA.


Métriques de routage​

sms_c_routing_route_matched_count​

Type : Counter

Description : Nombre total de fois qu'une route spécifique a été correspondue et sélectionnée pour le routage des messages.

Labels :

  • route_id : Identifiant unique de la route correspondue
  • dest_smsc : SMSC de destination sélectionné par la route
  • priority : Valeur de priorité de la route correspondue

Cas d'utilisation : Comprendre quelles routes sont utilisées le plus fréquemment. Identifier les routes sous-utilisées ou surchargées. Utile pour la planification de capacité et l'optimisation des routes.

Alerting : Alerter si des routes de haute priorité sont rarement correspondues (peut indiquer une mauvaise configuration de routage).


sms_c_routing_failed_count​

Type : Counter

Description : Nombre total d'échecs de routage où aucune route appropriée n'a pu être trouvée.

Labels :

  • reason : Raison de l'échec (no_route_found, validation_failed, etc.)

Cas d'utilisation : Suivre les échecs de routage pour identifier les lacunes de configuration ou les modèles de trafic inattendus.

Alerting : Alerter sur tout échec de routage car cela indique que les messages ne peuvent pas être livrés.


sms_c_routing_action_count​

Type : Counter

Description : Nombre total d'actions de routage spéciales effectuées.

Labels :

  • action : Type d'action (drop, auto_reply, forward)
  • route_id : Route qui a déclenché l'action

Cas d'utilisation : Surveiller les règles de suppression (anti-spam), l'utilisation des réponses automatiques et les modèles de transfert.

Alerting : Alerter sur des pics inattendus dans les actions de suppression (peut indiquer une attaque de spam).


sms_c_routing_stop_duration​

Type : Histogram

Description : Temps nécessaire pour évaluer toutes les routes et sélectionner la meilleure correspondance.

Unité : Millisecondes

Seaux : 1, 5, 10, 25, 50, 100, 250, 500 ms

Labels :

  • dest_smsc : SMSC de destination sélectionné

Cas d'utilisation : Surveiller les performances du moteur de routage. Un routage lent indique trop de routes ou une logique de correspondance complexe.

Alerting : Alerter lorsque le routage prend systématiquement plus de temps que prévu (par exemple, p95 > 50 ms).


Métriques de recherche ENUM/NAPTR​

sms_c_enum_cache_hit_count​

Type : Counter

Description : Nombre total de recherches ENUM servies à partir du cache (n'a pas nécessité de requête DNS).

Labels :

  • domain : Domaine ENUM interrogé

Cas d'utilisation : Surveiller l'efficacité du cache. Des taux de réussite élevés réduisent la charge DNS et améliorent les performances.

Alerting : Alerter si le taux de réussite du cache tombe en dessous d'un seuil (peut indiquer des problèmes de cache ou un trafic inhabituel).


sms_c_enum_cache_miss_count​

Type : Counter

Description : Nombre total de recherches ENUM qui ont nécessité une requête DNS (non dans le cache).

Labels :

  • domain : Domaine ENUM interrogé

Cas d'utilisation : Suivre les échecs de cache pour comprendre l'efficacité du cache. Utiliser avec le compte de réussite pour calculer le taux de réussite.

Calcul : cache_hit_rate = hits / (hits + misses)


sms_c_enum_cache_size_size​

Type : Gauge

Description : Nombre actuel d'entrées dans le cache ENUM.

Cas d'utilisation : Surveiller la taille du cache pour s'assurer qu'elle ne croît pas de manière illimitée. Aider à ajuster les paramètres TTL du cache.

Alerting : Alerter si la taille du cache dépasse les limites attendues (peut indiquer une fuite de mémoire).


sms_c_enum_lookup_stop_duration​

Type : Histogram

Description : Temps nécessaire pour compléter une recherche ENUM (y compris la requête DNS si non mise en cache).

Unité : Millisecondes

Seaux : 10, 50, 100, 250, 500, 1000, 2500, 5000 ms

Labels :

  • domain : Domaine ENUM interrogé
  • success : Si la recherche a réussi (true ou false)
  • cache_hit : Si le résultat a été servi à partir du cache (true ou false)

Cas d'utilisation : Surveiller les performances des recherches ENUM. Identifier les serveurs DNS lents ou les problèmes de réseau.

Alerting : Alerter lorsque le temps de recherche p95 dépasse le seuil de délai d'attente.


sms_c_enum_naptr_records_record_count​

Type : Histogram

Description : Nombre d'enregistrements NAPTR retournés par une recherche ENUM réussie.

Seaux : 0, 1, 2, 3, 5, 10

Labels :

  • domain : Domaine ENUM interrogé

Cas d'utilisation : Comprendre la distribution des enregistrements ENUM. La plupart des recherches devraient retourner 1 à 3 enregistrements.

Alerting : Alerter si 0 enregistrements sont fréquemment retournés (problème de configuration DNS).


Métriques de livraison​

sms_c_delivery_queued_count​

Type : Counter

Description : Nombre total de messages mis en file d'attente pour livraison à un SMSC de destination.

Labels :

  • dest_smsc : Nom du SMSC de destination

Cas d'utilisation : Surveiller le flux de messages vers chaque destination. Utile pour la planification de capacité.

Alerting : Comparer avec les comptes de succès/échec de livraison pour détecter l'accumulation.


sms_c_delivery_attempted_count​

Type : Counter

Description : Nombre total de tentatives de livraison effectuées (inclut les réessais).

Labels :

  • dest_smsc : Nom du SMSC de destination

Cas d'utilisation : Suivre le volume des tentatives de livraison. Un nombre élevé de tentatives par rapport au nombre mis en file d'attente indique un comportement de réessai.


sms_c_delivery_succeeded_count​

Type : Counter

Description : Nombre total de messages livrés avec succès au SMSC de destination.

Labels :

  • dest_smsc : Nom du SMSC de destination

Cas d'utilisation : Suivre les livraisons réussies par destination. Principal indicateur de succès.

Alerting : Alerter si le taux de succès tombe en dessous du seuil SLA.

Calcul : success_rate = succeeded / queued


sms_c_delivery_failed_count​

Type : Counter

Description : Nombre total de messages qui ont échoué à la livraison après toutes les tentatives de réessai.

Labels :

  • dest_smsc : Nom du SMSC de destination
  • reason : Raison de l'échec

Cas d'utilisation : Suivre les échecs de livraison pour identifier les destinations problématiques ou les modèles d'échec.

Alerting : Alerter sur des taux d'échec élevés ou des raisons d'échec spécifiques.


sms_c_delivery_dead_letter_count​

Type : Counter

Description : Nombre total de messages déplacés vers la file de lettres mortes (non livrables).

Labels :

  • reason : Raison de la lettre morte (par exemple, max_retries_exceeded, expired)

Cas d'utilisation : Surveiller les messages non livrables nécessitant une intervention manuelle.

Alerting : Alerter sur tout événement de lettre morte car cela représente un échec complet de livraison.


sms_c_delivery_succeeded_attempt_count​

Type : Histogram

Description : Nombre de tentatives de livraison nécessaires avant une livraison réussie.

Seaux : 1, 2, 3, 5, 10

Labels :

  • dest_smsc : Nom du SMSC de destination

Cas d'utilisation : Comprendre le comportement de réessai. La plupart des livraisons devraient réussir dès la première tentative.

Alerting : Alerter si le nombre moyen de tentatives dépasse 2 (indique des problèmes de fiabilité de destination).


sms_c_delivery_failed_attempt_count​

Type : Histogram

Description : Nombre de tentatives de livraison effectuées avant l'échec final.

Seaux : 1, 2, 3, 5, 10

Labels :

  • dest_smsc : Nom du SMSC de destination

Cas d'utilisation : Comprendre combien de réessais se produisent avant d'abandonner.


sms_c_delivery_time_delta_delta_ms​

Type : Histogram

Description : Temps écoulé entre la soumission du message et la confirmation de livraison. Cette métrique capture la latence de bout en bout complète depuis qu'un message entre dans le SMS-C jusqu'à ce que le système confirme la livraison. Elle fournit des labels détaillés pour l'analyse par source, destination et comportement de réessai.

Unité : Millisecondes

Seaux : 50, 100, 250, 500, 1000, 2000, 5000, 10000, 20000, 60000, 600000 ms (50 ms à 10 minutes)

Labels :

  • source_smsc : SMSC source qui a soumis le message
  • dest_smsc : SMSC de destination qui a livré le message
  • delivery_attempts : Nombre de tentatives de livraison nécessaires (0 = succès à la première tentative)

Cas d'utilisation : Analyser les performances de livraison de bout en bout par paire source-destination. Identifier les chemins lents, les combinaisons de SMSC problématiques et corréler la latence avec le comportement de réessai. Essentiel pour la surveillance SLA et la planification de capacité.

Alerting :

  • Alerter lorsque p95 dépasse le seuil SLA pour des combinaisons source/dest spécifiques
  • Alerter lorsque les messages nécessitent systématiquement plusieurs tentatives

Exemples de requêtes Prometheus :

# Temps de livraison p95 par SMSC source et destination
histogram_quantile(0.95,
sum by (source_smsc, dest_smsc, le) (
rate(sms_c_delivery_time_delta_delta_ms_bucket[5m])
)
)

# Temps de livraison p99 global
histogram_quantile(0.99,
sum by (le) (
rate(sms_c_delivery_time_delta_delta_ms_bucket[5m])
)
)

# Temps de livraison moyen par SMSC source
sum by (source_smsc) (rate(sms_c_delivery_time_delta_delta_ms_sum[5m])) /
sum by (source_smsc) (rate(sms_c_delivery_time_delta_delta_ms_count[5m]))

# Temps de livraison pour les messages nécessitant des réessais vs succès à la première tentative
histogram_quantile(0.95,
sum by (le) (rate(sms_c_delivery_time_delta_delta_ms_bucket{delivery_attempts="0"}[5m]))
)
histogram_quantile(0.95,
sum by (le) (rate(sms_c_delivery_time_delta_delta_ms_bucket{delivery_attempts!="0"}[5m]))
)

# Paires source-destination les plus lentes (par p95)
topk(10,
histogram_quantile(0.95,
sum by (source_smsc, dest_smsc, le) (
rate(sms_c_delivery_time_delta_delta_ms_bucket[1h])
)
)
)

# Pourcentage de messages livrés en moins de 2 secondes
sum(rate(sms_c_delivery_time_delta_delta_ms_bucket{le="2000"}[5m])) /
sum(rate(sms_c_delivery_time_delta_delta_ms_count[5m])) * 100

# Messages livrés en moins de 2 secondes par destination
sum by (dest_smsc) (rate(sms_c_delivery_time_delta_delta_ms_bucket{le="2000"}[5m])) /
sum by (dest_smsc) (rate(sms_c_delivery_time_delta_delta_ms_count[5m])) * 100

sms_c_delivery_time_by_smsc_delta_ms​

Type : Histogram

Description : Temps écoulé entre la soumission du message et la confirmation de livraison, étiqueté uniquement par SMSC source et destination. C'est un compagnon de faible cardinalité à sms_c_delivery_time_delta_delta_ms - il omet le label delivery_attempts afin que le temps de livraison moyen par paire source/destination puisse être lu directement sans agrégation à travers les comptes de tentative. Émis à partir du même événement [:sms_c, :delivery, :time_delta].

Unité : Millisecondes

Seaux : 50, 100, 250, 500, 1000, 2000, 5000, 10000, 20000, 60000, 600000 ms (50 ms à 10 minutes)

Labels :

  • source_smsc : SMSC source qui a soumis le message
  • dest_smsc : SMSC de destination qui a livré le message

Cas d'utilisation : Tableau de bord du temps de livraison moyen de bout en bout par paire source/destination. Préférer cette métrique à sms_c_delivery_time_delta_delta_ms pour les panneaux moyens/SLA où la répartition des comptes de tentative n'est pas nécessaire ; utiliser la variante _delta lorsque vous devez découper par comportement de réessai.

Exemples de requêtes Prometheus :

# Temps de livraison moyen (ms) par SMSC source/destination
sum by (source_smsc, dest_smsc) (rate(sms_c_delivery_time_by_smsc_delta_ms_sum[5m])) /
sum by (source_smsc, dest_smsc) (rate(sms_c_delivery_time_by_smsc_delta_ms_count[5m]))

# Temps de livraison moyen global
sum(rate(sms_c_delivery_time_by_smsc_delta_ms_sum[5m])) /
sum(rate(sms_c_delivery_time_by_smsc_delta_ms_count[5m]))

# Temps de livraison p95 par SMSC source/destination
histogram_quantile(0.95,
sum by (source_smsc, dest_smsc, le) (
rate(sms_c_delivery_time_by_smsc_delta_ms_bucket[5m])
)
)

Métriques de file d'attente​

sms_c_queue_size_size​

Type : Gauge

Description : Nombre total actuel de messages dans la file d'attente (tous états combinés).

Labels :

  • queue_type : Type de file d'attente (message_queue, dead_letter)

Cas d'utilisation : Surveiller la profondeur de la file d'attente pour détecter les arriérés ou les problèmes de traitement.

Alerting : Alerter lorsque la taille de la file d'attente dépasse les seuils de capacité.


sms_c_queue_size_pending​

Type : Gauge

Description : Nombre actuel de messages en attente de livraison (pas encore tentés).

Labels :

  • queue_type : Type de file d'attente

Cas d'utilisation : Surveiller le nombre de messages en attente. Des comptes en attente élevés indiquent des retards de traitement.

Alerting : Alerter lorsque le compte en attente dépasse le seuil pendant une période prolongée.


sms_c_queue_size_failed​

Type : Gauge

Description : Nombre actuel de messages dans un état d'échec (en attente de réessai).

Labels :

  • queue_type : Type de file d'attente

Cas d'utilisation : Surveiller l'accumulation de messages échoués. Indique des problèmes de livraison.

Alerting : Alerter sur un compte échoué élevé car cela impacte les taux de livraison.


sms_c_queue_size_delivered​

Type : Gauge

Description : Nombre actuel de messages livrés en attente de nettoyage/retirement de la file d'attente.

Labels :

  • queue_type : Type de file d'attente

Cas d'utilisation : Surveiller le retard de nettoyage. Des comptes élevés indiquent que le processus de nettoyage est à la traîne.

Alerting : Alerter si les messages livrés s'accumulent de manière significative.


sms_c_queue_oldest_message_age_seconds​

Type : Gauge

Description : Âge (en secondes) du message le plus ancien actuellement en état d'attente.

Labels :

  • queue_type : Type de file d'attente

Cas d'utilisation : Détecter le vieillissement des messages et les arrêts de traitement. Critique pour la surveillance SLA.

Alerting : Alerter lorsque l'âge du message le plus ancien dépasse le seuil SLA (par exemple, > 300 secondes).


Métriques de facturation​

La facturation est effectuée via l'interface Diameter Ro (Contrôle de crédit). Le label account porte le MSISDN de l'abonné facturé (l'expéditeur du message). Un événement charging_failed est émis à la fois pour un refus définitif hors équilibre (reason: :no_credit) et pour une erreur OCS (transport/protocole). Seul un refus :no_credit rejette un message (statut :balance_rejected) ; les erreurs OCS échouent ouvertement et le message est livré.

sms_c_charging_requested_count​

Type : Counter

Description : Nombre total de demandes de facturation (Requêtes d'événements Diameter Ro CCR) envoyées à l'OCS.

Labels :

  • account : MSISDN de l'abonné facturé (expéditeur du message)

Cas d'utilisation : Suivre le volume de facturation par compte. Utile pour la réconciliation de facturation.


sms_c_charging_succeeded_count​

Type : Counter

Description : Nombre total d'opérations de facturation réussies.

Labels :

  • account : Identifiant du compte facturé

Cas d'utilisation : Surveiller le taux de succès de la facturation par compte.

Calcul : success_rate = succeeded / requested


sms_c_charging_failed_count​

Type : Counter

Description : Nombre total d'opérations de facturation échouées.

Labels :

  • account : Identifiant du compte
  • reason : Raison de l'échec

Cas d'utilisation : Identifier les échecs de facturation qui peuvent impacter les revenus ou nécessiter une intervention sur le compte.

Alerting : Alerter sur des taux d'échec de facturation élevés.


sms_c_charging_succeeded_duration​

Type : Histogram

Description : Temps nécessaire pour compléter une demande de facturation réussie.

Unité : Millisecondes

Seaux : 10, 50, 100, 250, 500, 1000, 2500, 5000 ms

Labels :

  • account : Identifiant du compte

Cas d'utilisation : Surveiller les performances du système de facturation. Une facturation lente peut retarder la livraison des messages.

Alerting : Alerter lorsque le temps de facturation p95 dépasse le seuil.


Métriques de santé du système​

sms_c_mnesia_table_size_record_count​

Type : Gauge

Description : Nombre actuel d'enregistrements dans chaque table de base de données Mnesia. Interrogé toutes les 10 secondes.

Labels :

  • table : Nom de la table

Tables suivies :

  • sms_route - Règles de routage SMS
  • message_store - File d'attente de messages (messages en attente, livrés, échoués)
  • location_store - Données de localisation/enregistrement des abonnés
  • frontend_store - Enregistrements frontend/SMSC
  • translation_rule - Règles de traduction de numéros
  • cell_tower_store - Données de localisation des tours cellulaires
  • message_events - Journaux d'événements de messages

Cas d'utilisation : Surveiller la croissance de la base de données. Détecter une accumulation de données inattendue. Planification de capacité.

Alerting : Alerter sur des taux de croissance de table inattendus ou lorsque les limites de capacité sont atteintes.

Exemples de requêtes Prometheus :

# Toutes les tailles de table
sms_c_mnesia_table_size_record_count

# Taille de la file d'attente de messages
sms_c_mnesia_table_size_record_count{table="message_store"}

# Enregistrements d'abonnés actifs
sms_c_mnesia_table_size_record_count{table="location_store"}

# Nombre de règles de routage
sms_c_mnesia_table_size_record_count{table="sms_route"}

sms_c_frontend_status_count​

Type : Gauge

Description : Nombre de frontends dans chaque statut de connexion.

Labels :

  • frontend_name : Identifiant du frontend
  • status : Statut de connexion (connecté, déconnecté)

Cas d'utilisation : Surveiller la connectivité des frontends. Détecter les échecs de connexion.

Alerting : Alerter lorsque des frontends attendus se déconnectent.


sms_c_location_registered_count​

Type : Counter

Description : Nombre total d'enregistrements de localisation/abonnés reçus par le système.

Labels :

  • location : Nom du frontend/SMSC où l'abonné est enregistré
  • ims_capable : Si l'abonné prend en charge l'IMS (true/false)

Cas d'utilisation : Surveiller l'activité d'enregistrement des abonnés. Suivre les abonnés IMS vs non-IMS. Détecter les tempêtes d'enregistrement ou les échecs.

Alerting : Définir des alertes pour :

  • Baisse des taux d'enregistrement (peut indiquer des problèmes de réseau)
  • Pics inhabituels dans les enregistrements
  • Ratio élevé d'enregistrements non-IMS (afflux d'appareils anciens)

Exemple de requête :

# Taux d'enregistrement par minute
rate(sms_c_location_registered_count[1m])

# Ratio d'enregistrement IMS vs non-IMS
sum(rate(sms_c_location_registered_count{ims_capable="true"}[5m])) /
sum(rate(sms_c_location_registered_count[5m]))

sms_c_location_active_registrations_count​

Type : Gauge

Description : Nombre actuel d'enregistrements d'abonnés actifs, regroupés par localisation (frontend/SMSC) et capacité IMS. Cette métrique est interrogée toutes les 10 secondes et reflète l'état actuel du magasin de localisation.

Labels :

  • location : Nom du frontend/SMSC où les abonnés sont enregistrés
  • ims_capable : Si les enregistrements sont capables d'IMS (true/false)

Cas d'utilisation : Surveiller la distribution actuelle des abonnés à travers les frontends. Suivre l'adoption de l'IMS. Identifier les déséquilibres de charge entre les frontends. Planification de capacité pour chaque instance SMSC.

Alerting : Définir des alertes pour :

  • Baisse soudaine des enregistrements pour une localisation (peut indiquer des problèmes de frontend)
  • Distribution déséquilibrée entre les frontends
  • Total des enregistrements approchant les limites de capacité

Exemples de requêtes Prometheus :

# Total des enregistrements actifs
sum(sms_c_location_active_registrations_count)

# Enregistrements actifs par localisation
sum by (location) (sms_c_location_active_registrations_count)

# Enregistrements actifs capables d'IMS par localisation
sum by (location) (sms_c_location_active_registrations_count{ims_capable="true"})

# Taux d'adoption IMS par localisation
sum by (location) (sms_c_location_active_registrations_count{ims_capable="true"}) /
sum by (location) (sms_c_location_active_registrations_count) * 100

# Total des enregistrements IMS vs non-IMS
sum by (ims_capable) (sms_c_location_active_registrations_count)

# Localisations avec le plus d'enregistrements
topk(10, sum by (location) (sms_c_location_active_registrations_count))

# Distribution des enregistrements en pourcentage du total
sum by (location) (sms_c_location_active_registrations_count) /
sum(sms_c_location_active_registrations_count) * 100

Métriques de requêtes API HTTP​

phoenix_endpoint_stop_duration​

Type : Distribution (Histogram)

Description : Durée de traitement des requêtes HTTP en millisecondes, du début de la requête à l'achèvement de la réponse.

Labels :

  • method : Méthode HTTP (par exemple, GET, POST)
  • path : chemin de la requête avec des segments de haute cardinalité (UUID, IDs numériques) réduits à /:id (par exemple, /api/messages, /api/messages/:id)

Seaux : 10ms, 50ms, 100ms, 250ms, 500ms, 1s, 2.5s, 5s

Cas d'utilisation : Surveiller les performances de l'API. Identifier les points de terminaison lents. Suivre les SLA de temps de réponse.

Alerting : Définir des alertes pour :

  • Latence P95 > 500ms pour les points de terminaison critiques
  • Latence P99 > 1s pour tout point de terminaison
  • Tendances de latence croissantes

Exemple de requête :

# Temps de réponse P95 par point de terminaison
histogram_quantile(0.95,
rate(phoenix_endpoint_stop_duration_bucket[5m]))

# Requêtes plus lentes qu'une seconde
sum(rate(phoenix_endpoint_stop_duration_bucket{le="1000"}[5m]))

phoenix_endpoint_stop_count​

Type : Counter

Description : Nombre total de requêtes HTTP terminées, catégorisées par méthode, chemin et code d'état HTTP.

Labels :

  • method : Méthode HTTP (par exemple, GET, POST)
  • path : chemin de la requête (segments de haute cardinalité réduits à /:id)
  • status : code d'état HTTP (200, 201, 400, 404, 500, etc.)

Cas d'utilisation : Surveiller le volume des requêtes API et les taux de succès. Suivre les taux d'erreur par point de terminaison.

Alerting : Définir des alertes pour :

  • Taux d'erreur > 5 % pour tout point de terminaison
  • Erreurs 5xx sur des points de terminaison critiques
  • Baisses soudaines du volume de requêtes

Exemple de requête :

# Taux de requêtes par chemin
sum by (path) (rate(phoenix_endpoint_stop_count[5m]))

# Taux d'erreur par chemin
sum by (path) (rate(phoenix_endpoint_stop_count{status=~"5.."}[5m])) /
sum by (path) (rate(phoenix_endpoint_stop_count[5m]))

# Taux de succès
sum(rate(phoenix_endpoint_stop_count{status=~"2.."}[5m])) /
sum(rate(phoenix_endpoint_stop_count[5m]))

phoenix_router_dispatch_exception_count​

Type : Counter

Description : Nombre total d'exceptions/erreurs levées lors du traitement des requêtes HTTP.

Labels :

  • route : Route de point de terminaison API où l'exception s'est produite
  • kind : Type d'exception (error, exit, throw)

Cas d'utilisation : Suivre les erreurs d'application. Identifier les points de terminaison problématiques. Surveiller la stabilité du système.

Alerting : Définir des alertes pour toute valeur non nulle sur des points de terminaison critiques.

Exemple de requête :

# Taux d'exception par point de terminaison
rate(phoenix_router_dispatch_exception_count[5m])

# Total des exceptions dans la dernière heure
increase(phoenix_router_dispatch_exception_count[1h])

Métriques Diameter Sh​

Le SMS-C interroge le HSS via l'interface Diameter Sh (3GPP TS 29.329) pour classer les abonnés comme étant sur le réseau ou hors réseau lors de l'évaluation des routes. Ces métriques ne sont émises que lorsque Diameter est activé.

sms_c_diameter_peer_status​

Type : Gauge

Description : Si le pair Diameter est connecté (1) ou non (0).

Labels :

  • origin_host : hôte d'origine Diameter configuré du pair
  • ip : adresse IP du pair

Exemple de requête :

# Pairs actuellement hors ligne
sms_c_diameter_peer_status == 0

sms_c_diameter_sh_request_count​

Type : Counter

Description : Nombre total de requêtes de recherche Diameter Sh (UDR) envoyées.


sms_c_diameter_sh_response_count​

Type : Counter

Description : Nombre total de réponses de recherche Diameter Sh (UDA), par résultat.

Labels :

  • result : résultat de la recherche (par exemple, on_net, unknown_user, error)
  • result_code : Résultat expérimental Diameter / Code de résultat (par exemple, 2001, 5001)

Exemple de requête :

# Ratio d'erreur de recherche Sh
sum(rate(sms_c_diameter_sh_response_count{result="error"}[5m]))
/ sum(rate(sms_c_diameter_sh_response_count[5m]))

sms_c_diameter_sh_response_duration_ms​

Type : Distribution (Histogram)

Description : Durée de recherche Diameter Sh en millisecondes.

Labels :

  • result : résultat de la recherche

Seaux : 5, 10, 25, 50, 100, 250, 500, 1000, 2500 ms

Exemple de requête :

# Latence de recherche Sh P95
histogram_quantile(0.95, rate(sms_c_diameter_sh_response_duration_ms_bucket[5m]))

sms_c_diameter_sh_error_count​

Type : Counter

Description : Nombre total d'erreurs de recherche Diameter Sh (échecs de transport/timeout/décodage, distincts d'un UDA négatif).

Labels :

  • reason : raison de l'erreur

Métriques de fédération​

La fédération transfère des messages entre les contrôleurs SMS-C via un modèle de pair basé sur le tirage. Voir Fédération.

sms_c_federation_forward_attempted_count​

Type : Counter

Description : Nombre total de messages transférés vers des contrôleurs distants.

Labels :

  • dest_controller : identité du contrôleur de destination

sms_c_federation_forward_completed_count​

Type : Counter

Description : Nombre total de messages livrés avec succès à des contrôleurs distants.

Labels :

  • dest_controller : identité du contrôleur de destination

sms_c_federation_forward_queued_count​

Type : Counter

Description : Nombre total de messages mis en file d'attente parce qu'un pair était injoignable.

Labels :

  • dest_controller : identité du contrôleur de destination

sms_c_federation_forward_failed_count​

Type : Counter

Description : Nombre total de messages ayant dépassé le nombre maximum de réessais.

Labels :

  • dest_controller : identité du contrôleur de destination

sms_c_federation_message_received_count​

Type : Counter

Description : Nombre total de messages reçus de contrôleurs distants.

Labels :

  • origin_node : nœud de contrôleur d'origine

sms_c_federation_health_check_count​

Type : Counter

Description : Nombre total de tentatives de vérification de santé des pairs, par pair et résultat.

Labels :

  • peer : identité du pair
  • result : résultat de la vérification de santé (par exemple, healthy, unhealthy)

sms_c_federation_peer_status_count​

Type : Gauge

Description : Nombre actuel de pairs de fédération par statut.

Labels :

  • status : statut du pair (par exemple, healthy, degraded, unhealthy)

sms_c_federation_queue_depth_count​

Type : Gauge

Description : Profondeur actuelle de la file d'attente de transfert de fédération.

Exemple de requête :

# Alerter si la file d'attente de transfert est en cours de remplissage
sms_c_federation_queue_depth_count > 1000

Métriques de la VM Erlang​

vm_memory_total​

Type : Gauge

Description : Mémoire totale allouée par la VM Erlang en octets.

Cas d'utilisation : Surveiller l'utilisation globale de la mémoire. Détecter les fuites de mémoire. Planifier la capacité.

Alerting : Alerter lorsque l'utilisation de la mémoire > 80 % de la mémoire système disponible.


vm_memory_processes​

Type : Gauge

Description : Mémoire utilisée par les processus Erlang en octets.

Cas d'utilisation : Suivre la consommation de mémoire des processus. Source la plus courante de croissance de la mémoire.

Alerting : Alerter sur un taux de croissance soutenu élevé.


vm_total_run_queue_lengths_total​

Type : Gauge

Description : Nombre total de processus en attente d'être planifiés sur tous les planificateurs CPU.

Cas d'utilisation : Mesurer la charge système. Des valeurs élevées indiquent une saturation du CPU.

Alerting : Alerter lorsque cela dépasse systématiquement 10 * nombre de cœurs CPU.


vm_system_counts_process_count​

Type : Gauge

Description : Nombre actuel de processus en cours d'exécution dans la VM.

Cas d'utilisation : Surveiller les modèles de création de processus. Détecter les fuites de processus.

Alerting : Alerter lorsque l'on approche de la limite de processus (par défaut 262 144).


Collecte et sondage des métriques​

Le système collecte automatiquement les métriques suivantes toutes les 10 secondes :

  • Tailles et âges de la file d'attente
  • Tailles des tables Mnesia
  • Statistiques de cache ENUM

Toutes les autres métriques sont déclenchées par des événements et émises lorsque l'action correspondante se produit.

Modèles de surveillance courants​

Taux de succès de livraison par destination​

Suivre le taux de succès de la livraison des messages pour chaque SMSC de destination :

Formule : (sms_c_delivery_succeeded_count) / (sms_c_delivery_queued_count)

Interprétation : Devrait être > 95 % pour des destinations saines. Des taux plus bas indiquent des problèmes de livraison.


Latence de message de bout en bout​

Surveiller le temps total depuis la réception du message jusqu'à la livraison :

Métriques :

  • sms_c_message_processing_stop_duration (traitement)
  • sms_c_delivery_time_delta_delta_ms (livraison)

Interprétation : La somme représente la latence totale perçue par l'utilisateur.


Efficacité du cache ENUM​

Mesurer l'efficacité du cache ENUM :

Formule : (sms_c_enum_cache_hit_count) / (sms_c_enum_cache_hit_count + sms_c_enum_cache_miss_count)

Interprétation : Devrait être > 80 % après la montée en température. Des taux plus bas peuvent indiquer un TTL court ou une variance de trafic élevée.


Utilisation des routes​

Identifier quelles routes gèrent le plus de trafic :

Métrique : sms_c_routing_route_matched_count groupée par route_id

Interprétation : Utiliser pour identifier les routes chaudes pour l'optimisation et la planification de capacité.


Tendance d'arriéré de file d'attente​

Surveiller si la file d'attente de messages est en croissance (arriéré) ou en diminution (rattrapage) :

Métriques :

  • sms_c_queue_size_pending (en attente actuelle)
  • sms_c_queue_oldest_message_age_seconds (âge en tendance)

Interprétation : Compte en attente croissant + âge croissant = formation d'un arriéré.


Taux de réessai​

Comprendre à quelle fréquence des réessais de livraison sont nécessaires :

Métrique : sms_c_delivery_succeeded_attempt_count histogramme des percentiles

Interprétation : Si p95 > 1, la plupart des messages nécessitent des réessais. Indique des problèmes de fiabilité de destination.


Alertes recommandées​

AlerteConditionGravitéDescription
Taux d'échec de routage élevéAugmentation de routing_failed_countCritiqueLes messages ne peuvent pas être routés
Arriéré de file d'attentequeue_size_pending > seuilAvertissementAccumulation de messages
Anciens messages dans la file d'attentequeue_oldest_message_age_seconds > 300CritiqueViolation SLA
Pic d'échecs de livraisonPic de delivery_failed_countÉlevéProblèmes de destination
Événements de lettre mortedelivery_dead_letter_count > 0ÉlevéMessages non livrables
Délais d'attente de recherche ENUMenum_lookup_stop_duration p95 > 5000msAvertissementProblèmes DNS
Faible taux de réussite du cacheTaux de réussite du cache ENUM < 0,7AvertissementCache inefficace
Frontend déconnectéfrontend_status_count{status="disconnected"} > 0ÉlevéPerte de connectivité
Échecs de facturationcharging_failed_count > seuilÉlevéProblèmes de facturation
Traitement de message lentmessage_processing_stop_duration p95 > 1000msAvertissementDégradation des performances

Recommandations de tableau de bord​

Tableau de bord des opérations​

Objectif : Surveillance de la santé du système en temps réel

Panneaux :

  1. Débit de messages (reçus/traités/livrés par minute)
  2. Tailles de la file d'attente (en attente, échoués, livrés)
  3. Taux de succès de livraison par destination
  4. Latence de traitement et de livraison p95
  5. Statut des frontends actifs
  6. Alertes actuelles

Tableau de bord de performance​

Objectif : Analyse des performances du système

Panneaux :

  1. Histogramme de la durée de traitement des messages
  2. Histogramme de la durée de routage
  3. Histogramme de la durée de recherche ENUM
  4. Histogramme de la durée de facturation
  5. Distribution des tentatives de livraison
  6. Taux de réussite du cache

Tableau de bord commercial​

Objectif : Analyse du trafic et de l'utilisation

Panneaux :

  1. Messages par SMSC source
  2. Messages par SMSC de destination
  3. Carte thermique d'utilisation des routes
  4. Comptes d'actions de réponse automatique et de suppression
  5. Statistiques d'utilisation ENUM
  6. Volume de facturation par compte

Rétention des métriques​

Paramètres de rétention recommandés pour Prometheus :

  • Métriques brutes : 15 jours
  • Agrégats de 5 minutes : 90 jours
  • Agrégats d'une heure : 2 ans

Cela fournit un historique récent détaillé tout en maintenant des tendances à long terme pour la planification de capacité.


Dépannage avec les métriques​

Scénario : Messages non livrés​

Étapes d'investigation :

  1. Vérifier sms_c_message_received_count - Les messages sont-ils reçus ?
  2. Vérifier sms_c_routing_failed_count - Sont-ils routés ?
  3. Vérifier sms_c_delivery_queued_count - Sont-ils mis en file d'attente ?
  4. Vérifier sms_c_delivery_failed_count - Les tentatives de livraison échouent-elles ?
  5. Vérifier les labels dest_smsc pour identifier la destination problématique

Scénario : Traitement de message lent​

Étapes d'investigation :

  1. Vérifier l'histogramme sms_c_message_processing_stop_duration - Temps de traitement global
  2. Vérifier sms_c_routing_stop_duration - Le routage est-il lent ?
  3. Vérifier sms_c_enum_lookup_stop_duration - Les recherches ENUM sont-elles lentes ?
  4. Vérifier sms_c_charging_succeeded_duration - La facturation est-elle lente ?
  5. Identifier le goulet d'étranglement et enquêter sur le composant spécifique

Scénario : Croissance de la file d'attente de messages​

Étapes d'investigation :

  1. Vérifier la tendance sms_c_queue_size_pending - Est-elle en croissance ?
  2. Vérifier sms_c_delivery_attempted_count - Des tentatives de livraison ont-elles lieu ?
  3. Vérifier sms_c_delivery_failed_count - Échouent-elles ?
  4. Vérifier sms_c_delivery_time_delta_delta_ms - La livraison prend-elle trop de temps ?
  5. Vérifier les labels dest_smsc pour identifier les destinations lentes

Exemples de requêtes Prometheus​

Débit de messages​

Messages reçus par seconde (moyenne sur 5 minutes) :

rate(sms_c_message_received_count[5m])

Messages reçus par minute (moyenne sur 1 heure) :

rate(sms_c_message_received_count[1h]) * 60

Total des messages aujourd'hui :

increase(sms_c_message_received_count[24h])

Messages par type de source :

sum by (source_type) (rate(sms_c_message_received_count[5m]))

Messages par SMSC source :

sum by (source_smsc) (rate(sms_c_message_received_count[5m]))

Performance de livraison​

Taux de succès de livraison (pourcentage) :

(rate(sms_c_delivery_succeeded_count[5m]) / rate(sms_c_delivery_queued_count[5m])) * 100

Taux d'échec de livraison (pourcentage) :

(rate(sms_c_delivery_failed_count[5m]) / rate(sms_c_delivery_queued_count[5m])) * 100

Tentatives de livraison moyennes (p95) :

histogram_quantile(0.95, sms_c_delivery_succeeded_attempt_count_bucket)

Succès de livraison par destination :

sum by (dest_smsc) (rate(sms_c_delivery_succeeded_count[5m]))

Raisons d'échec de livraison :

sum by (reason) (rate(sms_c_delivery_failed_count[5m]))

Temps de livraison (p95) :

histogram_quantile(0.95, sms_c_delivery_time_delta_delta_ms_bucket)

Temps de livraison (p99) :

histogram_quantile(0.99, sms_c_delivery_time_delta_delta_ms_bucket)

Métriques de file d'attente​

Messages en attente actuels :

sms_c_queue_size_pending

Messages échoués en attente de réessai :

sms_c_queue_size_failed

Âge du message le plus ancien (minutes) :

sms_c_queue_oldest_message_age_seconds / 60

Taux de croissance de la file d'attente (messages/heure) :

rate(sms_c_queue_size_size[1h]) * 3600

Messages entrant dans la file d'attente :

rate(sms_c_delivery_queued_count[5m])

Messages sortant de la file d'attente :

rate(sms_c_delivery_succeeded_count[5m]) + rate(sms_c_delivery_failed_count[5m])

Arriéré de file d'attente (entrant - sortant) :

rate(sms_c_delivery_queued_count[5m]) - (rate(sms_c_delivery_succeeded_count[5m]) + rate(sms_c_delivery_failed_count[5m]))

Performance de routage​

Taux de succès de routage :

(1 - (rate(sms_c_routing_failed_count[5m]) / (rate(sms_c_routing_route_matched_count[5m]) + rate(sms_c_routing_failed_count[5m])))) * 100

Routes les plus utilisées :

topk(10, sum by (route_id, dest_smsc) (rate(sms_c_routing_route_matched_count[1h])))

Échecs de routage (par minute) :

rate(sms_c_routing_failed_count[5m]) * 60

Latence de routage (p50, p95, p99) :

histogram_quantile(0.50, sms_c_routing_stop_duration_bucket)
histogram_quantile(0.95, sms_c_routing_stop_duration_bucket)
histogram_quantile(0.99, sms_c_routing_stop_duration_bucket)

Actions de suppression par heure :

increase(sms_c_routing_action_count{action="drop"}[1h])

Actions de réponse automatique par heure :

increase(sms_c_routing_action_count{action="auto_reply"}[1h])

Performance ENUM​

Taux de réussite du cache ENUM :

rate(sms_c_enum_cache_hit_count[5m]) / (rate(sms_c_enum_cache_hit_count[5m]) + rate(sms_c_enum_cache_miss_count[5m]))

Pourcentage de réussite du cache ENUM :

(rate(sms_c_enum_cache_hit_count[5m]) / (rate(sms_c_enum_cache_hit_count[5m]) + rate(sms_c_enum_cache_miss_count[5m]))) * 100

Latence de recherche ENUM (p95) :

histogram_quantile(0.95, sms_c_enum_lookup_stop_duration_bucket)

Recherches ENUM par seconde (cachées vs non cachées) :

# Cachées (rapides)
rate(sms_c_enum_cache_hit_count[5m])

# Non cachées (requiert une requête DNS)
rate(sms_c_enum_cache_miss_count[5m])

Nombre moyen d'enregistrements NAPTR retournés :

rate(sms_c_enum_naptr_records_record_count_sum[5m]) / rate(sms_c_enum_naptr_records_record_count_count[5m])

Taille du cache ENUM :

sms_c_enum_cache_size_size

Performance de traitement​

Latence de traitement des messages (p95) :

histogram_quantile(0.95, sms_c_message_processing_stop_duration_bucket)

Latence de traitement des messages (p99) :

histogram_quantile(0.99, sms_c_message_processing_stop_duration_bucket)

Échecs de traitement :

rate(sms_c_message_processing_stop_duration_count{success="false"}[5m])

Taux d'échec de validation :

rate(sms_c_message_validated_count{valid="false"}[5m]) / rate(sms_c_message_validated_count[5m])

Métriques de facturation​

Taux de succès de facturation :

rate(sms_c_charging_succeeded_count[5m]) / rate(sms_c_charging_requested_count[5m])

Échecs de facturation par minute :

rate(sms_c_charging_failed_count[5m]) * 60

Latence de facturation (p95) :

histogram_quantile(0.95, sms_c_charging_succeeded_duration_bucket)

Volume de facturation par compte :

sum by (account) (rate(sms_c_charging_requested_count[1h]))

Santé des frontends​

Frontends actifs :

sum(sms_c_frontend_status_count{status="connected"})

Frontends déconnectés :

sum(sms_c_frontend_status_count{status="disconnected"})

Frontends par nom :

sum by (frontend_name) (sms_c_frontend_status_count{status="connected"})

Santé du système​

Tailles des tables Mnesia :

sms_c_mnesia_table_size_record_count

Nombre de routes :

sms_c_mnesia_table_size_record_count{table="sms_route"}

Nombre de règles de traduction :

sms_c_mnesia_table_size_record_count{table="translation_rule"}

Exemples de tableau de bord Grafana​

Tableau de bord 1 : Opérations en temps réel​

Objectif : Surveiller l'activité et la santé du système actuelles.

Panneaux :

  1. Débit de messages (Graphique)

    • Requête : rate(sms_c_message_received_count[5m])
    • Requête : rate(sms_c_delivery_succeeded_count[5m])
    • Unité : messages/seconde
    • Légende : {{source_type}}
  2. Taux de succès de livraison (Jauge)

    • Requête : (rate(sms_c_delivery_succeeded_count[5m]) / rate(sms_c_delivery_queued_count[5m])) * 100
    • Unité : pourcentage (0-100)
    • Seuils :
      • Rouge : < 90
      • Jaune : 90-95
      • Vert : > 95
  3. Profondeur de la file d'attente (Graphique)

    • Requête : sms_c_queue_size_pending
    • Requête : sms_c_queue_size_failed
    • Unité : messages
    • Légende : {{queue_type}}
  4. Âge du message le plus ancien (Stat)

    • Requête : sms_c_queue_oldest_message_age_seconds / 60
    • Unité : minutes
    • Seuils :
      • Vert : < 5
      • Jaune : 5-10
      • Rouge : > 10
  5. Frontends actifs (Stat)

    • Requête : sum(sms_c_frontend_status_count{status="connected"})
    • Unité : compte
    • Couleur : Bleu
  6. Échecs de routage (Graphique)

    • Requête : rate(sms_c_routing_failed_count[5m]) * 60
    • Unité : échecs/minute
    • Seuil d'alerte : > 0

Tableau de bord 2 : Analyse de performance​

Objectif : Analyser les performances du système et identifier les goulets d'étranglement.

Panneaux :

  1. Latence de bout en bout (Graphique)

    • Requête : histogram_quantile(0.50, sms_c_message_processing_stop_duration_bucket) (p50)
    • Requête : histogram_quantile(0.95, sms_c_message_processing_stop_duration_bucket) (p95)
    • Requête : histogram_quantile(0.99, sms_c_message_processing_stop_duration_bucket) (p99)
    • Unité : millisecondes
    • Légende : Percentile
  2. Latences des composants (Jauge à barres)

    • Routage : histogram_quantile(0.95, sms_c_routing_stop_duration_bucket)
    • ENUM : histogram_quantile(0.95, sms_c_enum_lookup_stop_duration_bucket)
    • Facturation : histogram_quantile(0.95, sms_c_charging_succeeded_duration_bucket)
    • Livraison : histogram_quantile(0.95, sms_c_delivery_time_delta_delta_ms_bucket)
    • Unité : millisecondes
    • Barres horizontales
  3. Distribution des tentatives de livraison (Carte thermique)

    • Requête : sms_c_delivery_succeeded_attempt_count_bucket
    • Montre combien de tentatives sont généralement nécessaires
    • Échelle de couleur : Bleu (1 tentative) à Rouge (beaucoup de tentatives)
  4. Performance du cache ENUM (Graphique)

    • Taux de réussite : rate(sms_c_enum_cache_hit_count[5m]) / (rate(sms_c_enum_cache_hit_count[5m]) + rate(sms_c_enum_cache_miss_count[5m]))
    • Taille du cache : sms_c_enum_cache_size_size
    • Axe Y double (taux vs taille)
  5. Taux de succès de traitement (Jauge)

    • Requête : (rate(sms_c_message_processing_stop_duration_count{success="true"}[5m]) / rate(sms_c_message_processing_stop_duration_count[5m])) * 100
    • Unité : pourcentage
    • Seuils :
      • Rouge : < 95
      • Jaune : 95-99
      • Vert : > 99

Tableau de bord 3 : Analyse du trafic​

Objectif : Analyser les modèles de trafic de messages et la distribution de routage.

Panneaux :

  1. Messages par type de source (Graphique circulaire)

    • Requête : sum by (source_type) (increase(sms_c_message_received_count[1h]))
    • Montre la distribution : IMS vs CS vs SMPP
  2. Messages par SMSC source (Graphique à barres)

    • Requête : sum by (source_smsc) (rate(sms_c_message_received_count[1h]))
    • Top 10 des sources
    • Barres horizontales
  3. Utilisation des routes (Tableau)

    • Colonnes :
      • Route ID
      • SMSC de destination
      • Messages (1h) : sum by (route_id, dest_smsc) (increase(sms_c_routing_route_matched_count[1h]))
      • Priorité
      • Taux de succès
    • Trié par nombre de messages
  4. Livraison par destination (Graphique)

    • Requête : sum by (dest_smsc) (rate(sms_c_delivery_succeeded_count[5m]))
    • Unité : messages/seconde
    • Graphique en zone empilée
    • Légende : {{dest_smsc}}
  5. Actions de suppression/réponse automatique (Stat)

    • Supprimé : increase(sms_c_routing_action_count{action="drop"}[1h])
    • Réponse automatique : increase(sms_c_routing_action_count{action="auto_reply"}[1h])
    • Statistiques côte à côte
  6. Modèle de trafic horaire (Graphique)

    • Requête : rate(sms_c_message_received_count[1h]) * 3600
    • Plage horaire : Derniers 7 jours
    • Montre les modèles quotidiens

Tableau de bord 4 : Capacité et ressources​

Objectif : Surveiller l'utilisation des ressources et les limites de capacité.

Panneaux :

  1. Capacité de la file d'attente (Graphique)

    • Actuel : sms_c_queue_size_size
    • Ligne de capacité : valeur fixe basée sur les limites du système
    • Montre la tendance d'utilisation
  2. Croissance des tables de base de données (Graphique)

    • Messages : sms_c_mnesia_table_size_record_count{table="sms_route"}
    • Traductions : sms_c_mnesia_table_size_record_count{table="translation_rule"}
    • Tendance sur les 30 derniers jours
  3. Tendance d'arriéré de livraison (Graphique)

    • Requête : rate(sms_c_delivery_queued_count[5m]) - (rate(sms_c_delivery_succeeded_count[5m]) + rate(sms_c_delivery_failed_count[5m]))
    • Positif = arriéré croissant
    • Négatif = rattrapage
  4. Trafic de pointe (Stat)

    • Requête : max_over_time(rate(sms_c_message_received_count[5m])[24h:])
    • Montre le taux le plus élevé de 5 minutes au cours des dernières 24 heures
    • Unité : messages/seconde
  5. Utilisation de la capacité (Jauge)

    • Requête : (rate(sms_c_message_received_count[5m]) / MAX_CAPACITY) * 100
    • Remplacer MAX_CAPACITY par votre limite système
    • Unité : pourcentage
    • Seuils :
      • Vert : < 70
      • Jaune : 70-85
      • Rouge : > 85

Tableau de bord 5 : Conformité SLA​

Objectif : Suivre les métriques SLA et la conformité.

Panneaux :

  1. Conformité SLA (Jauge)

    • Succès de livraison : (rate(sms_c_delivery_succeeded_count[1h]) / rate(sms_c_delivery_queued_count[1h])) * 100
    • Ligne cible à 99 %
    • Seuils :
      • Rouge : < 95
      • Jaune : 95-99
      • Vert : >= 99
  2. Messages livrés dans le SLA (Stat)

    • Requête : count(sms_c_delivery_time_delta_delta_ms_bucket{le="5000"}) / count(sms_c_delivery_time_delta_delta_ms_bucket)
    • Montre le pourcentage livré en moins de 5 secondes
    • Unité : pourcentage
  3. Violations SLA (Counter)

    • Messages dépassant 5 minutes : increase(sms_c_queue_oldest_message_age_seconds{} > 300)[24h:]
    • Devrait être 0
  4. Uptime (Stat)

    • Requête : up{job="sms-c"}
    • Binaire : 1 = en ligne, 0 = hors ligne
    • Montre l'état actuel
  5. Tendance du taux de succès quotidien (Graphique)

    • Requête : avg_over_time((rate(sms_c_delivery_succeeded_count[1h]) / rate(sms_c_delivery_queued_count[1h]))[24h:1h])
    • Plage horaire : Derniers 30 jours
    • Ligne SLA à 99 %

Exemples de règles d'alerte​

Alertes critiques​

Échecs de routage :

alert: RoutingFailuresDetected
expr: increase(sms_c_routing_failed_count[5m]) > 0
for: 2m
labels:
severity: critical
annotations:
summary: "{{ $value }} échecs de routage dans les 5 dernières minutes"
description: "Les messages ne peuvent pas être routés. Vérifiez la configuration de routage."

Arriéré de file d'attente :

alert: MessageQueueBacklog
expr: sms_c_queue_size_pending > 10000
for: 5m
labels:
severity: critical
annotations:
summary: "La file d'attente de messages a {{ $value }} messages en attente"
description: "La file d'attente est en cours de remplissage. Vérifiez les performances de livraison."

Anciens messages dans la file d'attente :

alert: OldMessagesInQueue
expr: sms_c_queue_oldest_message_age_seconds > 300
for: 2m
labels:
severity: critical
annotations:
summary: "Le message le plus ancien a {{ $value }} secondes"
description: "Les messages ne sont pas livrés. Vérifiez les frontends."

Tous les frontends déconnectés :

alert: NoActiveFrontends
expr: sum(sms_c_frontend_status_count{status="connected"}) == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Aucun frontend connecté"
description: "Aucun chemin de livraison disponible. Vérifiez la connectivité des frontends."

Croissance de la file de lettres mortes :

alert: DeadLetterMessagesIncreasing
expr: rate(sms_c_delivery_dead_letter_count[10m]) > 0
for: 5m
labels:
severity: critical
annotations:
summary: "{{ $value }} messages déplacés vers la file de lettres mortes"
description: "Les messages deviennent non livrables. Enquêtez sur les échecs."

Alertes d'avertissement​

Faible taux de succès de livraison :

alert: LowDeliverySuccessRate
expr: (rate(sms_c_delivery_succeeded_count[10m]) / rate(sms_c_delivery_queued_count[10m])) < 0.95
for: 10m
labels:
severity: warning
annotations:
summary: "Le taux de succès de livraison est {{ $value | humanizePercentage }}"
description: "Le taux de succès est inférieur à 95 %. Enquêtez sur les échecs de livraison."

Taux de réessai élevé :

alert: HighDeliveryRetryRate
expr: histogram_quantile(0.95, sms_c_delivery_succeeded_attempt_count_bucket) > 2
for: 15m
labels:
severity: warning
annotations:
summary: "Tentatives de livraison au 95e percentile : {{ $value }}"
description: "Les messages nécessitant plusieurs tentatives. Vérifiez la fiabilité de la destination."

Traitement de message lent :

alert: SlowMessageProcessing
expr: histogram_quantile(0.95, sms_c_message_processing_stop_duration_bucket) > 1000
for: 10m
labels:
severity: warning
annotations:
summary: "Temps de traitement au 95e percentile : {{ $value }}ms"
description: "Le traitement des messages est lent. Vérifiez les ressources système."

Recherches ENUM échouant :

alert: HighEnumFailureRate
expr: rate(sms_c_enum_lookup_stop_duration_count{success="false"}[10m]) > 0.1
for: 10m
labels:
severity: warning
annotations:
summary: "Taux d'échec de recherche ENUM : {{ $value }}"
description: "Les recherches DNS échouent. Vérifiez les serveurs DNS."

Faible taux de réussite du cache ENUM :

alert: LowEnumCacheHitRate
expr: rate(sms_c_enum_cache_hit_count[10m]) / (rate(sms_c_enum_cache_hit_count[10m]) + rate(sms_c_enum_cache_miss_count[10m])) < 0.70
for: 30m
labels:
severity: warning
annotations:
summary: "Taux de réussite du cache ENUM : {{ $value | humanizePercentage }}"
description: "Efficacité du cache faible. Peut indiquer un trafic de numéros uniques."

Échecs de facturation :

alert: ChargingFailuresDetected
expr: rate(sms_c_charging_failed_count[10m]) > 0.05
for: 10m
labels:
severity: warning
annotations:
summary: "Taux d'échec de facturation : {{ $value }}"
description: "Erreurs du système de facturation. Vérifiez la connectivité OCS."

Notes supplémentaires​

  • Toutes les métriques de durée utilisent une précision en nanosecondes en interne mais sont converties en millisecondes pour le reporting.
  • Les métriques de compteur sont cumulatives et doivent être utilisées avec les fonctions rate() ou increase() dans les requêtes Prometheus.
  • Les métriques de gauge représentent des valeurs instantanées au moment de la collecte.
  • Les métriques d'histogramme fournissent des calculs de percentile (p50, p95, p99) et peuvent être utilisées pour créer des cartes thermiques.
  • Toutes les métriques incluent des labels par défaut ajoutés par Prometheus (instance, job, etc.).
  • Lors de la création de tableaux de bord, utilisez des plages de temps appropriées : 5m pour le temps réel, 1h pour les tendances, 24h+ pour la planification de capacité.
  • Configurez des règles d'enregistrement dans Prometheus pour des requêtes complexes fréquemment utilisées afin d'améliorer les performances des tableaux de bord.
  • Utilisez le templating de variables dans Grafana pour des tableaux de bord dynamiques (sélectionner dest_smsc, source_smsc, etc.)