Envoy TCP 层面的 Metric 指标分析

  1. 概述

Envoy 提供了全面的 TCP 层面 metric 指标,覆盖了从监听器接收连接到 upstream 代理的整个过程。通过这些指标,我们可以深入了解 TCP 连接的建立、维护和关闭过程,识别网络问题和性能瓶颈。

核心优势

  1. 全面的指标覆盖:从连接接受、处理到关闭的完整周期

  2. 精细的错误分类:按错误类型和来源分类的错误指标

  3. 实时监控能力:通过 Prometheus 等工具实现实时监控

  4. 故障定位支持:详细的错误和超时信息帮助快速定位问题

  5. 性能优化指导:流量控制和连接管理指标支持性能优化

最佳实践建议

  1. 根据业务需求选择关键指标进行监控

  2. 建立基线,识别异常行为

  3. 配置告警规则,及时发现和响应问题

  4. 使用可视化工具,直观展示指标趋势

  5. 定期分析指标,优化系统配置

通过合理使用 Envoy TCP 指标,我们可以构建健壮的网络监控系统,提高应用程序的可靠性和性能,确保服务的稳定运行。

2. TCP 指标分类架构

  1. Listener 层级指标

3.1 监听器指标

bash 复制代码
# 监听器指标(listener.<address>.*)listener.<address>.downstream_cx_total             # 总连接数listener.<address>.downstream_cx_destroy            # 总已销毁连接数listener.<address>.downstream_cx_active             # 活跃连接数(Gauge)listener.<address>.downstream_cx_length_ms          # 连接持续时间直方图(毫秒)listener.<address>.downstream_cx_transport_socket_connect_timeout # 传输套接字连接协商超时连接数listener.<address>.downstream_cx_overflow           # 因监听器连接限制拒绝的连接数listener.<address>.downstream_cx_overload_reject     # 因配置的过载操作拒绝的连接数listener.<address>.downstream_global_cx_overflow    # 因全局连接限制拒绝的连接数listener.<address>.downstream_pre_cx_timeout        # 在监听器过滤器处理期间超时的套接字数listener.<address>.downstream_pre_cx_active         # 正在进行监听器过滤器处理的套接字数(Gauge)listener.<address>.extension_config_missing         # 因监听器过滤器扩展配置缺失而关闭的连接数listener.<address>.global_cx_overflow               # 因全局连接限制拒绝的连接数(与 downstream_global_cx_overflow 相同)listener.<address>.no_filter_chain_match            # 未匹配任何过滤器链的连接数listener.<address>.downstream_listener_filter_remote_close # 监听器过滤器使用 peek 数据时远程关闭的连接数listener.<address>.downstream_listener_filter_error  # 监听器过滤器使用 peek 数据时的读错误数

3.2 监听器 TLS 指标

bash 复制代码
# TLS 相关指标(listener.<address>.ssl.*)listener.<address>.ssl.connection_error             # TLS 连接错误数listener.<address>.ssl.handshake                     # TLS 握手次数listener.<address>.ssl.handshake_failure             # TLS 握手失败次数listener.<address>.ssl.session_reused                # TLS 会话复用次数listener.<address>.ssl.session_tickets_received      # 收到的 TLS 会话票证数listener.<address>.ssl.session_tickets_issued        # 颁发的 TLS 会话票证数

3.3 监听器 TCP 统计指标

bash 复制代码
# TCP 统计指标(listener.<address>.tcp_stats.*)listener.<address>.tcp_stats.connection_error       # TCP 连接错误数listener.<address>.tcp_stats.connection_reset        # TCP 连接重置数listener.<address>.tcp_stats.connection_refused      # TCP 连接拒绝数listener.<address>.tcp_stats.connection_timeout      # TCP 连接超时数listener.<address>.tcp_stats.connection_close        # TCP 连接关闭数

3.4 监听器 UDP 指标

bash 复制代码
# UDP 监听器指标(listener.<address>.udp.*)listener.<address>.udp.downstream_rx_datagram_dropped # 因内核溢出或截断丢弃的数据报数
  1. TCP Proxy 层级指标

4.1 TCP 代理基本指标

