Architecture

Supervision et métriques

Sur cette page

Chaque serveur TOSIAM expose ses métriques au format Prometheus sur <contexte>/metrics, par exemple https://am.example.com/tosiam/metrics. Un serveur Prometheus les collecte ; la page Métriques de la console et, si vous en avez un, Grafana les interrogent ensuite dans Prometheus. Pour savoir si un serveur répond, isAlive.jsp suffit.

texte
Serveurs TOSIAM ──/tosiam/metrics──▶ Prometheus ◀──API── Console (page Métriques), Grafana

Activer le point /metrics#

Le point de terminaison est désactivé à l’installation, et protégé par une authentification HTTP Basic dès qu’il est activé : sans les bons identifiants, il répond 401. Il se règle dans le service global Monitoring Prometheus (console : Services globaux, groupe observabilité ; iPlanetAMPrometheusService en ligne de commande).

Service global Monitoring Prometheus : accès authentifié activé, nom utilisateur prometheus, mot de passe Service global Monitoring Prometheus : accès authentifié activé, nom utilisateur prometheus, mot de passe
Activation de l’accès aux métriques (1), puis identifiants que Prometheus présentera (2).
Faites défiler le tableau
RéglageAttributRôle
Activer l’accès authentifié aux métriquesiplanet-am-prometheus-enabledfalse par défaut : /metrics répond toujours 401.
Nom utilisateuriplanet-am-prometheus-usernameIdentifiant que Prometheus présente.
Mot de passeiplanet-am-prometheus-userpasswordMot de passe associé, stocké chiffré.
URL Prometheusiplanet-am-prometheus-urlAdresse du serveur Prometheus, utilisée par la page Métriques de la console (voir plus bas). Onglet API Parameters dans la console.

Les trois premiers réglages sont lus à chaque collecte : une modification s’applique sans redémarrage. Ce ne sont pas des comptes TOSIAM : choisissez un identifiant dédié à la collecte.

Avec ssoadm :

bash
cat > prometheus.properties <<'EOF'
iplanet-am-prometheus-enabled=true
iplanet-am-prometheus-username=prometheus
iplanet-am-prometheus-userpassword=<mot de passe>
EOF
chmod 600 prometheus.properties
ssoadm set-attr-defs -s iPlanetAMPrometheusService -t Global -D prometheus.properties
rm prometheus.properties

Vérification :

bash
curl -s -u prometheus:<mot de passe> https://am.example.com/tosiam/metrics | head

La réponse est au format texte Prometheus (text/plain; version=0.0.4).

Configurer Prometheus#

Déclarez chaque serveur TOSIAM comme cible, avec le chemin /<contexte>/metrics et les identifiants Basic :

yaml
scrape_configs:
  - job_name: tosiam
    metrics_path: /tosiam/metrics
    scheme: https
    basic_auth:
      username: prometheus
      password_file: /etc/prometheus/tosiam-metrics-password
    static_configs:
      - targets:
          - tosiam1.example.com:8443
          - tosiam2.example.com:8443

Interrogez chaque serveur séparément : chaque instance a ses propres compteurs, et l’agrégation se fait dans Prometheus (sum by (...)). Sans basic_auth, la cible apparaît down avec l’erreur 401 Unauthorized dans Status › Targets.

Métriques exposées#

Les métriques sont produites avec Micrometer. Les noms suivent les conventions Prometheus : un compteur se termine par _total ; une durée produit _seconds_count, _seconds_sum, _seconds_max et, pour les histogrammes, _seconds_bucket.

Faites défiler le tableau
DomaineMétriquesLabels
Authentificationam_authentication_attempts_total, am_authentication_success_total, am_authentication_failure_total ; durée am_authentication_latency_secondsrealm, service, module (et outcome pour la durée)
Sessionsam_session_active (jauge), am_session_total (sessions créées), am_session_destroyed_total, am_session_timeout_totalreason (destroy, logout), type (idle, max)
OAuth2am_oauth2_access_token_issued_total, am_oauth2_refresh_token_issued_total, am_oauth2_token_introspection_total, am_oauth2_token_revoked_totalrealm, grant_type, token_type
SAML 2.0am_saml_assertions_issued_total, am_saml_response_validation_success_total, am_saml_idp_sso_success_total, am_saml_idp_sso_failure_totalrealm, idp, fault_code
Annuaire LDAPam_ldap_connections_active (jauge), am_ldap_connections_acquired_total, am_ldap_operations_total ; durée am_ldap_operation_latency_secondsoperation (search, bind)
Cachesam_cache_entries (jauge), am_cache_hits_total, am_cache_misses_total, am_cache_removals_totalcache (sessionCache, policyCache…)
Scriptsam_script_execution_total, am_script_execution_errors_total ; durée am_script_execution_time_secondsscript, language, error_type
Requêtes HTTPhttp_server_requests_seconds (histogramme)method, status, uri, realm
JVM et systèmejvm_memory_*, jvm_gc_*, jvm_threads_*, jvm_classes_*, process_cpu_usage, system_cpu_usage, system_load_average_1marea, id…

