Envoy Gateway代理可观测性实践指南

Envoy Gateway代理可观测性实践指南

gateway Manages Envoy Proxy as a Standalone or Kubernetes-based Application Gateway gateway 项目地址: https://gitcode.com/gh_mirrors/gate/gateway

前言

在现代云原生架构中,服务网格和API网关的可观测性至关重要。Envoy Gateway作为基于Envoy Proxy构建的API网关解决方案,提供了完整的可观测性能力。本文将深入探讨如何配置和使用Envoy Gateway的代理可观测性功能,包括指标(Metrics)、日志(Logs)和追踪(Traces)三大支柱。

核心概念

在开始实践前,我们需要了解几个关键概念:

  1. 指标(Metrics):反映系统运行状态的量化数据,如请求数、延迟、错误率等
  2. 日志(Logs):系统运行过程中产生的详细事件记录
  3. 追踪(Traces):记录请求在系统中流转的完整路径
  4. OpenTelemetry:云原生可观测性标准,提供统一的指标、日志和追踪收集方案

环境准备

基础组件安装

Envoy Gateway的可观测性需要依赖几个核心组件:

  1. FluentBit:轻量级日志收集器,负责从EnvoyProxy实例收集日志并转发到Loki
  2. Loki:Grafana开源的日志聚合系统,专为云原生环境设计
  3. Tempo:Grafana开源的分布式追踪后端
  4. OpenTelemetry Collector:可观测性数据收集、处理和导出的统一组件

以下是安装这些组件的命令:

# 安装FluentBit
helm repo add fluent https://fluent.github.io/helm-charts
helm upgrade --install fluent-bit fluent/fluent-bit -f fluent-bit-values.yaml -n monitoring --create-namespace

# 安装Loki
kubectl apply -f loki.yaml -n monitoring

# 安装Tempo
helm repo add grafana https://grafana.github.io/helm-charts
helm upgrade --install tempo grafana/tempo -f tempo-values.yaml -n monitoring --create-namespace

# 安装OpenTelemetry Collector
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
helm upgrade --install otel-collector open-telemetry/opentelemetry-collector -f otel-collector-values.yaml -n monitoring --create-namespace

指标监控实践

默认指标配置

Envoy Gateway默认通过Prometheus端点暴露指标数据。可以通过以下方式验证:

# 获取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/match/0-www"

指标配置调整

如果需要禁用Prometheus指标,可以通过修改EnvoyProxy CRD实现:

apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: disable-prometheus
  namespace: envoy-gateway-system
spec:
  telemetry:
    metrics:
      prometheus:
        disable: true

OpenTelemetry指标收集

Envoy Gateway支持将指标发送到OpenTelemetry Collector:

apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: otel-sink
  namespace: envoy-gateway-system
spec:
  telemetry:
    metrics:
      prometheus:
        disable: true
      sinks:
      - openTelemetry:
          host: otel-collector.monitoring.svc.cluster.local
          port: 4317

验证OpenTelemetry Collector收集的指标:

# 获取OTel Collector Pod并设置端口转发
export OTEL_POD_NAME=$(kubectl get pod -n monitoring --selector=app.kubernetes.io/name=opentelemetry-collector -o jsonpath='{.items[0].metadata.name}')
kubectl port-forward pod/$OTEL_POD_NAME -n monitoring 19001:19001

# 查询指标
curl localhost:19001/metrics | grep "default/backend/rule/0/match/0-www"

日志管理实践

默认日志配置

Envoy Gateway默认将日志输出到stdout,采用Envoy的标准文本格式。可以通过Loki查询这些日志:

LOKI_IP=$(kubectl get svc loki -n monitoring -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
curl -s "http://$LOKI_IP:3100/loki/api/v1/query_range" --data-urlencode "query={job=\"fluentbit\"}" | jq '.data.result[0].values'

日志配置调整

禁用访问日志的配置示例:

apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: disable-accesslog
  namespace: envoy-gateway-system
spec:
  telemetry:
    accessLog:
      disable: true

OpenTelemetry日志收集

Envoy Gateway支持将日志发送到OpenTelemetry Collector:

apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: otel-accesslog
  namespace: envoy-gateway-system
spec:
  telemetry:
    accessLog:
      sinks:
      - openTelemetry:
          host: otel-collector.monitoring.svc.cluster.local
          port: 4317

验证OpenTelemetry Collector收集的日志:

curl -s "http://$LOKI_IP:3100/loki/api/v1/query_range" --data-urlencode "query={exporter=\"OTLP\"}" | jq '.data.result[0].values'

分布式追踪实践

启用追踪功能

默认情况下,Envoy Gateway不启用追踪功能。可以通过以下配置启用:

apiVersion: config.gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: enable-tracing
  namespace: envoy-gateway-system
spec:
  telemetry:
    tracing:
      provider:
        type: OpenTelemetry
        host: otel-collector.monitoring.svc.cluster.local
        port: 4317

注意:当前Envoy Gateway使用100%采样率,可能影响性能,生产环境应根据实际情况调整。

追踪数据查询

可以通过Tempo查询追踪数据:

TEMPO_IP=$(kubectl get svc tempo -n monitoring -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

# 查询追踪列表
curl -s "http://$TEMPO_IP:3100/api/search" --data-urlencode "q={ component=envoy }" | jq .traces

# 查询具体追踪详情
curl -s "http://$TEMPO_IP:3100/api/traces/<trace_id>" | jq

最佳实践建议

  1. 生产环境采样率:追踪功能应设置合理的采样率,避免全量采集影响性能
  2. 日志级别控制:根据实际需求调整日志级别,避免过多冗余日志
  3. 指标聚合:合理设置指标聚合周期,平衡实时性和系统负载
  4. 资源限制:为可观测性组件设置适当的资源限制,避免影响业务性能
  5. 安全考虑:确保可观测性端点有适当的访问控制

总结

Envoy Gateway提供了完整的可观测性解决方案,通过本文的实践指南,您可以轻松配置指标监控、日志管理和分布式追踪功能。合理利用这些功能,可以帮助您更好地理解系统运行状态、快速定位问题并优化系统性能。

在实际生产环境中,建议根据业务规模和需求,对这些可观测性功能进行定制化配置,以达到最佳的效果和性能平衡。

gateway Manages Envoy Proxy as a Standalone or Kubernetes-based Application Gateway gateway 项目地址: https://gitcode.com/gh_mirrors/gate/gateway

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荣钧群

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值