bash 复制代码
# TCP 代理指标(tcp.<stat_prefix>.*)tcp.<stat_prefix>.downstream_cx_total               # 过滤器处理的连接总数tcp.<stat_prefix>.downstream_cx_no_route            # 未找到匹配路由或路由集群不存在的连接数tcp.<stat_prefix>.downstream_cx_tx_bytes_total       # 向下游连接写入的总字节数tcp.<stat_prefix>.downstream_cx_tx_bytes_buffered    # 当前向下游连接缓冲的总字节数(Gauge)tcp.<stat_prefix>.downstream_cx_rx_bytes_total       # 从下游连接读取的总字节数tcp.<stat_prefix>.downstream_cx_rx_bytes_buffered    # 当前从下游连接缓冲的总字节数(Gauge)tcp.<stat_prefix>.downstream_flow_control_paused_reading_total # 流量控制暂停从下游读取的总次数tcp.<stat_prefix>.downstream_flow_control_resumed_reading_total # 流量控制恢复从下游读取的总次数tcp.<stat_prefix>.idle_timeout                      # 因空闲超时关闭的连接数tcp.<stat_prefix>.max_downstream_connection_duration # 因最大下游连接持续时间超时关闭的连接数

4.2 TCP 代理高级指标

bash 复制代码
# TCP 代理高级指标(tcp.<stat_prefix>.*)tcp.<stat_prefix>.on_demand_cluster_attempt         # 请求按需集群的连接总数tcp.<stat_prefix>.on_demand_cluster_missing          # 因按需集群缺失而关闭的连接数tcp.<stat_prefix>.on_demand_cluster_success          # 请求并接收按需集群的连接总数tcp.<stat_prefix>.on_demand_cluster_timeout          # 因按需集群查找超时而关闭的连接数tcp.<stat_prefix>.upstream_flush_total               # 下游连接关闭后继续刷新上游数据的连接总数tcp.<stat_prefix>.upstream_flush_active              # 下游连接关闭后当前继续刷新上游数据的连接数(Gauge)
  1. Upstream 层级指标

5.1 上游连接指标

bash 复制代码
# 上游连接指标(cluster.<name>.*)cluster.<name>.upstream_cx_total                     # 总上游连接数cluster.<name>.upstream_cx_active                    # 活跃上游连接数(Gauge)cluster.<name>.upstream_cx_connect_fail              # 上游连接失败数cluster.<name>.upstream_cx_connect_timeout           # 上游连接超时数cluster.<name>.upstream_cx_connect_ms                # 上游连接建立时间直方图(毫秒)cluster.<name>.upstream_cx_length_ms                 # 上游连接持续时间直方图(毫秒)cluster.<name>.upstream_cx_destroy                    # 已销毁上游连接数cluster.<name>.upstream_cx_destroy_with_active_rq     # 带有活跃请求的已销毁上游连接数cluster.<name>.upstream_cx_idle_timeout               # 因空闲超时关闭的上游连接数cluster.<name>.upstream_cx_max_duration_reached       # 达到最大连接持续时间的上游连接数cluster.<name>.upstream_cx_max_requests               # 达到最大请求数的上游连接数

5.2 上游流量指标

bash 复制代码
# 上游流量指标(cluster.<name>.*)cluster.<name>.upstream_cx_tx_bytes_total             # 向上游发送的总字节数cluster.<name>.upstream_cx_rx_bytes_total             # 从上游接收的总字节数

5.3 上游超时指标

bash 复制代码
# 上游超时指标(cluster.<name>.*)cluster.<name>.upstream_rq_timeout                    # 上游请求超时数cluster.<name>.upstream_rq_per_try_timeout             # 每次尝试的上游请求超时数

5.4 上游连接池指标

bash 复制代码
# 上游连接池指标(cluster.<name>.*)cluster.<name>.upstream_cx_pool_overflow               # 连接池溢出数(达到最大连接数)cluster.<name>.upstream_rq_pending_total               # 待处理请求总数cluster.<name>.upstream_rq_pending_active              # 活跃待处理请求数(Gauge)cluster.<name>.upstream_rq_pending_overflow             # 待处理请求溢出数(达到最大待处理请求数)
  1. TCP 连接管理指标

6.1 流量控制指标