Un compteur n’apparaît qu’après son premier événement : un serveur qui n’a encore refusé aucune connexion n’expose pas am_authentication_failure_total.

Le label uri des requêtes HTTP est normalisé pour limiter le nombre de séries : les consoles (/console, /console-legacy, /XUI) sont regroupées sous leur préfixe, et les identifiants (UUID, nombres, jetons) remplacés par {id}.

S’y ajoutent des mesures plus anciennes, sans préfixe am_, sur lesquelles s’appuie la page Métriques de la console : AuthenticationServiceV1_authenticate, TokenEndpointResource_token, CTS_create (et CTS_read, CTS_update, CTS_delete), DJLDAPv3Repo_authenticate, CTS_queue_size, et les tailles de cache InternalSessionCache_cache, IdCachedServicesImpl_idRepoCache, CachedSMSEntry_smsEntries.

Compter une étape d’un parcours#

Le nœud MeterNode ajoute vos propres compteurs : placé dans un graphe d’authentification, il incrémente à chaque passage un compteur dont vous choisissez le nom (am_graph_meter_total par défaut) et les labels. Le label realm est ajouté par défaut.

Exemples de requêtes#

promql
# Taux d'échec d'authentification par royaume, sur 5 minutes
sum by (realm) (rate(am_authentication_failure_total[5m]))
  / sum by (realm) (rate(am_authentication_attempts_total[5m]))

# Sessions actives, toutes instances confondues
sum(am_session_active)

# Jetons d'accès émis par minute, par type d'autorisation
sum by (grant_type) (rate(am_oauth2_access_token_issued_total[5m])) * 60

# 95e centile du temps de réponse de l'authentification REST
histogram_quantile(0.95, sum by (le) (rate(http_server_requests_seconds_bucket{uri="/json/authenticate"}[5m])))

La page Métriques de la console#

La page Métriques de la console affiche des graphes tirés de Prometheus. Elle n’interroge pas /metrics : le navigateur de l’administrateur appelle directement l’API de Prometheus (/api/v1/query_range) à l’adresse du réglage URL Prometheus, modifiable aussi par le bouton Paramètres de la page. Cette adresse doit donc être joignable depuis le poste de l’administrateur. Tant qu’elle n’est pas renseignée, la page propose de la configurer.

Page Métriques de la console : indicateurs authentifications, jetons émis, latence, sessions actives, et graphes des métriques frontend Page Métriques de la console : indicateurs authentifications, jetons émis, latence, sessions actives, et graphes des métriques frontend
Adresse de Prometheus (1), période (2), indicateurs (3) et choix d’agrégation d’un groupe de graphes (4).

La page montre quatre indicateurs (authentifications, jetons émis, latence d’authentification, sessions actives) et quatre groupes de graphes :

Faites défiler le tableau
GroupeContenu
Métriques frontendTaux et durée des appels à /token et à l’authentification, agrégés globalement, par instance ou par royaume
Métriques backendTaux et durée des écritures CTS et des authentifications LDAP, par instance ou par annuaire
Métriques techniquesMémoire, processeur, disque et réseau des machines : nécessite node_exporter, collecté sous le job node
Métriques internesEntrées en cache (configuration, utilisateurs, sessions) et file d’attente du CTS

La période se choisit entre Temps réel (dernières 24 heures, actualisé toutes les 15 secondes) et Plage personnalisée.

Vérifier l’état d’un serveur#

/tosiam/isAlive.jsp lit la configuration du serveur dans le config store (TosDJ) :

Faites défiler le tableau
RéponseSignification
200 (« Server is ALIVE »)Serveur configuré, config store joignable
500 (« Server is DOWN »)Config store injoignable
302Serveur pas encore configuré, ou mise à jour en attente

Une sonde doit exiger exactement 200 : beaucoup d’outils acceptent les redirections 3xx par défaut.

Pour un équilibreur de charge, retirez un serveur de la ferme quand isAlive.jsp ne répond plus 200. Sous Kubernetes, l’image TOSIAM distingue trois sondes : readiness sur isAlive.jsp, et liveness sur la seule ouverture du port HTTP, pour qu’une panne de TosDJ ne fasse pas redémarrer tous les serveurs.

Voir aussi Scalabilité & haute disponibilité.

Mis à jour le