Prometheus 监控 Gloo 全栈实战:云原生 API 网关的深度可观测性 Prometheus 监控 Gloo 全栈实战云原生 API 网关的深度可观测性Gloo Edge 是由 Solo.io 基于 Envoy 构建的下一代云原生 API 网关支撑着 Kubernetes 集群的南北流量与东西流量管理。它的Envoy 代理层负责实际流量转发控制平面 (gloo)则管理路由、上游和虚拟服务。要真正掌控网关的脉搏必须同时监控这两层Envoy 的请求吞吐、延迟、重试、连接池以及控制平面的配置同步延迟、资源状态、错误计数。Prometheus 通过 Gloo 原生暴露的指标端点无需额外 Exporter 即可将网关的运行时完全透明化。本文将带你从开启指标、配置抓取到解读核心指标、构建 Grafana 大屏和告警规则彻底透视 Gloo 网关的每一个角落。1. Gloo 的 Prometheus 暴露机制Gloo 的指标分为两部分组件默认端口指标路径说明Gloo 控制平面(gloo)9091/metrics提供控制平面的业务逻辑指标如上游状态、代理配置同步状态、API 事件处理次数等Envoy 代理(gateway-proxy)19000/stats/prometheus每个 gateway-proxy Pod 提供 Envoy 的标准指标包括上游请求数、重试、连接、延迟等两者组合在一起才能完整呈现“配置是否正确同步 流量是否健康转发”。2. 开启 Gloo 的 Prometheus 端点2.1 使用 Helm 安装时启用在安装 Gloo Edge 时通过 values 确认指标端口开放# values.yamlgloo:deployment:metricsPort:9091# Gloo 控制平面 metrics 端口gatewayProxies:gatewayProxy:podTemplate:httpPort:8080httpsPort:8443# Envoy admin 端口默认 19000会暴露 /stats/prometheus安装helminstallgloo gloo/gloo-ngloo-system-fvalues.yaml2.2 验证端点控制平面kubectl port-forward-ngloo-system deploy/gloo9091:9091curlhttp://localhost:9091/metrics应该看到gloo_sync_status、gloo_api_event_count、gloo_eds_events_total等指标。Envoy 代理kubectl port-forward-ngloo-system deploy/gateway-proxy19000:19000curlhttp://localhost:19000/stats/prometheus大量envoy_*指标出现如envoy_cluster_upstream_rq_total、envoy_listener_http_downstream_rq_xx等。3. 配置 Prometheus 抓取3.1 静态配置抓取控制平面scrape_configs:-job_name:gloo-controlscrape_interval:30sstatic_configs:-targets:[gloo.gloo-system.svc.cluster.local:9091]labels:component:control-plane3.2 抓取所有 gateway-proxy 的 Envoy 指标由于每个 proxy 实例独立需要动态发现。在 Kubernetes 环境中推荐使用PodMonitorPrometheus Operator或基于 Pod 注解发现。PodMonitor 示例apiVersion:monitoring.coreos.com/v1kind:PodMonitormetadata:name:gloo-envoynamespace:gloo-systemspec:selector:matchLabels:gloo:gateway-proxypodMetricsEndpoints:-port:http# 可选只用于标识# 但 Envoy 指标在 admin 端口 19000需自定义 endpoint-targetPort:19000path:/stats/prometheusinterval:15s基于注解的自动发现为 gateway-proxy Pod 添加注解prometheus.io/scrape: true prometheus.io/port: 19000 prometheus.io/path: /stats/prometheus然后在 Prometheus 中使用kubernetes_sd_configs和 relabel 过滤 Pod 标签gloogateway-proxy。3.3 确保 Prometheus 有权限访问如果使用了 RBAC确保 Prometheus 的 ServiceAccount 可以读取 Pod 列表。4. 核心监控指标与 PromQL4.1 控制平面指标指标含义gloo_sync_status控制平面与 Envoy 代理的同步状态0成功其他失败gloo_api_event_count_totalAPI 事件处理总数按 resource 类型分组gloo_eds_updates_totalEDS端点发现服务更新次数gloo_uds_updates_totalUDS上游发现服务更新次数gloo_cds_updates_totalCDS集群发现服务更新次数gloo_lds_updates_totalLDS监听器发现服务更新次数PromQL 示例同步失败gloo_sync_status ! 0配置变更频率rate(gloo_api_event_count_total[10m])4.2 Envoy 流量指标指标含义envoy_listener_http_downstream_rq_xx下游 HTTP 请求按状态码分类 (2xx, 3xx, 4xx, 5xx)envoy_cluster_upstream_rq_total到上游集群的请求总数envoy_cluster_upstream_rq_time(Histogram)上游请求耗时envoy_cluster_upstream_rq_retry上游请求重试次数envoy_cluster_upstream_rq_pending_overflow连接池溢出导致的挂起请求envoy_cluster_upstream_cx_active活跃上游连接数envoy_cluster_upstream_cx_connect_timeout连接超时次数envoy_cluster_health_check_failure健康检查失败计数envoy_server_liveEnvoy 进程存活1livePromQL 示例下游 QPSrate(envoy_listener_http_downstream_rq_xx[1m])上游 5xx 错误率sum(rate(envoy_cluster_upstream_rq_xx{envoy_response_code_class5}[5m])) by (envoy_cluster_name) / sum(rate(envoy_cluster_upstream_rq_total[5m])) by (envoy_cluster_name)上游 P95 延迟histogram_quantile(0.95, rate(envoy_cluster_upstream_rq_time_bucket[5m]))连接池溢出rate(envoy_cluster_upstream_rq_pending_overflow[5m]) 0健康检查失败envoy_cluster_health_check_failure 0注意Envoy 指标名称长且带有大量标签可以使用metric_relabel_configs丢弃不需要的标签以减少基数。5. Grafana 仪表盘推荐Envoy DashboardDashboard ID11021通用 Envoy 仪表盘展示上下游请求、延迟、连接池、重试、健康检查等完美适配 Gloo 的 Envoy 指标。Gloo Edge Control PlaneID14039Solo.io 社区贡献展示控制平面同步状态、API 事件、EDS 更新等。自定义组合仪表盘使用变量gateway区分不同集群将控制平面指标与 Envoy 指标放在同一行形成网关全貌。导入后选择数据源用component或namespace变量过滤。6. 告警规则实战groups:-name:gloo_alertsrules:-alert:GlooControlPlaneDownexpr:up{jobgloo-control} 0for:1mlabels:severity:criticalannotations:summary:Gloo 控制平面不可达-alert:GlooSyncFailedexpr:gloo_sync_status!0for:5mlabels:severity:criticalannotations:summary:Gloo 控制平面与 Envoy 代理同步失败配置可能未生效-alert:GlooEnvoyDownexpr:envoy_server_live 0for:1mlabels:severity:criticalannotations:summary:Envoy 代理实例 {{ $labels.pod }} 已停止-alert:GlooUpstream5xxHighexpr:sum(rate(envoy_cluster_upstream_rq_xx{envoy_response_code_class5}[5m])) by (envoy_cluster_name) / sum(rate(envoy_cluster_upstream_rq_total[5m])) by (envoy_cluster_name)0.01for:5mlabels:severity:criticalannotations:summary:上游集群 {{ $labels.envoy_cluster_name }} 5xx 错误率超过 1%-alert:GlooUpstreamHighLatencyexpr:histogram_quantile(0.99,rate(envoy_cluster_upstream_rq_time_bucket[5m]))2for:5mlabels:severity:warningannotations:summary:上游集群 {{ $labels.envoy_cluster_name }} P99 延迟超过 2 秒-alert:GlooConnectionPoolOverflowexpr:rate(envoy_cluster_upstream_rq_pending_overflow[5m])0for:5mlabels:severity:warningannotations:summary:上游连接池溢出考虑增加最大连接数或扩容上游服务-alert:GlooHealthCheckFailedexpr:envoy_cluster_health_check_failure0for:5mlabels:severity:criticalannotations:summary:上游集群 {{ $labels.envoy_cluster_name }} 健康检查失败服务可能不可用-alert:GlooRetryRateHighexpr:rate(envoy_cluster_upstream_rq_retry[5m]) / rate(envoy_cluster_upstream_rq_total[5m])0.1for:10mlabels:severity:warningannotations:summary:上游重试率超过 10%下游可能遇到错误根据集群规模和业务灵敏度调整阈值。7. 进阶多集群、安全与性能调优7.1 多集群监控如果你的 Gloo 部署在多个 Kubernetes 集群可以在每个集群内配置 Prometheus并通过外部标签cluster区分。使用 Thanos 或 Grafana Mimir 聚合视图在仪表盘变量中切换集群。7.2 安全加固控制平面指标端口通过 Service 仅暴露ClusterIP不对外。Envoy Admin 端口19000不应暴露到公网务必使用 NetworkPolicy 限制仅 Prometheus 可访问。也可以配置--envoy-admin-access-log记录访问。认证Gloo 控制平面和 Envoy 均无内置鉴权建议在抓取路径前添加 sidecar 代理或使用 Kubernetes RBAC 限制 Pod 访问。7.3 减少 Envoy 指标基数Envoy 暴露的指标非常多尤其包含大量标签如envoy_cluster_name。可在 Prometheus 抓取时使用metric_relabel_configs丢弃不需要的指标例如只保留envoy_cluster_upstream_rq_*和envoy_listener_*。或者在 Envoy 配置中启用stats_matcher来限制统计项Gloo 允许通过settings配置 Envoy 的statsConfig。7.4 结合 Gloo API 日志当出现路由错误或 5xx 时可以结合gloo控制平面日志kubectl logs deploy/gloo -n gloo-system以及 Envoy 的访问日志进行深入排查。Grafana 可与 Loki 集成实现指标到日志的跳转。7.5 监控 VirtualService 和 Upstream 资源通过 kube-state-metrics 监控 Gloo CRD 的状态例如VirtualService、Upstream的数量和状态条件确保期望的网关配置已应用。可以补充创建告警VirtualService长时间未 Ready。8. 总结通过 Gloo 原生暴露的 Prometheus 指标你能以零侵入的方式捕捉到控制平面的同步异常和 Envoy 代理的每一个请求波动。上游 5xx 错误、连接池溢出、配置同步失败、延迟突增——所有这些信号都被转化为可查询、可告警的时序数据在 Grafana 中直观呈现。将 Gloo 网关的可观测性纳入你的全栈监控体系意味着从边缘路由到后端服务整个流量链路的透明化闭环已经完成。部署它让云原生网关的“黑盒”彻底点亮为业务可用性筑起最后一道可观测防线。