尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Envoy 管理服务器(Management Server)与 xDS 订阅统计:连接健壮性监控与指标指南

Envoy 管理服务器(Management Server)与 xDS 订阅统计:连接健壮性监控与指标指南 Envoy 管理服务器Management Server与 xDS 订阅统计连接健壮性监控与指标指南【免费下载链接】envoyCloud-native high-performance edge/middle/service proxy项目地址: https://gitcode.com/GitHub_Trending/en/envoy导读Envoy 作为云原生场景下的高性能边缘/中间/服务代理其核心能力之一是通过 xDS 协议从管理服务器Management Server即控制平面动态获取配置。本文基于 mgmt_server.rst 文档系统讲解管理服务器不可达时的行为机制、TCP/HTTP2 keep-alive 的配置方法以及control_plane.*与 xDS 订阅相关的全部统计指标。读完本文你将掌握如何通过 Envoy 自身暴露的指标判断控制平面连接状态、定位配置下发失败原因并为生产环境的管理服务器连接配置合理的健康检查与监控告警。一、管理服务器与管理平面架构Envoy 的动态配置能力依赖一组发现服务Discovery Services统称为xDS。Envoy 通过订阅subscription机制向管理服务器请求这些资源既可以指定一个文件系统路径进行监听也可以发起 gRPC 流式订阅还可以轮询 REST-JSON 风格的 URL参见 subscription.h 与 subscription_factory_impl.cc。ControlPlaneStats与SubscriptionStats的定义位于 grpc_mux.h 与 subscription.h统计对象的生成逻辑在 utility.h 中实现是理解下文全部指标的第一手源码依据。二、管理服务器不可达时的行为与检测2.1 不可达时的锁存latch行为当 Envoy 实例与管理服务器失去连接时Envoy 会锁存latch上一份配置并继续运行同时在后台主动重试以重建与管理服务器的连接。这意味着控制面短暂故障不会导致数据面立即失效已加载的路由、监听器、集群等配置会继续生效数据面与旧配置共存期间Envoy 会持续以退避策略尝试重新建立 xDS 连接gRPC 场景下默认采用带抖动的指数退避相关实现见 utility.h。2.2 及时检测连接不健康的重要性管理服务器可能半死不活进程存活但连接不可用因此Envoy 必须能够检测到指向管理服务器的连接是否不健康以便尽快发起新连接。文档明确建议在连接管理服务器的 cluster 中配置以下两类 keep-aliveTCP keep-alive对应UpstreamConnectionOptions.tcp_keepalive字段envoy_v3_api_field_config.cluster.v3.UpstreamConnectionOptions.tcp_keepalive用于检测底层 TCP 连接的活性HTTP/2 keep-alive对应Http2ProtocolOptions.connection_keepalive字段envoy_v3_api_field_config.core.v3.Http2ProtocolOptions.connection_keepalive用于在 HTTP/2 层典型 xDS 传输层维持连接活性定期发送 PING 帧探测对端。一个同时开启两层 keep-alive 的典型上游集群配置示例dynamic_resources: lds_config: api_config_source: api_type: GRPC transport_api_version: V3 grpc_services: - envoy_grpc: cluster_name: xds_cluster # 可选首次配置获取超时默认 15s0 表示无限等待 # initial_fetch_timeout: 15s static_resources: clusters: - name: xds_cluster type: STATIC connect_timeout: 1s lb_policy: ROUND_ROBIN load_assignment: cluster_name: xds_cluster endpoints: - lb_endpoints: - endpoint: address: socket_address: address: 127.0.0.1 port_value: 18000 typed_extension_protocol_options: envoy.extensions.upstreams.http.v3.HttpProtocolOptions: type: type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions explicit_http_config: http2_protocol_options: connection_keepalive: interval: 30s timeout: 5s upstream_connection_options: tcp_keepalive: keepalive_time: 300 keepalive_interval: 30 keepalive_probes: 5说明tcp_keepalive.keepalive_time秒为 TCP 空闲多久后开始探测keepalive_interval为探测间隔keepalive_probes为失败判定前的探测次数connection_keepalive.interval为 HTTP/2 PING 发送间隔timeout为等待 PING ACK 的超时时间超时即判定连接不可用关于initial_fetch_timeout该字段定义于 config_source.proto指 Envoy 在初始化过程中等待该 xDS 订阅首个配置响应的最长时间超时后即使首个配置未到达也会进入下一初始化阶段默认值为 15s设为 0 表示无限等待。2.3 调试日志与可观测性信号每次尝试建立连接失败时Envoy 都会在debug 日志中记录无法连接管理服务器的事实可结合--log-level debug排查重连过程connected_state指标control_plane.connected_state为这一行为提供了可供监控的信号详见下一节。三、管理服务器统计指标control_plane.*管理服务器的统计树以control_plane.为前缀前缀在 utility.h 中硬编码为control_plane.统计项定义于 grpc_mux.h。各指标如下名称类型说明connected_stateGauge布尔值1 表示已连接0 表示已断开表示当前与管理服务器的连接状态rate_limit_enforcedCounter管理服务器请求被限流rate limit强制执行的累计次数pending_requestsGauge限流被执行时的待处理pending请求总数identifierTextReadout发送最近一次发现响应的控制平面实例标识符结合源码进一步解读GAUGE(connected_state, NeverImport)使用NeverImport合并策略表示该值应直接取某一次采集结果而不做跨线程/跨 worker 聚合用于反映实时的连接通断GAUGE(pending_requests, Accumulate)使用Accumulate策略在限流发生时累计待处理请求数量可辅助判断限流造成的请求积压程度identifier为 TextReadout文本只读量在多控制平面实例如多个 xDS 副本场景下可用于识别当前由谁在下发配置rate_limit_enforced对应 xDS 请求侧的限流配置请求限流的默认参数DefaultMaxTokens 100、DefaultFillRate 10定义于 utility.h 的RateLimitSettings中可通过ApiConfigSource的rate_limit_settings字段调整。四、xDS 订阅统计指标订阅级Envoy 通过 xDS 订阅发现各种动态资源。所有订阅都会生成一组统一定义的统计统计宏定义见 subscription.h生成函数generateStats见 utility.h。具体指标如下名称类型说明config_reloadCounter因配置不同而触发配置重载的 API 拉取总次数config_reload_time_msGauge最近一次配置重载的时间戳自 epoch 起的毫秒数init_fetch_timeoutCounter发生initial_fetch_timeout首次拉取超时的总次数update_attemptCounterAPI 拉取尝试总次数update_successCounterAPI 拉取成功完成总次数update_failureCounter因网络错误导致 API 拉取失败的总次数update_rejectedCounter因 schema/校验错误导致 API 拉取失败的总次数update_timeGauge最近一次成功 API 拉取的时间戳自 epoch 起的毫秒数即使重载是无变化的平凡配置重载也会刷新versionGauge最近一次成功 API 拉取内容的哈希值version_textTextReadout最近一次成功 API 拉取的版本文本control_plane.connected_stateGauge布尔值1 连接 / 0 断开表示当前与管理服务器的连接状态与管理服务器统计树中的同名指标对应从源码subscription.h可见该宏还额外声明了HISTOGRAM(update_duration, Milliseconds)即每次 API 拉取的耗时直方图单位为毫秒可用于评估 xDS 下发延迟。4.1 关键指标解读与告警建议update_failure与update_rejected的区分前者代表网络层故障连接断开、超时等后者代表配置内容本身有 schema 或校验错误。二者定位问题方向不同——网络错误优先检查管理服务器可达性与 keep-alive 配置校验错误则需要检查管理服务器下发的配置是否符合 API 规范version与version_text用于确认 Envoy 实际加载的是哪一版配置。其中version是通过 xxHash 计算的哈希前缀hash_实现见 utility.h 的computeHashedVersion可用于快速比对管理服务器与 Envoy 侧的配置版本是否一致config_reload与update_timeupdate_time即使在下发内容无变化trivial reload时也会刷新而config_reload只在配置内容真正变化时递增二者结合可区分收到心跳式响应与配置实际变更connected_state作为最直观的连接健康信号可配合 Prometheus 等监控系统设置告警connected_state 0时触发告警提示管理服务器链路中断。五、统计指标在监控实践中的组合用法在实际运维中建议将上述指标组合使用形成完整的控制面健康画像连接层以control_plane.connected_state为核心0即告警同时观察update_failure的增长速率判断是否持续网络失败数据层观察update_rejected是否有增长若有则说明管理服务器下发了非法配置需回滚或修正控制面配置时效层监控config_reload_time_ms与当前时间的差值若长时间未刷新且config_reload无增长说明控制面可能长时间未下发新配置限流层当rate_limit_enforced增长且pending_requests持续偏高时说明 xDS 请求频率超过了控制面限流阈值可适当调大rate_limit_settings中的max_tokens/fill_rate。六、补充相关配置与资源入口统计宏与结构定义grpc_mux.h、subscription.h统计生成与限流默认参数utility.h、utility.hinitial_fetch_timeout字段定义config_source.proto订阅实现与测试subscription_factory_impl.cc、subscription_test_harness.h常用动态资源配置模板可参考 ads.yaml 与 front-proxy_envoy.yaml。结语管理服务器是 Envoy 动态化能力的神经中枢而control_plane.*与订阅级统计指标则是观察这条神经是否畅通的仪表盘。通过合理配置 TCP/HTTP2 keep-alive、理解connected_state等核心指标、区分网络失败与校验失败你可以在控制面抖动时快速定位问题并建立可靠的告警体系让 Envoy 数据面在管理服务器故障期间依然稳定运行。【免费下载链接】envoyCloud-native high-performance edge/middle/service proxy项目地址: https://gitcode.com/GitHub_Trending/en/envoy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表