Skip to content

Router / Ingress (HAProxy)

Fonte: github.com/openshift/router (exporter ufficiale integrato nel router) e documentazione Red Hat sul monitoring dei router.

Server backend disponibili vs totali (route in “degraded”)

Section titled “Server backend disponibili vs totali (route in “degraded”)”
sum by (namespace, route) (haproxy_server_up)
/
count by (namespace, route) (haproxy_server_up)

Se il rapporto scende sotto 1, almeno un pod dietro la route è marcato down da HAProxy (health check fallito).

Server completamente giù per una route (0 backend sani = 503 per gli utenti)

Section titled “Server completamente giù per una route (0 backend sani = 503 per gli utenti)”
sum by (namespace, route) (haproxy_server_up) == 0
haproxy_server_current_sessions
rate(haproxy_server_connections_total[5m])

Richieste HTTP per codice di risposta, per route

Section titled “Richieste HTTP per codice di risposta, per route”
sum by (namespace, route, code) (
rate(haproxy_server_http_responses_total[5m])
)
sum by (namespace, route) (
rate(haproxy_server_http_responses_total{code="5xx"}[5m])
)
/
sum by (namespace, route) (
rate(haproxy_server_http_responses_total[5m])
)

Latenza (attenzione: media, non percentile)

Section titled “Latenza (attenzione: media, non percentile)”
haproxy_server_http_average_response_latency_milliseconds
haproxy_server_http_average_connect_latency_milliseconds
haproxy_server_http_average_queue_latency_milliseconds

Sono medie calcolate da HAProxy sulle ultime 1024 richieste, non istogrammi Prometheus: niente histogram_quantile(), e non sono adatte per SLO precisi in tempo reale. Per percentili reali servono i log di accesso di HAProxy (via ROUTER_SYSLOG_ADDRESS) processati con un tool esterno (grok-exporter, Fluentd).

Coda alta (queue latency) = i backend non tengono il ritmo

Section titled “Coda alta (queue latency) = i backend non tengono il ritmo”
topk(10, haproxy_server_http_average_queue_latency_milliseconds)

Soglia server-per-router raggiunta (sharding necessario)

Section titled “Soglia server-per-router raggiunta (sharding necessario)”

Il router smette di esportare metriche per-server oltre una soglia (default 500 backend) per non saturare sé stesso con il carico di scrape:

Terminal window
oc exec -n openshift-ingress deploy/router-default -- env | grep ROUTER_METRICS_HAPROXY_SERVER_THRESHOLD

Quando ci si avvicina alla soglia, la strategia corretta è shardare (più IngressController su domini diversi), non alzare la soglia: alzarla aumenta il costo di scrape e può causare timeout Prometheus.

CPU/Memoria del pod router (cAdvisor, come qualunque pod)

Section titled “CPU/Memoria del pod router (cAdvisor, come qualunque pod)”
sum by (pod) (rate(container_cpu_usage_seconds_total{namespace="openshift-ingress", container="router"}[5m]))
sum by (pod) (container_memory_working_set_bytes{namespace="openshift-ingress", container="router"})