How to Verify a Fresh Install of the Logging Stack
After Installation reports every plugin as installed, walk this checklist to confirm the write path and the read path are both working. Each step ends in one concrete signal, so it is easy to stop at the first thing that is wrong and jump to Troubleshooting.
The checklist runs on any of the storage backends. Points that only apply to one backend are called out inline.
TOC
1.PlatformLogForward/platform-default is Ready2. The data-plane pods are all running3. The log-center Feature CR is on the storage cluster4. The storage schema is presentClickHouse backendOpenSearch backend5. Kafka is receiving records6. A synthetic log appears end-to-end7. Audit and event streams also landWhat to record for the release checklist1. PlatformLogForward/platform-default is Ready
The single top-level readiness signal for the entire storage cluster is:
Every condition should be status: "True". The single top-level signal is Ready=True with reason AllComponentsReady. Under it, the sub-conditions that a fresh install rolls through are MessageQueueReady (Kafka SASL and topic list validated), StorageReady (the external ClickHouse or OpenSearch endpoint is reachable and its schema is initialized), CollectorReady (aggregate-vector Deployment is at full ready-replicas), RazorReady (razor Deployment is at full ready-replicas), and SchemaMigrated (the auto-migration Runnable has converged). If any is False, the message names the sub-step that has not finished — see Troubleshooting: PlatformLogForward stays in Provisioning.
2. The data-plane pods are all running
Even after the PLF is Ready, individual components can be in a soft restart. The one-shot check is:
Every pod should be 1/1 Running. CrashLoopBackOff on aggregate-vector at this point is almost always the schema-migrations init-container (ClickHouse) or the OpenSearch template PUT (OpenSearch) — see the matching entries in Troubleshooting.
On the collection cluster (which may or may not be the same cluster):
Every node in the Log.Kubernetes=true collection scope should have a nevermore pod in Running.
3. The log-center Feature CR is on the storage cluster
The Log Storage operator creates a Feature/log-center CR in cpaas-system on the storage cluster it is installed on. The global cluster's razor-api reads this Feature (synced through cluster-transformer) to discover each storage cluster's endpoint. On the storage cluster:
Fields that should be populated:
spec.type—clickhouseoropensearch, matching the storage backend you installed.spec.secureAddress— the storage cluster's local ALB endpoint (not the global platform URL). If this points at the global platform URL, upgrade the operator; earlier operator builds derived it wrong (Bug 134).spec.secretRef— the name of the callback secret incpaas-systemon the storage cluster; razor-api uses it to authenticate cross-cluster.
4. The storage schema is present
ClickHouse backend
The schema-migrations Job runs once per install and stamps the schema_migrations table with the target version.
dirty should be 0. version should equal the highest number in internal/migrations in the operator image you deployed (the migrations are embedded into the operator binary at build time).
OpenSearch backend
The opensearchinit runner Job PUTs the composable template and the ISM policy. Verify both:
Both should echo the object name. If either 404s, the runner Job did not complete — see the OpenSearch entries in Troubleshooting.
5. Kafka is receiving records
The end of the collection pipeline pushes to Kafka. If aggregate-vector is idle, records are stuck upstream (in nevermore, or in the collector-side Kafka producer).
Repeat after 30 seconds. The offset should climb. If it does not, nevermore is not producing — check kubectl -n cpaas-system logs -l app=nevermore --tail=200 on the collection cluster.
6. A synthetic log appears end-to-end
The full pipeline signal is: emit a log, wait, query it back. Run something with a distinctive marker on any cluster that is collected:
Wait about a minute. On the global cluster, query razor-api for the marker:
The response should include at least one hit. If the hit count is zero, walk the Diagnostic entry points list top-to-bottom.
7. Audit and event streams also land
Log records ride the same topics as events and audit records but under different table families. Confirm both are reaching storage:
Both should return non-zero on any active platform. Zero on audit_data for the ClickHouse backend and a healthy log count often means one of the write-path reshapes was skipped (see the Bug 169 aggvec CH reshape family in the operator's known-issue notes). Zero on OpenSearch's audit-* with a healthy log count means the aggregate-vector event/audit VRL is dropping records — again the operator's OpenSearch reshape branch.
What to record for the release checklist
Once every step above returns green, capture the following as the install baseline for future comparison:
- The operator image tag and razor image tag.
- The
PlatformLogForward.status.storageIdentity— this snapshot ties the running install to the exact ClickHouse database or OpenSearch tenant it wrote to. - The
kafka --describeoutput for the log topics, so a future partition-count change is a comparable diff.
If per-project retention is important to the customer, verify the fresh install honours it. On ClickHouse this uses the log-policy-config ConfigMap and the razor-api cron; on OpenSearch it does not take effect at all — see Known OpenSearch backend limitations before you deliver.