Closed Candicepan closed 9 months ago
Vancasola Give it to me
Kuscia End-to-End 网络监控指标采集
概述:获取 TCP 统计信息,获取CPU、Memory usage、Net I/O 的系统资源信息。目前已初步完成go程序代码,未集成到kuscia中。
利用 envoy 获取统计信息,指标包括 envoy states中TCP、TLS、circuit-breakers-statistics的内容。
识别 localDomainID 在go程序向 127.0.0.1:1054 发送 http 请求,解析出 localDomainID
在go程序向 envoy的stats发送http请求获取.json的列表,找到localDomainID下endpoints[i].lb_endpoints中address和port,在.json列表中选择需要收集的指标:
利用 ss 获取统计信息,envoy未能完全覆盖ss的统计信息(例如, rto、delivery_rate等)。通过在go程序通过命令调用ss,过滤出需要收集的指标。指标包括
指标 | 含义 | 使用说明 |
---|---|---|
rto | tcp 重传超时值 | 直接通过配置文件获取 |
retrans | 重传发生次数 | 直接通过配置文件获取 |
delivery_rate | 即 cwnd/rtt, cwnd:congestion window size, rtt: rtt is the average round trip time | 直接通过配置文件获取 |
send_bps | 每秒发送的bit数 | 直接通过配置文件获取 |
recv_bps | 每秒收到的bit数 | 直接通过配置文件获取 |
total_conenctions | 总连接数 | 直接通过配置文件获取 |
指标 | 含义 |
---|---|
User | %user: Percentage of CPU time spent by user processes |
Nice | %nice: Percentage of CPU time spent by user processes with adjusted "nice" value |
System | %system: Percentage of CPU time spent by the kernel |
Iowait | %iowait: Percentage of time the CPU is idle but waiting for I/O operations to complete |
IRQ | %irq: Percentage of CPU time spent servicing hardware interrupts |
SoftIRQ | %softirq: Percentage of CPU time spent servicing software interrupts |
Steal | %steal: Percentage of CPU time in a virtualized environment, stolen by other virtual machines |
Guest | %guest: Percentage of CPU time spent running guest operating systems |
Idle | %idle: Percentage of CPU time that is idle |
Memory: 利用Go自带runtime.MemStats 获取,收集Total Memory、Allocated Memory、System Memory Usage、Allocated Times、Memory Free Times。
功能性对应的设计方案
要求控制采集脚本本身的计算资源使用率,分别给出【5S、15S、30S】采集周期、[1W、5W、10W、20W、100W】Active conenctions下的Memory、CPU、NetIO的使用量的趋势图:每隔【5S、15S、30S】获取一次指标,用iperf3发tcp包,go-echarts画出使用量趋势图。
支持采集指标项可配置,以便于增删Envoy或采集工具已经支持的指标:通过修改配置文件中需要采集的指标以支持采集指标项可配置。
考虑到中心化模式下,指标会从Lite节点推动到Master,需要控制推送的指标数据量,我们希望推送的指标已经是在本地聚合过后的指标;若采用socket statistics方案,需要支持sum、avg、max、min、rate等聚合函数,并支持可配置聚合函数:获取socket信息后,这些信息作为聚合函数的输入,输出结合结果。
你可以直接基于prometheus提供的client来实现按照prometheus的格式来暴露指标:导出prometheus格式的指标。
问题
【控制采集脚本本身的计算资源使用率,分别给出不同采集周期、下的资源使用量的趋势图】:是否需要集成到kuscia?还是只是实验性的功能,用于观察采集脚本本身的计算资源使用率?)
【考虑到入口流量通常经由机构网关转发到Envoy,即Envoy作为Server端时,Envoy看到的tcp链接的client side并非Remote节点的出口ip而是本节点所属机构的网关】:这条的意思是不是这样:remote结点的数据包发送到机构的网关之后,由于机构网关的NAT,docker能看到的只是机构网关的IP?我们能否主动获取机构网关的的ip信息,以收集端到端的网络信息?
关于CPU、Memory、IOWAIT的统计,我们可以另一个ISSUE,因为这些任务容器也需要采集的。本issue聚焦在端到端网络监控。 问题1:期望测试脚本可以提交到Kuscia,连接数和采集周期可以是脚本参数。 问题2:不是的。Alice和BOB通信,在Alice侧,Alice做为Server端时,看到的ClientIP可能是Alice机构的网关的IP,而不是BOB的出口IP。
关于CPU、Memory、IOWAIT的统计,我们可以另一个ISSUE,因为这些任务容器也需要采集的。本issue聚焦在端到端网络监控。 问题1:期望测试脚本可以提交到Kuscia,连接数和采集周期可以是脚本参数。 问题2:不是的。Alice和BOB通信,在Alice侧,Alice做为Server端时,看到的ClientIP可能是Alice机构的网关的IP,而不是BOB的出口IP。
关于CPU、Memory、IOWAIT的统计,我们可以另一个ISSUE,因为这些任务容器也需要采集的。本issue聚焦在端到端网络监控。 问题1:期望测试脚本可以提交到Kuscia,连接数和采集周期可以是脚本参数。 问题2:不是的。Alice和BOB通信,在Alice侧,Alice做为Server端时,看到的ClientIP可能是Alice机构的网关的IP,而不是BOB的出口IP。
- 好的,系统参数的统计先不加入,主要放在针对连接数和采集周期的测试脚本中。
- “Alice 作为 Server 端时,看到的 ClientIP 可能是 Alice 机构的网关的 IP”:请问产生这样现象的原因主要是什么呢?这样的情况下,我们通常要如何获取udp包丢包率这样的指标?
- 其他部分是否符合要求?如果可以的话,我就继续完成开发了哈。
2.因为机构的入口流量是从网关进来的呀,网关可能是七层代理、四层代理,转发后源地址就从机构地址变成网关地址了。
好的!目前的进展如下,功能已基本实现:
统计和参与方相关的集群网络信息,包括:
测量指标可配置:
测量开销分析:
测量信息汇聚:
目前的进展如下:
缺陷:1. 仍然无法成功配置出tcp_stats的指标信息
任务介绍
背景
在隐私计算场景中,不同节点通常是跨域部署的,我们希望能够监测两个节点之间端到端的网络质量。 为了描述清楚问题,假设有三个机构分别部署了三个自治节点 alice、bob、joke;alice 与 bob、alice 与 joke均有联合计算项目。 在 alice 这一侧,需要分别统计 alice 与 bob、alice 与 joke 的之间的网络链路的带宽、健康度指标。由于节点的入口和出口流量都会经过 Envoy,因此我们将需求转换为统计 alice 侧的 Envoy 与 bob 侧的 Envoy 之间的 tcp connections 的健康度、传输速率。 另一方面,考虑到入口流量通常经由机构网关转发到Envoy,即Envoy作为Server端时,Envoy看到的tcp链接的client side并非Remote节点的出口ip而是本节点所属机构的网关。因此我们只统计Envoy作为Client端(主动打开)的tcp链接上的指标。
How
详细要求
能力要求