Envoy Gateway 代理指标监控实践指南
前言
在现代云原生架构中,服务网格和 API 网关的监控能力至关重要。Envoy Gateway 作为基于 Envoy 构建的 Kubernetes 原生网关解决方案,提供了强大的可观测性功能。本文将深入介绍如何配置和使用 Envoy Gateway 的代理指标监控功能。
核心概念解析
在开始实践之前,我们需要理解几个关键概念:
- 控制平面指标:Envoy Gateway 自身运行状态的监控数据
- 数据平面指标:底层 Envoy 代理实例的性能和行为数据
- 指标采集方式:
- Prometheus:经典的拉取式监控系统
- OpenTelemetry:新一代的指标采集和传输标准
准备工作
确保已满足以下前提条件:
- Kubernetes 集群正常运行
- Envoy Gateway 已部署并运行
- 监控组件(Prometheus 或 OpenTelemetry Collector)已安装
Prometheus 指标采集实践
基础查询方法
通过端口转发访问 Prometheus 服务:
PROMETHEUS_PORT=$(kubectl get service prometheus -n monitoring -o jsonpath='{.spec.ports[0].port}')
kubectl port-forward service/prometheus -n monitoring 19001:$PROMETHEUS_PORT
执行 PromQL 查询示例:
curl -s 'http://localhost:19001/api/v1/query?query=topk(1,envoy_cluster_upstream_cx_connect_ms_sum)' | jq .
直接访问 Envoy 指标端点
获取 Envoy Pod 并设置端口转发:
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 指标采集实践
基础配置
将指标导出到 OpenTelemetry Collector:
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
调试模式(仅用于开发)
临时启用 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 日志:
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 Gateway 提供丰富的指标数据,以下是一些关键指标:
-
连接指标:
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 两种主流方式采集和导出指标。在实际生产环境中,建议根据具体需求选择合适的监控方案,并配合 Grafana 等可视化工具构建完整的可观测性体系。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考