Observabilité
Métriques, journaux et traces émis par Scrydon — ainsi que les SLO à surveiller.
Scrydon émet des métriques, des journaux et des traces OpenTelemetry. Cette page documente ce qui est disponible et les SLO auxquels vous devez prêter attention.
Métriques
Les services envoient leurs métriques OpenTelemetry en OTLP/HTTP ; rien n'est collecté par scraping. Les métriques et les traces applicatives restent désactivées tant que vous ne donnez pas de collecteur au chart :
observability:
otlpHttpEndpoint: http://otel-collector.monitoring.svc.cluster.local:4318 # OTLP/HTTP, pas gRPC 4317Chaque série est nommée scrydon_<domaine>_<mesure>, avec _total pour les compteurs et _ms pour les durées. Les services exportent toutes les 15 secondes.
| Famille | Émise par | Ce qu'elle indique |
|---|---|---|
scrydon_authorization_* | API Platform | Autorisation centrale : décisions, temps d'évaluation OPA, écritures des preuves d'audit et leurs échecs, requêtes admises et refusées. |
scrydon_audit_journal_failures_total | API Platform | Exécutions arrêtées parce que leur enregistrement d'audit n'a pas pu être rendu durable. |
scrydon_llm_router_* | API Platform | Routage LLM : tours, délai avant le premier jeton, latence des fournisseurs, flux en cours, refus d'admission. |
scrydon_extension_* | API Platform | Appels sortants des extensions : tentatives, nouvelles tentatives, refus et attente d'un créneau. |
scrydon_acs_* | API Platform, api-agentic | Poignées de main Agent Control Standard, décisions du guardian et entrées refusées. |
scrydon_workflow_executions_active, scrydon_process_flows_active, scrydon_paused_* | api-agentic | Workflows et process flows en cours, et durée d'attente des exécutions en pause. |
scrydon_workflow_retention_* | Hôtes de workflows | Le nettoyage de rétention : candidats, suppressions, erreurs. |
scrydon_table_write* | api-table | Écritures de tables gérées en cours et refusées à l'admission. |
scrydon_ontology_materialization_* | api-ontology | Passes de matérialisation de l'ontologie, lignes affirmées et ignorées, échecs. |
scrydon_notebook_* | Analytics | Runtimes de notebooks et leur temps de préparation. |
Une série qui n'apparaît jamais signifie en général que otlpHttpEndpoint est vide ou pointe vers le port gRPC.
SLO suggérés
| SLO | Cible | Pourquoi |
|---|---|---|
| Taux de réussite des connexions | ≥ 99,5 % | En dessous, cela indique un problème avec l'IdP ou le réseau. |
| Taux de réussite des exécutions de workflow | ≥ 99 % | Par workflow ; certains échecs sont attendus pour les exécutions conditionnées par un évaluateur. |
| Délai de transfert des journaux d'audit | ≤ 60 s | Les outils en aval des audits ont besoin d'un flux quasi temps réel. |
| Requête d'autorisation p95 | ≤ 100 ms | Couvre l'admission, OPA, la preuve atomique et la réponse. Le calcul utilise scrydon_authorization_request_duration_ms. |
| Évaluation OPA p95 | ≤ 50 ms | Détecte la saturation du moteur de politique indépendamment du stockage des preuves. |
| Transaction de preuve d'autorisation p95 | ≤ 75 ms | Détecte la contention de chaîne ou la pression sur la base de données. |
| Rejets de capacité sous charge stable | 0 | Un rejet signifie que la limite de concurrence centrale a été atteinte avant tout travail OPA ou base de données. |
| Requête de table gérée p95 | ≤ 2 s | Pour les requêtes de style tableau de bord ; les requêtes analytiques peuvent intentionnellement être plus longues. |
Ces valeurs sont indicatives — ajustez-les à votre charge de travail.
Dépannage des preuves d'autorisation
Chaque accord, refus et résultat indéterminé n'est renvoyé qu'après qu'API Platform a enregistré atomiquement sa preuve dans l'Audit Log et son registre d'idempotence. Toute hausse de scrydon_authorization_evidence_append_failures_total ou toute série durable de réponses 503 constitue un incident ; l'opération protégée n'est pas exécutée. Rétablissez OPA ou la base de données de preuves, puis réessayez avec la même clé de décision stable. Une répétition identique est dédupliquée, tandis qu'une réutilisation conflictuelle renvoie 409.
L'Event Backbone des workflows est un transport distinct pour la collaboration et les événements de domaine. Son état ne prouve pas l'exhaustivité des preuves d'autorisation, et ces preuves ne dépendent pas de son activation.
Traces
Des traces OpenTelemetry sont émises pour :
- Chaque requête API (de l'entrée à la sortie).
- Chaque exécution de workflow (span parent) avec des spans enfants par exécution de bloc.
- Chaque appel LLM via Cortex (avec attributs de modèle, fournisseur, latence, coût).
- Chaque lecture de table gérée avec la décision de politique en attribut.
Une requête qui traverse plusieurs services forme une seule trace. Chaque service transmet l'en-tête W3C traceparent dans ses appels vers les autres services : chaque saut apparaît comme un span enfant de l'appelant. Si vous exportez aussi les spans Dapr (ci-dessous), les spans du sidecar rejoignent cette même trace.
Configuration des traces distribuées Dapr
Scrydon utilise Dapr pour la communication entre services. Par défaut,
les spans Dapr sont écrits dans les journaux du sidecar (exporter: stdout) — ils ne sont pas envoyés
à un collecteur.
Pour envoyer les traces distribuées Dapr vers un collecteur compatible OTLP (SigNoz, Grafana Tempo,
Jaeger, un OpenTelemetry Collector, Honeycomb, endpoint OTLP Datadog, etc.), définissez les
valeurs dapr.tracing dans votre chart Helm scrydon :
dapr:
tracing:
samplingRate: "1" # "1" = 100% ; "0" = désactivé ; valeurs fractionnaires acceptées
exporter: otel # stdout (défaut, spans vers les journaux sidecar) | otel (envoi vers le collecteur)
otel:
endpointAddress: "my-otel-collector.observability.svc.cluster.local:4317"
protocol: grpc # grpc | http
isSecure: false # true si le point de terminaison du collecteur requiert TLS| Valeur | Défaut | Description |
|---|---|---|
dapr.tracing.samplingRate | "1" | Taux d'échantillonnage des traces Dapr. "1" = 100 %, "0" = désactivé. |
dapr.tracing.exporter | stdout | stdout écrit les spans dans les journaux du sidecar (pas de collecteur nécessaire). otel les envoie vers un endpoint OTLP. |
dapr.tracing.otel.endpointAddress | "" | Obligatoire quand exporter: otel. Le host:port de votre collecteur compatible OTLP. |
dapr.tracing.otel.protocol | grpc | grpc (recommandé) ou http. |
dapr.tracing.otel.isSecure | false | Mettez true si le point de terminaison du collecteur requiert TLS. |
Important : exporter: otel avec un endpointAddress vide est une erreur au moment du rendu du chart
— le chart échoue de façon fermée pour éviter qu'une configuration incorrecte des traces n'entraîne
une perte silencieuse de spans.
Exemple — envoi vers un sidecar/DaemonSet OpenTelemetry Collector :
dapr:
tracing:
exporter: otel
otel:
endpointAddress: "otel-collector.monitoring.svc.cluster.local:4317"
protocol: grpc
isSecure: falseExemple — envoi vers Grafana Tempo :
dapr:
tracing:
exporter: otel
otel:
endpointAddress: "tempo.monitoring.svc.cluster.local:4317"
protocol: grpc
isSecure: falseCes exemples utilisent des adresses intra-cluster — adaptez endpointAddress à l'emplacement de
votre collecteur. Le paramètre exporter s'applique à tous les services compatibles Dapr dans le déploiement.
Les spans applicatifs partent vers observability.otlpHttpEndpoint, le même point de terminaison que les métriques ci-dessus. Pointez-le vers votre collecteur : Jaeger, Tempo, Datadog, Honeycomb, Lightstep ou tout autre récepteur OTLP/HTTP.
Une requête d'API dont l'appelant s'est déconnecté avant l'écriture de la réponse est enregistrée avec http.response.status_code 499 (requête fermée par le client). Son span n'est pas marqué en erreur. Excluez 499 lorsque vous calculez un taux d'erreurs serveur : rien n'a échoué, et l'appelant n'a rien reçu.
Accès aux journaux
Les journaux sont en JSON structuré, émis sur stdout. Configurez votre pipeline de journalisation (Loki, Cloud Logging, journaux Datadog, …) pour ingérer les journaux des pods dans les espaces de noms Scrydon.
Champs importants sur chaque ligne de journal :
service— quel sous-système l'a émis.level—info/warn/error/fatal.requestId— identifiant de corrélation entre les services.actorId(dans un contexte utilisateur) — l'utilisateur.organizationId(dans un contexte tenant) — le tenant.
Les journaux ne contiennent jamais de valeurs secrètes ni de données personnelles — celles-ci sont occultées à l'émission. Voir Occultation.
Liens connexes
- Redirection vers le SIEM — pour le volet des événements d'audit.
- Journal d'audit — le journal d'événements interrogeable.