Aller au contenu principal

Documentation des métriques Prometheus de SMS-C

← Retour à l'index de la documentation

Vue d'ensemble

Ce document décrit toutes les métriques Prometheus exposées par le système SMS-C. Ces métriques sont conçues pour que le personnel opérationnel puisse surveiller la santé du système, ses performances et 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 qui peuvent être récupérées par un serveur Prometheus. Les métriques sont mises à jour en temps réel à mesure que le système traite les messages.

Convention de nommage des métriques

Toutes les métriques suivent le modèle : sms_c.<catégorie>.<nom_métrique>.<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 de 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 de la licence actuelle 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

Alertes :

- 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érifiez si la licence est valide
sms_c_license_status == 1

# Alerte sur une licence invalide
sms_c_license_status == 0

# Comptez 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 des 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.

Alertes : Définir des alertes pour des baisses soudaines (problèmes potentiels de connectivité source) 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 malformés ou des problèmes d'intégration.

Alertes : Alerte lorsque le taux d'échec de validation dépasse le 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 la validation, le routage et la 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

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


sms_c_routing_stop_duration

Type : Histogram

Description : Temps pris 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

Alertes : Alerte 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é.

Alertes : 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.

Alertes : Alerte 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.

Alertes : Alerte 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 d'attente des 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.

Alertes : Alerte sur tout événement de lettre morte car ils représentent 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.

Alertes : Alerte 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 un é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 complète de bout en bout depuis qu'un message entre dans le SMS-C jusqu'à ce que la livraison soit confirmée, avec 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é.

Alertes :

  • Alerte lorsque p95 dépasse le seuil SLA pour des combinaisons source/dest spécifiques
  • Alerte 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 par rapport au 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 à faible cardinalité de 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 sur 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érez cette métrique à sms_c_delivery_time_delta_delta_ms pour les panneaux moyens/SLA où la répartition par nombre de tentatives n'est pas nécessaire ; utilisez la variante _delta lorsque vous devez trancher 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

Alertes : Alerte 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.

Alertes : Alerte 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 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.

Alertes : Alerte 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 de désé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 et le message est livré.

sms_c_charging_requested_count

Type : Counter

Description : Nombre total de demandes de facturation (Requêtes d'événements CCR Diameter Ro) 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.

Alertes : Alerte 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.

Alertes : Alerte 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 d'emplacement/enregistrement des abonnés
  • frontend_store - Enregistrements frontend/SMSC
  • translation_rule - Règles de traduction de numéros
  • cell_tower_store - Données d'emplacement 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é.

Alertes : Alerte 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"}

# Compte des 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 (connected, disconnected)

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

Alertes : Alerte 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 par rapport aux abonnés non IMS. Détecter les tempêtes d'enregistrement ou les échecs.

Alertes : Définir des alertes pour :

  • Baisse du taux d'enregistrement (peut indiquer des problèmes de réseau)
  • Pics inhabituels dans les enregistrements
  • Ratio élevé d'enregistrements non IMS (afflux de dispositifs 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 emplacement (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.

Alertes : Définir des alertes pour :

  • Baisses soudaines des enregistrements pour un emplacement (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 emplacement
sum by (location) (sms_c_location_active_registrations_count)

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

# Taux d'adoption de l'IMS par emplacement
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)

# Emplacements 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 :

  • route : Route de l'API (par exemple, /api/messages, /api/frontends)

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.

Alertes : 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 croissante

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 complétées, classées par route et code d'état HTTP.

Labels :

  • route : Route de l'API
  • 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.

Alertes : 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 des requêtes

Exemple de requête :

# Taux de requêtes par point de terminaison
sum by (route) (rate(phoenix_endpoint_stop_count[5m]))

# Taux d'erreur par point de terminaison
sum by (route) (rate(phoenix_endpoint_stop_count{status=~"5.."}[5m])) /
sum by (route) (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 l'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.

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

Exemple de requête :

# Taux d'exceptions 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 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é.

Alertes : Alerte 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.

Alertes : Alerte sur un taux de croissance élevé soutenu.


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.

Alertes : Alerte lorsque cela dépasse systématiquement 10 * le 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.

Alertes : Alerte lorsque le nombre de processus approche la limite (par défaut 262 144).


Collecte et interrogation des métriques

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

  • Tailles et âges des files d'attente
  • Tailles des tables Mnesia
  • Statistiques du 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 entre la réception du message et 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 visible par l'utilisateur.


Efficacité du cache ENUM

Mesurer à quel point le cache ENUM fonctionne bien :

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 forte variance de trafic.


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 : Utilisé pour identifier les routes chaudes pour l'optimisation et la planification de capacité.


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

Surveiller si la file d'attente des 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 élevé d'échecs de routageAugmentation de routing_failed_countCritiqueLes messages ne peuvent pas être routés
Arriéré de file d'attentequeue_size_pending > seuilAvertissementMessages s'accumulant
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élai 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 des files d'attente (en attente, échouées, livrées)
  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

Conservation des métriques

Paramètres de conservation 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érifiez sms_c_message_received_count - Les messages sont-ils reçus ?
  2. Vérifiez sms_c_routing_failed_count - Sont-ils routés ?
  3. Vérifiez sms_c_delivery_queued_count - Sont-ils mis en file d'attente ?
  4. Vérifiez sms_c_delivery_failed_count - Les tentatives de livraison échouent-elles ?
  5. Vérifiez les labels dest_smsc pour identifier la destination problématique

Scénario : Traitement de message lent

Étapes d'investigation :

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

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

Étapes d'investigation :

  1. Vérifiez la tendance sms_c_queue_size_pending - Est-elle en croissance ?
  2. Vérifiez sms_c_delivery_attempted_count - Des tentatives de livraison ont-elles lieu ?
  3. Vérifiez sms_c_delivery_failed_count - Échouent-elles ?
  4. Vérifiez sms_c_delivery_time_delta_delta_ms - La livraison prend-elle trop de temps ?
  5. Vérifiez 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])))

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)

Échecs de routage par minute :

rate(sms_c_routing_failed_count[5m]) * 60

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 (rapide)
rate(sms_c_enum_cache_hit_count[5m])

# Non cachées (nécessite 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

Compte des routes :

sms_c_mnesia_table_size_record_count{table="sms_route"}

Compte des règles de traduction :

sms_c_mnesia_table_size_record_count{table="translation_rule"}

Exemples de tableaux 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 dual (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 du routage.

Panneaux :

  1. Messages par type de source (Diagramme 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 :
      • Identifiant de route
      • 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 à aires empilées
    • 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és 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 de l'arriéré de file d'attente (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 dans les 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 = up, 0 = down
    • 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 train de se remplir. 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."

File de lettres mortes en croissance :

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 d'attente des 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 à 95e percentile : {{ $value }}"
description: "Les messages nécessitent 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 à 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.)