See everything
Observability
Metrics, logs, and traces — the watchtower is lit. Prometheus and Grafana watch the workload cluster; Loki and Tempo hold logs and traces on the tooling plane.
Metrics · live
kube-prometheus-stack runs on the workload
cluster. Service monitoring is one contract: expose /metrics, add a ServiceMonitor, get scraped.
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: app1001
namespace: app1001-dev
spec:
selector:
matchLabels:
app: app1001
endpoints:
- port: http
path: /metrics - ▸ Prometheus (kube-prometheus-stack)
- ▸ Grafana
Logs · live
Loki aggregates logs on the tooling plane,
queryable from Grafana Explore with LogQL — no more per-pod kubectl logs spelunking.
{namespace="app1001-dev"} |= "ERROR" The Loki store and the Grafana datasource are live — and workload-cluster logs now ship into it: collectors feed a Vector aggregator that fans out to this Loki and to a hosted Loki in Grafana Cloud, with a scheduled job re-proving delivery every few hours.
Traces · live
Tempo stores distributed traces on the tooling plane, wired into Grafana as a datasource.
In Grafana Explore, pick the Tempo datasource and search by service name to follow a request across services — once the demo apps are instrumented, that is the next step.
Metrics tell you what happened, logs tell you why, traces tell you where. The lab now keeps all three.
Grafana · the single pane
Grafana runs on the workload cluster, provisioned by GitOps with three datasources: Prometheus (default, in-cluster), Loki and Tempo (tooling plane). Provisioned dashboards ship per app:
-
Demo Java App
Request rate, error rate, latency p50/p95, JVM heap used.
-
Demo Python App
Request rate, error rate, latency p50/p95.
-
Demo Redis App
App request rate, Redis commands/s, latency p95, connected clients & memory.
Policy as a signal · Kyverno
Kyverno admission control runs on the workload
cluster. The require-signed-images policy
currently audits — every allow/deny decision lands in a PolicyReport you can read like any other cluster signal.
Flipping it to Enforce is the last mile of rhels/team#107.
What's next
- ▸ Wider log forwarding — the Vector pipeline is deployed for the trial namespace; extending collection cluster-wide is the next step.
- ▸ Trace instrumentation — teach the demo apps to emit spans so Tempo has real traces to show.
Next chapter
5. Add an app
You now know the whole machine — workshop, factory floor, delivery line, watchtower. Next, the payoff: shipping your own app.
Read Chapter 5: Add an app →