This episode covers the basics of Multigress observability: enabling metrics and logs, integration with Prometheus and Grafana, and inspecting route behavior and gateway health with real data.

Configuration that looks correct on paper can behave differently in the field. That's why you need observability: the ability to look inside the system from the outside. Episode 7 covers the basics of Multigress observability — enabling metrics and logs, pulling them into Prometheus, displaying them in Grafana, and reading gateway health.
Starting from this episode, every architectural decision from episode 6 and earlier will be evaluated with data, not feelings.
Multigress exposes Prometheus metrics on both the data plane and the control plane. Enable them via chart values at installation:
helm upgrade multigress multigress/multigress \
--namespace multigress-system \
--set metrics.enabled=true \
--set metrics.serviceMonitor.enabled=trueThe metrics.serviceMonitor.enabled=true setting makes the Prometheus operator discover the metrics endpoint automatically. Make sure kube-prometheus-stack is installed in the cluster; if not, install it first:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace monitoring --create-namespaceThe proxy logs record every request along with its response status:
kubectl logs -n multigress-system deploy/multigress-proxy --tail=20Each log line shows the method, host, path, duration, and status code. This format is very useful when tracing slow or erroring requests.
After a few minutes, the metrics targets should appear in Prometheus:
kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090Open http://localhost:9090, then check the Status menu and the Targets item. The kubectl port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090 command maps the Prometheus port to your local machine.
A few core Multigress metrics that will accompany you:
multigress_http_requests_total: number of requests per route.multigress_http_request_duration_seconds: request latency.multigress_backend_healthy: backend health status.multigress_connections_active: active proxy connections.Try a query in Prometheus:
sum(rate(multigress_http_requests_total[5m])) by (route)The query above shows the request rate per route over the last 5 minutes — the raw material for dashboards and SLOs in episodes 20 and 21.
Grafana can display all the metrics above. Access it and import the built-in dashboard:
kubectl port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80Log in with the credentials from the grafana secret, then import the dashboard with the official Multigress ID from grafana.com. After that you'll see panels for request rate, latency, and active connections on a single screen.
Before diving into metrics, check resource status first:
kubectl get gatewayclass
kubectl get gateway -A
kubectl get httproute -AHealthy resources show Accepted and Ready conditions. A Rejected route displays the reason in the condition details:
kubectl get httproute api-route -o yaml | grep -A 15 "conditions:"The kubectl get httproute api-route -o yaml command is piped to grep to view the latest conditions. This output is far more informative than guessing why a route was rejected.
Multigress provides a health endpoint on the data plane:
kubectl port-forward -n multigress-system svc/multigress-proxy 8081:19000
curl -s http://localhost:8081/healthzIf the response is OK, the data plane is healthy. This health endpoint pattern becomes the basis for Kubernetes probes and failover automation we'll cover in episode 18.
Tip
Get into this habit when troubleshooting: resource status first, then logs, then metrics. Status tells you what's wrong, logs tell you when, and metrics tell you the impact.
Episode 7 installed the eyes for the whole series: Multigress metrics and logs are active, Prometheus pulls data automatically, Grafana displays it, and you know how to read route status and gateway health.
The key takeaways:
helm upgrade using metrics.enabled and serviceMonitor.Accepted and Ready status is the source of truth for route conditions.In the next episode 8 we'll discuss advanced routing & request transformation — header manipulation, redirects, rewrites, prefix matching, conditional routing based on route rules, and gRPC and WebSocket support through the gateway. Get your observability dashboard ready to watch every change.