Phase 7: Observability (Optional)
| User Workload Monitoring (UWM) was already configured in Phase 2 as a required component. UWM provides the foundational Prometheus scraping infrastructure that all other monitoring features depend on. |
This phase adds optional observability enhancements on top of UWM:
-
Tempo Operator - provides the
TempoStackCRD that the RHOAI operator’s Monitoring controller requires for distributed tracing. Without this operator, the Monitoring CR cannot provision tracing infrastructure. -
Red Hat build of OpenTelemetry Operator - provides the
OpenTelemetryCollectorCRD that the RHOAI operator’s Monitoring controller requires. Without this operator, the Monitoring CR fails with: "OpenTelemetryCollector operator must be installed for OpenTelemetry configuration". This blocks the full observability chain: MonitoringStack, ThanosQuerier, Perses, and PrometheusDatasource. -
Cluster Observability Operator (COO) - required for the Observability Dashboard tab in the Red Hat OpenShift AI UI. COO provides the Perses CRDs (
Perses,PersesDatasource,PersesDashboard) that the RHOAI operator uses to deploy the dashboard backend. -
Gateway Telemetry - per-model, per-user, per-subscription usage metrics on the MaaS gateway. Adds fine-grained labels (
model,user,subscription,organization_id,cost_center) to gateway metrics for usage attribution and billing.
All file paths and oc apply commands in this guide are relative to the rhoai-maas-guide repository root. Make sure you have cloned it and are working from its root directory (see Getting Started).
|
| This guide is not a replacement for the official Red Hat OpenShift AI Models as a Service documentation. It is a companion resource with opinionated Kustomize manifests and automation scripts to accelerate deployment. |
Step 1: Install the Tempo Operator
oc apply -k manifests/07-observability/tempo/
Wait for the operator CSV to reach Succeeded:
oc wait csv -n openshift-tempo-operator \
-l operators.coreos.com/tempo-product.openshift-tempo-operator="" \
--for=jsonpath='{.status.phase}'=Succeeded --timeout=300s
Step 2: Install the Red Hat build of OpenTelemetry Operator
oc apply -k manifests/07-observability/opentelemetry/
Wait for the operator CSV to reach Succeeded:
oc wait csv -n openshift-opentelemetry-operator \
-l operators.coreos.com/opentelemetry-product.openshift-opentelemetry-operator="" \
--for=jsonpath='{.status.phase}'=Succeeded --timeout=300s
Step 3: Install the Cluster Observability Operator
oc apply -k manifests/07-observability/coo/
Wait for the operator CSV to reach Succeeded:
oc wait csv -n openshift-cluster-observability-operator \
-l operators.coreos.com/cluster-observability-operator.openshift-cluster-observability="" \
--for=jsonpath='{.status.phase}'=Succeeded --timeout=300s
Step 4: Enable DSCI Monitoring
Now that all three observability operators are installed, configure the DSCI monitoring section to trigger the operator’s observability cascade (MonitoringStack, ThanosQuerier, Perses, tracing):
oc patch dsci default-dsci --type=merge -p '{
"spec": {
"monitoring": {
"namespace": "redhat-ods-monitoring",
"metrics": {
"replicas": 1,
"storage": {
"size": "5Gi",
"retention": "90d"
}
},
"traces": {
"sampleRatio": "0.1",
"storage": {
"backend": "pv",
"retention": "2160h"
}
}
}
}
}'
This step is required for the Observability Dashboard tab in the RHOAI UI to show metrics. Without it, the DSCI monitoring section remains empty (metrics: {}) and the dashboard has no data source.
|
Wait for the DSCI to reconcile:
oc wait --for=jsonpath='{.status.phase}'=Ready dsci/default-dsci --timeout=300s
Step 5: Apply Gateway Telemetry
Once COO is installed and the MaaS gateway is running:
oc apply -k manifests/07-observability/telemetry/
Verification
Check all three observability operators are installed:
oc get csv -n openshift-tempo-operator | grep tempo
# Expected: tempo-operator Succeeded
oc get csv -n openshift-opentelemetry-operator | grep opentelemetry
# Expected: opentelemetry-operator Succeeded
oc get csv -n openshift-cluster-observability-operator | grep cluster-observability-operator
# Expected: cluster-observability-operator Succeeded
Check the required CRDs are registered:
# Tempo
oc get crd tempostacks.tempo.grafana.com
# OpenTelemetry
oc get crd opentelemetrycollectors.opentelemetry.io
# COO / Perses
oc get crd perses.perses.dev
Check the TelemetryPolicy exists:
oc get telemetrypolicies.extensions.kuadrant.io maas-telemetry -n openshift-ingress
Check the Istio Telemetry exists:
oc get telemetry.telemetry.istio.io latency-per-subscription -n openshift-ingress
Appendix
Directory Structure
manifests/07-observability/
tempo/
kustomization.yaml # Tempo operator subscription
namespace.yaml # openshift-tempo-operator namespace
operatorgroup.yaml # Tempo OperatorGroup
subscription.yaml # Tempo Subscription
opentelemetry/
kustomization.yaml # OpenTelemetry operator subscription
namespace.yaml # openshift-opentelemetry-operator namespace
operatorgroup.yaml # OpenTelemetry OperatorGroup
subscription.yaml # OpenTelemetry Subscription
coo/
kustomization.yaml # COO operator subscription
namespace.yaml # COO namespace
operatorgroup.yaml # COO OperatorGroup
subscription.yaml # COO Subscription
telemetry/
gateway-telemetry-policy.yaml # Kuadrant TelemetryPolicy
istio-gateway-telemetry.yaml # Istio Telemetry CR
kustomization.yaml
Next step
Proceed to Phase 8: External Models.