Référence des Métriques OmniEPDG
OmniEPDG expose des métriques Prometheus pour surveiller les flux d'authentification, le cycle de vie des sessions, la signalisation Diameter et la santé du système. Les métriques sont servies via HTTP pour le scraping par Prometheus.
Table des Matières
- Point de terminaison des métriques
- Configuration
- Catégories de métriques
- Intégration Prometheus
- Exemples de requêtes
- Règles d'alerte
Point de terminaison des métriques
OmniEPDG expose des métriques à :
http://<host>:9568/metrics
Le point de terminaison renvoie des métriques au format d'exposition Prometheus, compatible avec Prometheus, Grafana et d'autres outils de surveillance.
Configuration
Configurez le point de terminaison des métriques dans config/runtime.exs :
config :omniepdg,
prometheus: %{
port: 9568
}
| Paramètre | Type | Par défaut | Var Env | Description |
|---|---|---|---|---|
port | Entier | 9568 | PROMETHEUS_PORT | Port HTTP pour le point de terminaison /metrics |
Catégories de métriques
Métriques de session IKEv2
Métriques suivant l'établissement de tunnel IKEv2 sur l'interface SWu.
Métrique: epdg_ikev2_session_initiated_count
Type: Compteur
Description: Total des échanges IKE_SA_INIT initiés. S'incrémente lorsqu'un UE initie l'établissement du tunnel.
Métrique: epdg_ikev2_session_established_count
Type: Compteur
Description: Total des SAs IKE établis avec succès. S'incrémente après une authentification EAP-AKA réussie et la création de Child SA.
Métrique: epdg_ikev2_session_failed_count
Type: Compteur
Description: Total des échecs d'établissement de SA IKE
Étiquettes:
reason- Raison de l'échec (par exemple,auth_failed,timeout,invalid_proposal)
Métriques d'authentification EAP
Métriques suivant les flux d'authentification EAP-AKA par RFC 4187. OmniEPDG prend également en charge EAP-AKA' par RFC 5448, avec le type d'authentification sélectionné automatiquement en fonction du préfixe d'identité NAI de l'UE.
Métrique: epdg_eap_identity_count
Type: Compteur
Description: Total des requêtes EAP-Identity reçues des UEs
Métrique: epdg_eap_aka_challenge_count
Type: Compteur
Description: Total des défis EAP-AKA envoyés aux UEs
Métrique: epdg_eap_aka_success_count
Type: Compteur
Description: Total des authentifications EAP-AKA réussies
Métrique: epdg_eap_aka_failure_count
Type: Compteur
Description: Total des authentifications EAP-AKA échouées
Étiquettes:
reason- Raison de l'échec (par exemple,res_mismatch,invalid_identity,authentication_rejected)
Métrique: epdg_eap_aka_sync_failure_count
Type: Compteur
Description: Total des échecs de synchronisation du numéro de séquence EAP-AKA (SQN). Indique un décalage de numéro de séquence USIM/HSS nécessitant une resynchronisation.
Métriques de sécurité d'authentification
Métriques pour la couche de sécurité d'authentification. Voir le Guide de Sécurité pour les détails de configuration.
Métrique: epdg_auth_verification_failed_count
Type: Compteur
Description: Total des échecs de vérification de la charge utile AUTH. Indique des attaques potentielles de type homme du milieu ou des bogues d'implémentation.
Métrique: epdg_auth_rate_limited_count
Type: Compteur
Description: Total des tentatives d'authentification bloquées par limitation de débit
Étiquettes:
type- Raison du blocage :ip(seuil par IP dépassé) ouimsi(seuil par IMSI dépassé)
Exemples de requêtes:
# Tentatives limitées par minute
rate(epdg_auth_rate_limited_count[1m])
# Limité par type
sum by (type) (rate(epdg_auth_rate_limited_count[5m]))
Métrique: epdg_auth_geoip_blocked_count
Type: Compteur
Description: Total des tentatives d'authentification bloquées par filtrage de pays GeoIP
Étiquettes:
country- Code de pays ISO 3166-1 alpha-2 (par exemple,CN,RU), ouUNKNOWNpour les IP qui n'ont pas pu être géolocalisées
Exemples de requêtes:
# Blocs GeoIP par minute
rate(epdg_auth_geoip_blocked_count[1m])
# Pays les plus bloqués
topk(10, sum by (country) (epdg_auth_geoip_blocked_count))
Métrique: epdg_esp_replay_detected_count
Type: Compteur
Description: Total des paquets ESP rejetés en raison de la détection de relecture (par RFC 4303). Indique des attaques potentielles de relecture ou des problèmes de réseau causant un réarrangement des paquets.
Métriques Diameter SWx
Métriques pour l'interface SWx entre ePDG et HSS selon 3GPP TS 29.273.
Métrique: epdg_diameter_swx_mar_count
Type: Compteur
Description: Total des Multimedia-Auth-Requests envoyés au HSS pour la récupération de vecteurs d'authentification
Étiquettes:
result- Résultat de la requête :successoufailure
Métrique: epdg_diameter_swx_sar_count
Type: Compteur
Description: Total des Server-Assignment-Requests envoyés au HSS pour l'enregistrement/désenregistrement
Étiquettes:
result- Résultat de la requête :successoufailure
Métrique: epdg_diameter_swx_mar_latency_ms
Type: Histogramme
Description: Temps de réponse MAR en millisecondes
Seaux: 50, 100, 250, 500, 1000, 2500 ms
Métrique: epdg_diameter_swx_sar_latency_ms
Type: Histogramme
Description: Temps de réponse SAR en millisecondes
Seaux: 50, 100, 250, 500, 1000, 2500 ms
Métrique: epdg_diameter_swx_pending_count
Type: Jauge
Description: Nombre actuel de requêtes SWx en attente de réponse. Des valeurs élevées indiquent une congestion HSS ou des problèmes de connectivité.
Métriques Diameter S6b
Métriques pour l'interface S6b entre le serveur AAA et le PGW selon 3GPP TS 29.273. Applicable uniquement en mode GTP.
Métrique: epdg_diameter_s6b_aar_count
Type: Compteur
Description: Total des AA-Requests traités pour l'autorisation de session
Étiquettes:
result- Résultat de la requête :successoufailure
Métrique: epdg_diameter_s6b_str_count
Type: Compteur
Description: Total des Session-Termination-Requests traités
Métrique: epdg_diameter_s6b_active_sessions_count
Type: Jauge
Description: Nombre actuel de sessions S6b actives
Métriques de cycle de vie des sessions
Métriques suivant la création et la terminaison de sessions PDN.
Métrique: epdg_session_created_count
Type: Compteur
Description: Total des sessions créées
Étiquettes:
vpn_mode- Mode VPN :simpleougtp
Métrique: epdg_session_terminated_count
Type: Compteur
Description: Total des sessions terminées
Étiquettes:
reason- Raison de la terminaison :user_request,timeout,error,admin
Métrique: epdg_sessions_active_count
Type: Jauge
Description: Nombre actuel de sessions actives. Interrogé toutes les 5 secondes.
Métrique: epdg_sessions_by_state_count
Type: Jauge
Description: Sessions regroupées par état FSM
Étiquettes:
state- État de la session (par exemple,init,eap_identity,eap_aka_challenge,authenticated,established)
Métrique: epdg_auth_duration_ms
Type: Histogramme
Description: Durée du flux d'authentification complet de IKE_SA_INIT à session établie
Seaux: 100, 250, 500, 1000, 2500, 5000, 10000 ms
Métrique: epdg_session_duration_seconds
Type: Histogramme
Description: Durée de vie de la session de l'établissement à la terminaison
Seaux: 60, 300, 900, 1800, 3600, 7200, 14400 secondes (1 min à 4 heures)
Métriques du plan de données ESP
Métriques pour le traitement des paquets ESP selon RFC 4303.
Métrique: epdg_esp_packets_in_count
Type: Compteur
Description: Total des paquets ESP décryptés avec succès (direction UE → réseau)
Métrique: epdg_esp_packets_out_count
Type: Compteur
Description: Total des paquets ESP chiffrés (direction réseau → UE)
Métrique: epdg_esp_bytes_in_total
Type: Jauge
Description: Total des octets décryptés des paquets ESP
Métrique: epdg_esp_bytes_out_total
Type: Jauge
Description: Total des octets chiffrés dans les paquets ESP
Métriques de pool IP
Métriques pour la gestion de pool d'adresses IP en mode VPN simple.
Métrique: epdg_ip_allocated_count
Type: Compteur
Description: Total des adresses IP allouées
Étiquettes:
type- Type d'adresse :ipv4ouipv6
Métrique: epdg_ip_released_count
Type: Compteur
Description: Total des adresses IP libérées
Étiquettes:
type- Type d'adresse :ipv4ouipv6
Métrique: epdg_ip_pool_allocated_count
Type: Jauge
Description: Nombre actuel d'adresses IP allouées
Métrique: epdg_ip_pool_available_count
Type: Jauge
Description: Nombre actuel d'adresses IP disponibles dans le pool
Métrique: epdg_ip_pool_utilization_ratio
Type: Jauge
Description: Utilisation du pool IP en tant que ratio de 0.0 à 1.0. Des valeurs approchant 1.0 indiquent un risque d'épuisement du pool.
Métriques VM
Métriques de la machine virtuelle Erlang/BEAM pour la surveillance de la santé du système.
Métrique: vm_memory_total
Type: Jauge
Unité: Octets
Description: Mémoire totale allouée par la VM
Métrique: vm_memory_processes
Type: Jauge
Unité: Octets
Description: Mémoire utilisée par les processus Erlang
Métrique: vm_memory_binary
Type: Jauge
Unité: Octets
Description: Mémoire utilisée pour les binaires (y compris les tampons de paquets)
Métrique: vm_memory_ets
Type: Jauge
Unité: Octets
Description: Mémoire utilisée par les tables ETS (état de session, registres)
Métrique: vm_system_info_process_count
Type: Jauge
Description: Nombre de processus Erlang en cours d'exécution
Métrique: vm_system_info_port_count
Type: Jauge
Description: Nombre de ports ouverts (sockets, descripteurs de fichiers)
Métrique: vm_statistics_run_queue
Type: Jauge
Description: Longueur totale des files d'attente d'exécution du planificateur. Des valeurs élevées indiquent une saturation du CPU.
Intégration Prometheus
Configuration de Scrape
Ajoutez OmniEPDG à votre prometheus.yml :
scrape_configs:
- job_name: 'omniepdg'
scrape_interval: 15s
static_configs:
- targets: ['epdg-host:9568']
labels:
instance: 'epdg-01'
environment: 'production'
Découverte de Service
Pour les déploiements Kubernetes, utilisez la découverte de service :
scrape_configs:
- job_name: 'omniepdg'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app]
action: keep
regex: omniepdg
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
target_label: __address__
regex: (.+)
replacement: ${1}:9568
Exemples de requêtes
Taux de succès d'authentification
# Taux de succès sur 5 minutes
sum(rate(epdg_eap_aka_success_count[5m]))
/
(sum(rate(epdg_eap_aka_success_count[5m])) + sum(rate(epdg_eap_aka_failure_count[5m])))
Taux d'établissement de session
# Sessions établies par seconde
rate(epdg_ikev2_session_established_count[5m])
Latence d'authentification (p95)
histogram_quantile(0.95, sum(rate(epdg_auth_duration_ms_bucket[5m])) by (le))
Latence HSS (p99)
histogram_quantile(0.99, sum(rate(epdg_diameter_swx_mar_latency_ms_bucket[5m])) by (le))
Sessions actives
epdg_sessions_active_count
Utilisation du pool IP
epdg_ip_pool_utilization_ratio * 100
Débit ESP
# Octets par seconde (entrant)
rate(epdg_esp_bytes_in_total[5m])
# Paquets par seconde (dans les deux directions)
rate(epdg_esp_packets_in_count[5m]) + rate(epdg_esp_packets_out_count[5m])
Répartition des échecs par raison
# Échecs EAP par raison
sum by (reason) (rate(epdg_eap_aka_failure_count[5m]))
# Terminaisons de session par raison
sum by (reason) (rate(epdg_session_terminated_count[5m]))
Règles d'alerte
Exemples de règles d'alerte Prometheus pour OmniEPDG :
groups:
- name: omniepdg
rules:
# Taux d'échec d'authentification élevé
- alert: OmniEPDGHighAuthFailureRate
expr: |
sum(rate(epdg_eap_aka_failure_count[5m]))
/
(sum(rate(epdg_eap_aka_success_count[5m])) + sum(rate(epdg_eap_aka_failure_count[5m])))
> 0.1
for: 5m
labels:
severity: warning
annotations:
summary: "Taux d'échec d'authentification EAP-AKA élevé"
description: "Le taux d'échec d'authentification est {{ $value | humanizePercentage }} au cours des 5 dernières minutes"
# Pool IP proche de l'épuisement
- alert: OmniEPDGIPPoolLow
expr: epdg_ip_pool_utilization_ratio > 0.9
for: 5m
labels:
severity: warning
annotations:
summary: "Utilisation du pool IP supérieure à 90%"
description: "Le pool IP est {{ $value | humanizePercentage }} utilisé"
# Pool IP épuisé
- alert: OmniEPDGIPPoolExhausted
expr: epdg_ip_pool_available_count == 0
for: 1m
labels:
severity: critical
annotations:
summary: "Pool IP épuisé"
description: "Aucune adresse IP disponible pour de nouvelles sessions"
# Latence HSS élevée
- alert: OmniEPDGHSSLatencyHigh
expr: |
histogram_quantile(0.95, sum(rate(epdg_diameter_swx_mar_latency_ms_bucket[5m])) by (le))
> 1000
for: 5m
labels:
severity: warning
annotations:
summary: "Latence HSS (SWx) élevée"
description: "Le 95ème percentile de la latence MAR est {{ $value }}ms"
# Arriéré de requêtes SWx en attente
- alert: OmniEPDGSWxBacklog
expr: epdg_diameter_swx_pending_count > 100
for: 2m
labels:
severity: warning
annotations:
summary: "Arriéré de requêtes SWx en cours de constitution"
description: "{{ $value }} requêtes SWx en attente"
# Mémoire VM élevée
- alert: OmniEPDGMemoryHigh
expr: vm_memory_total > 2147483648
for: 10m
labels:
severity: warning
annotations:
summary: "Utilisation de la mémoire OmniEPDG élevée"
description: "L'utilisation de la mémoire VM est {{ $value | humanize1024 }}"
# Surcharge du planificateur
- alert: OmniEPDGSchedulerOverload
expr: vm_statistics_run_queue > 10
for: 5m
labels:
severity: warning
annotations:
summary: "File d'attente d'exécution du planificateur Erlang élevée"
description: "La longueur de la file d'attente d'exécution est {{ $value }}, indiquant une saturation du CPU"
# Aucune session (problème de service potentiel)
- alert: OmniEPDGNoSessions
expr: epdg_sessions_active_count == 0 and epdg_ikev2_session_initiated_count > 0
for: 10m
labels:
severity: warning
annotations:
summary: "Aucune session active malgré des tentatives de connexion"
description: "Des sessions sont initiées mais aucune n'est active"
# Activité de limitation de débit élevée (attaque potentielle)
- alert: OmniEPDGHighRateLimiting
expr: rate(epdg_auth_rate_limited_count[5m]) > 10
for: 5m
labels:
severity: warning
annotations:
summary: "Taux élevé de tentatives d'authentification bloquées"
description: "{{ $value | printf \"%.1f\" }} tentatives d'authentification bloquées par seconde"
# Pic de blocage GeoIP (attaque potentielle d'une région spécifique)
- alert: OmniEPDGGeoIPBlockingSpike
expr: |
rate(epdg_auth_geoip_blocked_count[5m]) > 5
for: 5m
labels:
severity: warning
annotations:
summary: "Activité de blocage GeoIP élevée"
description: "{{ $value | printf \"%.1f\" }} connexions bloquées par seconde par GeoIP"
# Attaques de relecture ESP détectées
- alert: OmniEPDGReplayAttack
expr: rate(epdg_esp_replay_detected_count[5m]) > 0
for: 2m
labels:
severity: warning
annotations:
summary: "Attaques de relecture ESP détectées"
description: "{{ $value | printf \"%.1f\" }} tentatives de relecture par seconde"
# Échecs de vérification AUTH (potentiel MITM)
- alert: OmniEPDGAuthVerificationFailures
expr: rate(epdg_auth_verification_failed_count[5m]) > 0
for: 2m
labels:
severity: critical
annotations:
summary: "Échecs de vérification de la charge utile AUTH détectés"
description: "Attaque potentielle de type homme du milieu ou bogue d'implémentation"