Envoy Gateway 代理指标监控实践指南
概述
在现代云原生架构中,服务网格和API网关的监控能力至关重要。Envoy Gateway作为基于Envoy Proxy构建的Kubernetes原生API网关解决方案,提供了强大的可观测性功能。本文将深入介绍如何配置和使用Envoy Gateway的代理指标监控功能。
监控架构
Envoy Gateway的监控架构分为两个主要部分:
- 控制平面指标:监控Envoy Gateway自身的运行状态
- 数据平面指标:监控底层Envoy Proxy实例的性能和行为
准备工作
在开始配置前,需要确保以下组件已部署:
- Kubernetes集群正常运行
- Prometheus监控系统已安装
- OpenTelemetry Collector(可选)
- 必要的RBAC权限配置
Prometheus指标监控
基础查询方法
Envoy Proxy内置了Prometheus格式的指标端点,可以通过以下步骤访问:
- 获取Prometheus服务端口:
export PROMETHEUS_PORT=$(kubectl get service prometheus -n monitoring -o jsonpath='{.spec.ports[0].port}')
- 建立端口转发:
kubectl port-forward service/prometheus -n monitoring 19001:$PROMETHEUS_PORT
- 使用Prometheus API查询指标:
curl -s 'http://localhost:19001/api/v1/query?query=topk(1,envoy_cluster_upstream_cx_connect_ms_sum)' | jq .
直接访问Envoy指标
如需直接获取Envoy实例的原始指标数据:
- 获取Envoy Pod名称:
export ENVOY_POD_NAME=$(kubectl get pod -n envoy-gateway-system --selector=gateway.envoyproxy.io/owning-gateway-namespace=default,gateway.envoyproxy.io/owning-gateway-name=eg -o jsonpath='{.items[0].metadata.name}')
- 建立端口转发:
kubectl port-forward pod/$ENVOY_POD_NAME -n envoy-gateway-system 19001:19001
- 查看特定路由的指标:
curl localhost:19001/stats/prometheus | grep "default/backend/rule/0"
禁用Prometheus指标
当使用OpenTelemetry作为主要指标收集方式时,可以通过修改EnvoyProxy CRD来禁用Prometheus指标:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: prometheus
namespace: envoy-gateway-system
spec:
telemetry:
metrics:
prometheus:
disable: true
OpenTelemetry指标集成
Envoy Gateway支持将指标导出到OpenTelemetry Collector,实现更灵活的指标处理流程。
配置OpenTelemetry接收器
- 创建Gateway资源并关联EnvoyProxy配置:
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
name: otel-sink
namespace: envoy-gateway-system
spec:
telemetry:
metrics:
sinks:
- type: OpenTelemetry
openTelemetry:
host: otel-collector.monitoring.svc.cluster.local
port: 4317
调试模式验证
在开发环境可以临时启用OpenTelemetry Collector的debug exporter来验证指标收集:
helm upgrade eg-addons oci://docker.io/envoyproxy/gateway-addons-helm --version {{< helm-version >}} -n monitoring --reuse-values --set opentelemetry-collector.config.service.pipelines.metrics.exporters='{debug,prometheus}'
查看Collector日志:
export OTEL_POD_NAME=$(kubectl get pod -n monitoring --selector=app.kubernetes.io/name=opentelemetry-collector -o jsonpath='{.items[0].metadata.name}')
kubectl logs -n monitoring -f $OTEL_POD_NAME --tail=100
关键指标解析
Envoy Proxy提供丰富的指标数据,以下是一些关键指标:
-
连接指标:
envoy_cluster_upstream_cx_total
:上游连接总数envoy_cluster_upstream_cx_active
:活跃连接数
-
请求指标:
envoy_http_downstream_rq_total
:下游请求总数envoy_http_downstream_rq_xx
:按状态码分类的请求数
-
延迟指标:
envoy_cluster_upstream_rq_time
:请求处理时间envoy_cluster_upstream_cx_connect_ms
:连接建立时间
生产环境建议
- 指标采样:在高负载环境中考虑配置指标采样率
- 标签控制:合理控制指标标签数量以避免基数爆炸
- 长期存储:将指标数据持久化到时序数据库
- 告警规则:基于关键指标配置适当的告警阈值
总结
通过本文介绍的方法,您可以灵活地配置Envoy Gateway的指标监控方案,无论是选择Prometheus还是OpenTelemetry作为收集后端,都能获得对API网关性能的深入洞察。在实际生产环境中,建议结合Grafana等可视化工具构建完整的可观测性体系。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考