Envoy Gateway 数据平面可观测性指南

360影视 国产动漫 2025-04-26 09:11 2

摘要:在大规模微服务架构中,可观测性是理解与运维系统的核心能力。Envoy Gateway 构建于 Envoy Proxy 之上,提供了丰富的可观测性功能,包括指标、日志和追踪。本文将通过动手实践的方式,讲解如何基于 Prometheus、Loki 和 Tempo

一篇基于 Prometheus、Loki 和 Tempo 的 Envoy Gateway 数据平面可观测性配置实践指南。

注意:本文基于 Envoy Gateway v1.3.2 编写。

在大规模微服务架构中,可观测性是理解与运维系统的核心能力。Envoy Gateway 构建于 Envoy Proxy 之上,提供了丰富的可观测性功能,包括指标、日志和追踪。本文将通过动手实践的方式,讲解如何基于 Prometheus、Loki 和 Tempo 等开源后端,为 Envoy Gateway 的数据平面(即 Envoy proxy 本身)配置可观测性功能。

在开始配置之前,请确保你已经完成 Envoy Gateway 的基本安装。下图展示了 Envoy Gateway 的可观测性组件架构:

Envoy Gateway 可观测性管道

OpenTelemetry Collector 是一个可插拔的数据中转组件,负责接收、处理和转发可观测性数据(如指标和追踪),来源包括 Envoy Gateway 等系统。通过将数据生成与数据消费解耦,它能够灵活对接多种可观测性后端(如 Prometheus、Tempo、Jaeger),同时支持数据增强、格式转换和多路导出。

安装 Envoy Gateway

按照官方 快速开始指南[1]安装 Envoy Gateway:

helm install eg oci://docker.io/envoyproxy/gateway-helm --version v1.3.2 -n envoy-gateway-system --create-namespace
kubectlwait--timeout=5m -n envoy-gateway-system deployment/envoy-gateway --for=condition=Available
kubectl apply -f https://github.com/envoyproxy/gateway/releases/download/v1.3.2/quickstart.yaml -n default安装可观测性组件

使用官方 Helm chart 安装可观测性组件:

helm install eg-addons oci://docker.io/envoyproxy/gateway-addons-helm --version v1.3.2 -n monitoring --create-namespace --setopentelemetry-collector.enabled=true

注意:OpenTelemetry Collector 默认未启用,需显式开启。

安装完成后,将部署以下组件:

组件

角色

描述

FluentBit

日志收集器

收集并转发日志到 Loki

Grafana

可视化界面

展示指标、日志和追踪的仪表盘

Loki

日志存储

聚合和索引日志

OpenTelemetry Collector

遥测收集器

将指标/追踪数据导出到 Prometheus / Tempo

Prometheus

指标后端

收集并存储 Prometheus 指标数据

Tempo

追踪后端

存储和查询分布式追踪数据

为了测试可观测性组件,我们可以向 Envoy Gateway 发送一些简单的请求。由于使用的是 Minikube,本地可通过端口转发的方式访问:

