Skip to main content

Monitoring And Targets

Scope

Applies to every DynamoAI product. The guardrail path metrics are DynamoGuard specific.

Signals To Collect

The platform runs as standard Kubernetes workloads. Liveness and readiness probes drive in-region recovery, pod and container metrics reach whatever monitoring stack the cluster runs, and application logs are written to standard output for collection.

For a paired-region deployment, collect these five signals in both regions.

SignalWhy it mattersSource
Regional health probe resultDrives automatic withdrawal from routingYour global load balancer
Replica distribution across zonesA deployment configured for zone spread can still be co-locatedkubectl get pods -o wide compared against node zone labels
Datastore replication lagSets the recovery point at the moment of promotionYour managed datastore metrics
Guardrail pod readiness per policyA policy without a ready pod fails every request naming itKubernetes readiness state
Enabled and trained policy count per regionParity between primary and standby. A raw policy count is not a parity check on its own, because policies differ by enabled state and training statusPlatform API, compared between regions

Guardrail Path Metrics

The API and the moderation worker both export OpenTelemetry metrics on the guardrail path.

MetricSourceLabels
dynamoguard_successful_requestsAPI, analyze and chat endpoints onlymodelId
dynamoguard_failed_requestsAPI, analyze and chat endpoints onlymodelId, failureType (HTTP status)
dynamoguard_e2e_latencyAPI, analyze and chat endpoints only, millisecondsmodelId
dynamoguard_moderation_<guardrail>_num_requestsModeration worker, one counter per built-in guardrail typeNone

The worker counters cover the built-in guardrail types: PII redaction, input toxicity, output toxicity, RAG hallucination, input relevance, response relevance, prompt injection, legal advice and financial advice. They count by guardrail type, not by policy, so they do not give you a per-policy request rate for custom policies.

Export is off until an OTLP endpoint is set

Both exporters are gated on configuration. The moderation worker logs a warning and exports nothing when its OTLP metrics endpoint is unset. An empty series therefore means the export is unconfigured, not that the guardrail path is idle. Confirm the endpoint is set in both regions before treating these metrics as a failover signal.

Configuring Metric Export

Set these on both the API and the moderation worker, in every region. Without them the guardrail metrics above are never produced.

VariableComponentCarries
OTEL_APPLICATION_METRICS_ENDPOINTAPI and moderation workerThe dynamoguard_* series and the per-guardrail counters
OTEL_METRICS_ENDPOINTAPIRuntime and system metrics
OTEL_APPLICATION_TRACES_ENDPOINTAPITraces

Point them at an OTLP collector reachable from the cluster:

OTEL_APPLICATION_METRICS_ENDPOINT=http://<collector>:4318/v1/metrics
OTEL_METRICS_ENDPOINT=http://<collector>:4318/v1/metrics
OTEL_APPLICATION_TRACES_ENDPOINT=http://<collector>:4318/v1/traces
Use the HTTP signal URL, not a gRPC host and port

Both components use the OTLP HTTP exporter. Give each variable the full signal path on the HTTP port, such as http://collector:4318/v1/metrics. A gRPC-style endpoint like collector:4317, or a bare host with no path, does not report an error. It exports nothing, and the result is indistinguishable from a guardrail path that is simply idle.

Recovery Objectives

The platform is deployed into infrastructure you operate: your clusters, node pools, datastores, network and identity provider. Availability is a property of that deployment, so DynamoAI does not publish an availability percentage for it.

The configuration is designed to meet these objectives.

ObjectiveDesign target
Recovery point, synchronously replicated dataNo loss of acknowledged writes
Recovery point, asynchronously replicated dataReplication lag at the moment of promotion
Recovery time, failure within a regionMinutes, automatic
Recovery time, regional failoverTens of minutes, dominated by model load unless the standby holds GPU capacity

Every figure above is a budget until a drill has measured it in your environment.

Drills

Exercise the procedure on a schedule and record the measured recovery time.

At minimum, run a datastore promotion and a full platform rebuild against restored data. In practice the configuration parity check fails more often than the restore does, which makes it the part of the drill worth repeating.

# Replica placement in each region
kubectl --context <ctx> -n <ns> get pods \
-o custom-columns='NAME:.metadata.name,NODE:.spec.nodeName'

# Zone of each node
kubectl --context <ctx> get nodes \
-o custom-columns='NODE:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone'

# Disruption budgets permit at least one disruption
kubectl --context <ctx> -n <ns> get pdb

Compare the policy list returned by each region before recording the pair as ready.