bash 复制代码
# 流量控制指标tcp.<stat_prefix>.downstream_flow_control_paused_reading_total    # 流量控制暂停从下游读取的总次数tcp.<stat_prefix>.downstream_flow_control_resumed_reading_total  # 流量控制恢复从下游读取的总次数
cluster.<name>.upstream_flow_control_paused_reading_total    # 流量控制暂停从上游读取的总次数cluster.<name>.upstream_flow_control_resumed_reading_total  # 流量控制恢复从上游读取的总次数cluster.<name>.upstream_flow_control_backed_up_total        # 上游连接备份数cluster.<name>.upstream_flow_control_drained_total         # 上游连接排空数

6.2 连接超时指标

bash 复制代码
# 连接超时指标tcp.<stat_prefix>.idle_timeout                      # 因空闲超时关闭的连接数tcp.<stat_prefix>.max_downstream_connection_duration # 因最大连接持续时间超时关闭的连接数
cluster.<name>.upstream_cx_idle_timeout               # 因空闲超时关闭的上游连接数cluster.<name>.upstream_cx_max_duration_reached       # 达到最大连接持续时间的上游连接数cluster.<name>.upstream_cx_connect_timeout           # 上游连接超时数

6.3 错误处理指标

bash 复制代码
# 错误处理指标listener.<address>.no_filter_chain_match            # 未匹配任何过滤器链的连接数listener.<address>.downstream_cx_transport_socket_connect_timeout # 传输套接字连接协商超时连接数listener.<address>.downstream_cx_overflow           # 因监听器连接限制拒绝的连接数listener.<address>.downstream_cx_overload_reject     # 因配置的过载操作拒绝的连接数listener.<address>.downstream_global_cx_overflow    # 因全局连接限制拒绝的连接数
tcp.<stat_prefix>.downstream_cx_no_route            # 未找到匹配路由或路由集群不存在的连接数
cluster.<name>.upstream_cx_connect_fail              # 上游连接失败数cluster.<name>.upstream_cx_connect_timeout           # 上游连接超时数
  1. TLS 相关指标

7.1 监听器 TLS 指标

bash 复制代码
# TLS 相关指标(listener.<address>.ssl.*)listener.<address>.ssl.connection_error             # TLS 连接错误数listener.<address>.ssl.handshake                     # TLS 握手次数listener.<address>.ssl.handshake_failure             # TLS 握手失败次数listener.<address>.ssl.session_reused                # TLS 会话复用次数listener.<address>.ssl.session_tickets_received      # 收到的 TLS 会话票证数listener.<address>.ssl.session_tickets_issued        # 颁发的 TLS 会话票证数

7.2 上游 TLS 指标

bash 复制代码
# 上游 TLS 指标(cluster.<name>.ssl.*)cluster.<name>.ssl.connection_error                  # TLS 连接错误数cluster.<name>.ssl.handshake                        # TLS 握手次数cluster.<name>.ssl.handshake_failure                # TLS 握手失败次数cluster.<name>.ssl.session_reused                   # TLS 会话复用次数cluster.<name>.ssl.session_tickets_received          # 收到的 TLS 会话票证数cluster.<name>.ssl.session_tickets_issued            # 颁发的 TLS 会话票证数
  1. TCP 统计传输套接字指标

8.1 TCP 统计传输套接字指标

bash 复制代码
# TCP 统计传输套接字指标(listener.<address>.tcp_stats.*)listener.<address>.tcp_stats.connection_error        # TCP 连接错误数listener.<address>.tcp_stats.connection_reset         # TCP 连接重置数listener.<address>.tcp_stats.connection_refused       # TCP 连接拒绝数listener.<address>.tcp_stats.connection_timeout       # TCP 连接超时数listener.<address>.tcp_stats.connection_close         # TCP 连接关闭数
  1. 工作线程级指标

9.1 每个监听器处理程序的指标

xml 复制代码
# 每个监听器处理程序的指标(listener.<address>.<handler>.*)listener.<address>.<handler>.downstream_cx_total       # 该处理程序上的总连接数listener.<address>.<handler>.downstream_cx_active      # 该处理程序上的活跃连接数(Gauge)
  1. 监听器管理器指标

10.1 监听器管理器指标