exportENVOY_SERVICE=$(kubectl get svc -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 -n envoy-gateway-system svc/${ENVOY_SERVICE} 8888:80
curl --verbose --header "Host: www.example.com" http://localhost:8888/get

通过以下配置禁用默认的 Prometheus 指标输出,并启用 OpenTelemetry Sink:

cat -
apiVersion:gateway.networking.k8s.io/v1
kind:Gateway
metadata:
name:eg
namespace:envoy-gateway-system
spec:
gatewayClassName:eg
infrastructure:
parametersRef:
group:gateway.envoyproxy.io
kind:EnvoyProxy
name:unified-telemetry
listeners:
-name:http
protocol:HTTP
port:80
---
apiVersion:gateway.envoyproxy.io/v1alpha1
kind:EnvoyProxy
metadata:

spec:
telemetry:
metrics:
prometheus:
disable:true
sinks:
-type:OpenTelemetry
openTelemetry:
host:otel-collector.monitoring.svc.cluster.local
port:4317
EOF下图展示了 Envoy Proxy 指标可观测性的整体流程:Envoy 原生采集网络流量等关键指标,并通过/stats/prometheus接口暴露,Prometheus 进行抓取并在 Grafana 中可视化。此外,Envoy 还支持自定义指标,并可选集成 StatsD 等系统,实现灵活的监控体系。指标可观测性使用 Prometheus 查看指标Prometheus UI打开 [3],默认账户密码为。Grafana - Envoy Clusters dashboard

Envoy Gateway 使用访问日志(Access Log)进行流量记录,支持格式和输出目标的自定义。

应用以下配置,启用将日志发送至 OpenTelemetry Sink:

kubectl apply -f https://raw.githubusercontent.com/envoyproxy/gateway/refs/heads/main/examples/kubernetes/accesslog/otel-accesslog.yaml

通过 Loki 查询日志示例:

你将看到类似以下格式的输出:

[
[
"1693314563284333000",
"{"body":"[2025-04-17T13:09 :23.284Z] \"- - HTTP/1.1\" 400 DPE 0 11 0 \"-\" \"-\" \"-\" \"-\" \"-\"\n","resources":{"cluster_name":"default/eg","k8s.cluster.name":"cluster-1","log_name":"otel_envoy_accesslog","node_name":"envoy-default-eg-64656661-6fccffddc5-662np","zone_name":""}}"
]
]

下图展示了日志可观测性流程:Envoy 支持自定义日志格式、输出到文件/stdout/syslog/HTTP 目标,亦支持按需采样、过滤,并可包含安全相关字段用于审计。

日志可观测性

日志配置详情参考 Proxy Access Logs 指南[5]

在 Grafana 中查看日志

1. 暴露 Grafana:

kubectl port-forward -n monitoring svc/grafana 3000:80Envoy Gateway Logs dashboard

追踪提供了请求路径的详细可视化,是定位性能瓶颈的重要手段。

Envoy Gateway 原生支持 OpenTelemetry 格式的追踪,生成带有 Trace ID 和 Span ID 的请求链路数据,可通过配置发送到 Tempo、Zipkin 等支持 OpenTracing 协议的后端。

启用追踪:

kubectl apply -f https://raw.githubusercontent.com/envoyproxy/gateway/refs/heads/main/examples/kubernetes/tracing/default.yaml使用 Tempo 验证追踪数据

暴露 Tempo:

kubectl port-forward svc/tempo 3100:3100 -n monitoring

示例输出:

[
{
"traceID": "8010d4fd89e024c0626d984621babd71",
"rootServiceName": "eg.default",
"rootTraceName": "ingress",
"startTimeUnixNano": "1693377719403756000"
}
]curl -s "http://localhost:3100/api/traces/" | jq

返回信息将包含完整的 trace span 数据,包括服务名、请求起止时间、状态码、上下游节点等详细字段。

详细参考 Proxy Tracing 指南[8]

Envoy Gateway Traces DashboardTrace Spans

通过本文的实践操作,你已掌握了如何为 Envoy Gateway 的数据平面启用完整的可观测性功能。结合 OpenTelemetry Collector 的中转能力,以及 Prometheus、Loki 和 Tempo 等后端系统,你可以构建一个具备可扩展性、可插拔性和一致性的可观测性体系,帮助你在无需修改应用代码的前提下,实现对系统流量、性能和错误的深入洞察与排障能力。

引用链接

[1]快速开始指南:

[2]http://localhost:9090:

[3]http://localhost:3000:

[4]Proxy Metrics 指南:

[5]Proxy Access Logs 指南:

[6]

[7]envoy-gateway-logs-dashboard.json:

[8]Proxy Tracing 指南:

[9]envoy-gateway-traces-dashboard.json:

来源:opendotnet

相关推荐