AI智能总结
闻茂泉阿里云运维专家 现任阿里巴巴云计算公司计算平台事业部运维专家,主要负责大数据平台基础运维相关工作。拥有10年以上阿里大数据运维经验,尤其在单机可观测性和单机稳定性方面拥有多年的技术沉淀。 单机可观测性体系特点可观测性与成本开销 01 单机可观测性工具介绍工具定位和工具特点 目录Content 02 可观测性与Linux Load极大丰富Metrics的可观测性价值 03 可观测性与磁盘IOMetrics与Tracing的相互替代性 04 01 单机可观测性体系特点可观测性与成本开销 何为可观测性 定义 可观测性与传统监控的区别 传统监控 可观测性 可观测性是在监控基础上能解释清楚问题。 监控是能在系统抖动时及时发现问题。 解释清楚问题需要依赖丰富的数据信息 监控主要任务是发现问题而非解释问题 •依赖更加丰富的metrics信息•依赖更多的trace信息•依赖更全面的log信息 •监控大屏•监控报警•巡检报告 成本开销是制约可观测性发展的难题 可观测性成本开销难题 可观测性的理想是美好的,但现实是残酷的。由于任何可观测性都需要一定程度的metrics和trace数据作为基础。因此,可观测性必然导致各种成本问题。这其中包括采集性能开销成本、数据存储成本、数据计算成本和人员维护成本等。 数据存储成本 数据计算成本 数据采集开销 人员维护成本 对Metrics的采集过程,数据存储过程和数据处理过程都需要很多人员维护成本投入。 过多的metrics的采集,大量的trace数据的收集,还会带来大量计算资源开销,来处理这些数据。 过多的metrics的采集,大量的trace数据的收集,都需要大量的存储开销。从而带来巨大的存储成本问题。 不论是metrics的采集,还是trace数据获取,都会有一定性能开销。过多的性能开销会影响系统的稳定性。 大数据集群可观测性的特点 大数据集群本身的特点,又加剧了矛盾的尖锐性。 资源负载高 规模大 大数据集群相较于其他业务,本身的资源水位也比较高。引发了更多的单机性能问题。 常规的可观测性解决方案,在大数据集群的规模下,面临巨大的存储和计算成本压力。 场景复杂 大数据集群的各种作业使用场景较复杂,进一步加剧了单机可观测性的挑战。 阿里大数据集群单机可观测性体系 基于以上对可观测性的理解,我们打磨了阿里大数据集群的单机可观测性体系。 Metrics •弥补传统监控Metrics指标数量不足等缺点,打造阿里自研单机工具ssar。•ssar工具采用了去中心化存储方案,同时满足了指标丰富和低开销两个特点。 Tracing •拓展各种内核tracing技术的使用,自研基于内核驱动的IO诊断工具iodump。•将traceing工具作为metrics的扩展和补充,慎重开启tracing的常态化运行。 Logging •深入挖掘带外管理日志的作用,弥补系统异常时syslog日志幸存者偏差缺陷。 2 0 2 3 D e v O p s国 际 峰 会暨B i z D e v O p s企 业 峰 会·北 京 站 单机可观测性工具介绍工具定位和工具特点 单机可观测性工具ssar架构介绍 ssar架构图 ssar由采集器、内层通用查询器和外层查询器3部分构成: 采集器sresar •按文件单位采集的整机数据,meminfo、stat、vmstat等;•包含25个指标的进程级数据;•独特的load5s指标和详细的R或D状态线程详情数据; 通用查询器ssar命令 •负责按文件名、某行、某列等通用规则对文件数据进行逻辑解析;•对常用指标,通过配置文件实现预定义指标展示; 查询器tsar2和ssar+ •python语言实现,对ssar命令进行封装,全面兼容tsar命令;•对ssar命令进行封装,未来可以对标dstat等工具,并有历史数据查询功能; 2 0 2 3 D e v O p s国 际 峰 会暨B i z D e v O p s企 业 峰 会·北 京 站 单机可观测性工具ssar的产品定位 相比较其他传统监控软件,ssar有以下优势: •指标更密集 对一些关键指标,采集间隔更加小; 不但完整记录了几乎所有整机指标,还记录了系统所有进程的25个关键指标; •指标更独特 •指标更完整 针对linuxload指标,ssar工具国内外全行业独创了load5s指标。 通过对CPU和内存等资源的极致优化,在系统异常时记录更加珍贵的关键数据;比其他监控工具更具可靠性; 2 0 2 3 D e v O p s国 际 峰 会暨B i z D e v O p s企 业 峰 会·北 京 站 单机可观测性工具ssar的低成本开销 ssar成功的解决了可观测性上面临的各种成本开销。 数据采集开销 人员维护成本 数据计算成本 数据存储成本 •万台集群top5的系统开销,CPU不高于单核1.8%,内存不高于4.0MB。•进程启动后,不但物理内存(rss)使用保持恒定不变,次缺页中断(min_flt)也保持0增长状态。增强了系统内存枯竭情况下的鲁棒性. •ssar工具无需修改代码,只需简单修改配置文件扩展采集系统的任意指标;•ssar工具支持使用python语言二次开发,二次开发入门的门槛低; •采集时采用文件复制,在指标消费时才进行解析,实现延迟计算。从而节省了大量的计算资源的开销。 •采用去中心化的本地存储;•万台集群top200机器的磁盘空间占用,7天存储约1GB左右。 ssar工具的弹性存储空间策略 存储空间源泉 •去中心化存储,单节点占用1GB;•节点上压缩一些低价值的log的磁盘空间占用,让位给高价值的metrics数据; 弹性存储策略 •从单机稳定性来说,要保证不因ssar的原因引起磁盘空间打满。当磁盘空间使用率达到阈值(默认90%)后,停止数据采集;•这种磁盘空间处理逻辑如图中所示绿色部分磁盘空间表示; B 包容异常策略 •当由于其他进程的原因继续使磁盘空间存储增长时,ssar会启动7天内历史数据回收工作,直到使磁盘使用率小于90%或将ssar历史数据基本清理完毕; 磁盘IO类tracing工具iodump介绍 iodump介绍 •iodump工具是利用内核tracepoint静态探针点技术实现的一个io问题排查工具。通过iodump工具,我们可以获取每一个IOPS(w/s和r/s)的详细信息。不仅包括IO请求的size大小,还包括IO请求的扇区地址,同时还包含IO请求的发生时间、读写的文件全路径、产生IO请求的进程、产生IO请求的系统调用和扩展IO类型等信息。其中最具有特色的就是读写的文件全路径功能。 iodump原理 •依赖了内核block层的这些tracepoint探针点,捕获IO数据,并依赖Relayfs传输数据用户态,最后通过iodump用户态进程读取数据。iodump实现了传统的blktrace没有的重要功能,包括文件路径信息、io发起来源的系统调用函数信息。iodump还对blktrace已有的信息做了优化,例如规范了日期和时间格式,输出tgid信息等。•iodump本质上采用的是加载内核模块方式实现,在重要的生产环境使用前,请提前进行充分的兼容性和稳定性测试。 单机可观测性工具开源及影响力情况介绍 ssar和iodump工具已经在行业领先的基础软件开源社区及创新平台龙蜥社区(OpenAnolis)开源。 项目的行业影响力 项目的官方开源地址 •ssar工具在阿里内部有广泛使用,在阿里内部有数十万装机规模,持续稳定运行多年。 •https://gitee.com/anolis/ssar.git•https://gitee.com/anolis/iodump.git •在行业内公司也有一定知名度,有若干知名公司进行规模化使用。以知名互联网公司瓜子网为例,曾经多次成功使用ssar和iodump诊断单机稳定性问题。 龙蜥社区官方软件安装包 •https://mirrors.openanolis.cn/anolis/7.9/extras/x86_64/os/Packages/ssar-1.0.4-1.an7.x86_64.rpm•https://mirrors.openanolis.cn/anolis/7.9/extras/aarch64/os/Packages/ssar-1.0.4-1.an7.aarch64.rpm•https://mirrors.openanolis.cn/anolis/8.8/Experimental/aarch64/os/Packages/ssar-1.0.4-1.an8.aarch64.rpm•https://mirrors.openanolis.cn/anolis/8.8/Experimental/x86_64/os/Packages/ssar-1.0.4-1.an8.x86_64.rpm 2 0 2 3 D e v O p s国 际 峰 会暨B i z D e v O p s企 业 峰 会·北 京 站 可观测性与Linux Load极大丰富Metrics的可观测性价值 Linux Load基础概念 linuxload更新频率 •使用dstat命令可以观察到load指标的更新频率大约为5秒;•查看linux内核源码,进一步了解到更新频率准确值是5001毫秒; linuxload准确含义 •Linux内核中,线程状态有很多种,最常见有R、D、S、Z等;•Linuxload的计算方法是每隔5001毫秒,取系统当前R和D状态的线程数,将其和赋值给active变量。然后用5001毫秒前的load值和当前时刻active值来计算当前时刻的load值; linuxload验证实验 •在一台空闲的机器上,执行stress-c 100命令,模拟R状态的线程;•D状态线程数约为0,R状态线程数为100个单线程的stress进程,因此active值始终在100左右;•同时在另外一个终端执行5秒刷新的dstat命令采集load数据; 2 0 2 3 D e v O p s国 际 峰 会暨B i z D e v O p s企 业 峰 会·北 京 站 Linux Load计算逻辑 linuxload计算逻辑 •学习linux内核源码的load计算逻辑,将其沉淀到srework-ext项目load_predict.py脚本。•exp平滑参数,计算load1时值取1884,计算load5时值取2014,计算load15时值取2037。active是当前R和D状态线程数之和,上文实验中为100。•选取上文的load值,通过load_predict.py脚本验证,计算结果和实际情况是非常接近的。•唯一决定linuxload值的因素是各个时刻的active值。 监控系统下的linuxload •通过了解linuxload的算法,运维人员可依赖实时load值了解几分钟前的历史负载情况。•资深人员排查load高时,将历史load1指标作为主要诊断指标,load5和load15失去价值; 反算内核active值 •但传统的load1指标仍然不能满足我们对细颗粒度的精准要求。•很明显可以通过相邻两个load值反算active值,命名其为load5s指标,load5s才是比load1更加精准的指标。 2 0 2 3 D e v O p s国 际 峰 会暨B i z D e v O p s企 业 峰 会·北 京 站 用load5s指标替代load1做load高判断依据 load5s与load1对比实验 •Step1:一台空闲的机器上安装部署ssar;•Step2:执行压测命令stress-t25-c 100;•Step3:等待25秒后压测进程自动退出;•Step4:使用ssar的load