bash 复制代码
# 监听器管理器指标(listener_manager.*)listener_manager.listener_added                     # 添加的监听器总数(静态配置或 LDS)listener_manager.listener_modified                  # 修改的监听器总数(通过 LDS)listener_manager.listener_removed                   # 删除的监听器总数(通过 LDS)listener_manager.listener_stopped                   # 停止的监听器总数listener_manager.listener_create_success             # 成功添加到工作线程的监听器对象总数listener_manager.listener_create_failure             # 监听器对象添加到工作线程失败的总数listener_manager.listener_in_place_updated           # 创建以执行过滤器链更新路径的监听器对象总数listener_manager.total_filter_chains_draining        # 当前正在排空的过滤器链数量(Gauge)listener_manager.total_listeners_warming             # 当前正在预热的监听器数量(Gauge)listener_manager.total_listeners_active               # 当前正在活动的监听器数量(Gauge)listener_manager.total_listeners_draining             # 当前正在排空的监听器数量(Gauge)listener_manager.workers_started                     # 工作线程是否已启动(1 表示已启动,0 表示未启动)(Gauge)
  1. TCP 指标使用最佳实践

11.1 监控策略

bash 复制代码
# 核心指标监控建议# 1. 连接层级监控- listener.<address>.downstream_cx_total             # 总连接数- listener.<address>.downstream_cx_active             # 活跃连接数- listener.<address>.downstream_cx_length_ms          # 连接持续时间直方图- cluster.<name>.upstream_cx_total                     # 总上游连接数- cluster.<name>.upstream_cx_active                    # 活跃上游连接数
# 2. 流量层级监控- listener.<address>.downstream_cx_tx_bytes_total     # 向下游发送的总字节数- listener.<address>.downstream_cx_rx_bytes_total     # 从下游接收的总字节数- cluster.<name>.upstream_cx_tx_bytes_total             # 向上游发送的总字节数- cluster.<name>.upstream_cx_rx_bytes_total             # 从上游接收的总字节数
# 3. 错误和超时监控- listener.<address>.no_filter_chain_match            # 未匹配任何过滤器链的连接数- listener.<address>.downstream_cx_transport_socket_connect_timeout # 传输套接字连接协商超时连接数- listener.<address>.downstream_cx_overflow           # 因监听器连接限制拒绝的连接数- tcp.<stat_prefix>.downstream_cx_no_route            # 未找到匹配路由或路由集群不存在的连接数- cluster.<name>.upstream_cx_connect_fail              # 上游连接失败数- cluster.<name>.upstream_cx_connect_timeout           # 上游连接超时数
# 4. 流量控制监控- tcp.<stat_prefix>.downstream_flow_control_paused_reading_total    # 流量控制暂停从下游读取的总次数- tcp.<stat_prefix>.downstream_flow_control_resumed_reading_total  # 流量控制恢复从下游读取的总次数
# 5. TLS 监控- listener.<address>.ssl.connection_error             # TLS 连接错误数- listener.<address>.ssl.handshake                     # TLS 握手次数- listener.<address>.ssl.handshake_failure             # TLS 握手失败次数- listener.<address>.ssl.session_reused                # TLS 会话复用次数

11.2 告警配置示例

bash 复制代码
# Prometheus 告警规则示例groups:- name: envoy_tcp_alerts  rules:  - alert: HighTCPConnectionErrorRate    expr: sum(rate(listener_ssl_connection_error[5m])) / sum(rate(listener_ssl_handshake[5m])) > 0.1    for: 1m    labels:      severity: warning    annotations:      summary: "TLS 连接错误率过高"      description: "TLS 连接错误率为 {{ $value }},高于 10%"
  - alert: HighTCPConnectionFailureRate    expr: sum(rate(cluster_upstream_cx_connect_fail[5m])) / sum(rate(cluster_upstream_cx_total[5m])) > 0.2    for: 1m    labels:      severity: critical    annotations:      summary: "上游连接失败率过高"      description: "上游连接失败率为 {{ $value }},高于 20%"
  - alert: HighTCPNoRouteRate    expr: sum(rate(tcp_downstream_cx_no_route[5m])) / sum(rate(tcp_downstream_cx_total[5m])) > 0.05    for: 1m    labels:      severity: warning    annotations:      summary: "TCP 无路由率过高"      description: "TCP 无路由率为 {{ $value }},高于 5%"

11.3 数据可视化

apache 复制代码
# Grafana 仪表盘查询示例# 1. TCP 连接状态sum(listener_downstream_cx_active)sum(cluster_upstream_cx_active)
# 2. TCP 流量统计sum(rate(listener_downstream_cx_tx_bytes_total[1m]))sum(rate(listener_downstream_cx_rx_bytes_total[1m]))sum(rate(cluster_upstream_cx_tx_bytes_total[1m]))sum(rate(cluster_upstream_cx_rx_bytes_total[1m]))
# 3. TLS 连接统计sum(listener_ssl_session_reused)sum(listener_ssl_handshake_failure)
# 4. TCP 连接持续时间histogram_quantile(0.5, sum(rate(listener_downstream_cx_length_ms_bucket[1m])) by (le))histogram_quantile(0.9, sum(rate(listener_downstream_cx_length_ms_bucket[1m])) by (le))histogram_quantile(0.95, sum(rate(listener_downstream_cx_length_ms_bucket[1m])) by (le))
# 5. TCP 错误分布sum(rate(listener_downstream_cx_transport_socket_connect_timeout[1m]))sum(rate(listener_downstream_cx_overflow[1m]))sum(rate(tcp_downstream_cx_no_route[1m]))sum(rate(cluster_upstream_cx_connect_fail[1m]))
  1. TCP 指标高级分析

12.1 连接成功率分析

css 复制代码
# 计算 TCP 连接成功率(1 - rate(listener_downstream_cx_transport_socket_connect_timeout[5m]) / rate(listener_downstream_cx_total[5m])) * 100(1 - rate(cluster_upstream_cx_connect_fail[5m]) / rate(cluster_upstream_cx_total[5m])) * 100

12.2 连接持续时间分析

apache 复制代码
# 分析连接持续时间分布histogram_quantile(0.5, sum(rate(listener_downstream_cx_length_ms_bucket[5m])) by (le))  # 50 分位数histogram_quantile(0.9, sum(rate(listener_downstream_cx_length_ms_bucket[5m])) by (le))  # 90 分位数histogram_quantile(0.95, sum(rate(listener_downstream_cx_length_ms_bucket[5m])) by (le)) # 95 分位数

12.3 流量模式分析

bash 复制代码
# 分析流量模式sum(rate(listener_downstream_cx_tx_bytes_total[1m]))  # 发送速率sum(rate(listener_downstream_cx_rx_bytes_total[1m]))  # 接收速率rate(listener_downstream_cx_total[1m])               # 连接建立速率rate(listener_downstream_cx_destroy[1m])             # 连接关闭速率

12.4 TLS 会话复用分析

apache 复制代码
# 计算 TLS 会话复用率rate(listener_ssl_session_reused[5m]) / rate(listener_ssl_handshake[5m]) * 100
相关推荐
网络系统管理1 小时前
解决edge浏览器访问https网站报错问题
网络协议·http·https
清水白石0082 小时前
生成器不是性能银弹:什么时候该用 `yield` 省内存,什么时候它会拖慢 Python 数据处理吞吐?
开发语言·python·原型模式
不甘先生2 小时前
Go context 实战指南:从入门到生产级并发控制(架构师避坑手册)
开发语言·后端·golang
AI进化营-智能译站2 小时前
ROS2 C++开发系列18-STL容器实战:deque缓存激光雷达数据|priority_queue调度任务
开发语言·c++·缓存·ai
Johnstons2 小时前
TCP Reset(RST)异常是什么?一文讲透连接被动中断的识别方法、适用场景、与超时断开的边界及排查清单
网络协议·tcp/ip·php·es·抓包分析
初心未改HD2 小时前
Go 泛型完全指南:从入门到实战
开发语言·golang
西红柿炒番茄312 小时前
【Python】一个自动切换壁纸的python程序
开发语言·python
TOWE technology2 小时前
EN32/G2401FCI——32A大功率,24位国标输出的高密度配电方案
linux·服务器·网络·科技·数据中心·pdu·智能pdu
ShiJiuD6668889992 小时前
JSP Cookie和Session
java·开发语言