系统运维 SysOM profiling 在云上环境的应用观测实践 | 龙蜥技术

简介: 通过部署 profiling,直击 CPU 指标异常等问题的第一现场。

1.png

文/系统运维 SIG

背景

云上环境,ECS客户一般都会布置一些常规监控观察系统指标或者业务指标,虽然通过这些指标能监控到系统或者应用的异常,但是却不能完全了解系统/应用正在做什么导致的指标异常。常见的如:看到系统CPU偶尔飙高却不知道是哪个应用引起、抓包发现报文已经到达了本机却不知道应用为何迟迟不收包等等,束手无策之余只能认为“系统有问题” ,而在排查系统问题之后发现往往是应用对系统资源在做一些野蛮消耗,这些应用有些是业务自身,有些则悄悄躲在"ps -ef"的千百个任务中,很难发现。于是我们想通过profiling的方式去观测系统/应用的运行行为,帮助客户解决难题。

实现方案

所谓的"profiling"可以认为是以一种动态的方式去观测程序的执行逻辑,这个程序可以大到一个操作系统,甚至是一个基础设施,有兴趣的同学可以看下文[1],也可以小到一个pod,甚至一个简单的应用程序。如果在这种方式上再增加一个时间维度,持续性得以“profiling”的方式去做观测,对上面说的常见系统资源偶现指标异常等问题就可以做一个很好的追踪,不需要苦苦守着问题出现。

那么如何去做 profiling 呢?

不同的编程语言有不同的profiling工具,像go的pprof,java的jstack等,这里我们希望观测应用但又想抛开语言的差异化,于是我们借助eBPF来实现程序栈信息的获取,这里的栈信息包括一个应用在用户态执行和内核态的执行的全部信息。借助eBPF的好处在于我们可以做到profiling过程的可控 :频率快慢、运行时安全、系统资源占用小等。

如下图所示,通过 eBPF 加 PMU(Performance Monitoring Unit)事件我们就可以定期获取应用的执行栈信息,同时利用 bpf map 对每个应用的栈信息做统计。借助我们前期开源的 Coolbpf(eBPF 开发编译框架,具备 CORE、高低版本适配能力),我们对不同的内核版本做了相关适配,具体可执行版本见下文。

2.png

3.png

profiling应用的哪些行为逻辑

一个程序的运行时最简单得可以概括为执行和不执行两种状态 ,即on cpu和off cpu。on cpu我们希望看到程序占用cpu时的执行逻辑,哪个任务甚至任务的哪一段代码在cpu上消耗资源,而off cpu我们希望看到应用是否是自愿放弃的cpu,出于何种原因不占用cpu,如等锁、等io等,以此希望发现一些应用等锁耗时造成的收发包延迟等问题。

4.png

针对网络抖动的常见问题我们在收包的两个阶段:

  1. 硬中断和软中断收包,
  2. 用户态应用进程系统调用取包,也做了相关的profiling观测:

5.png

如何持续的profiling

整体我们采用 c/s 的架构方式,日常问题定位中我们只需要部署 agent 去负责 profiling,在 server 端去查看数据。同时将 profiling 数据做切片处理,定时从 map 中拿数据并清空 map 上一周期的采样数据,这样的话确保我们在做数据回放的时候看到的是对应时间段的 profiling 结果 。考虑用户对云上环境数据安全的要求,我们也可以借助 SLS 通道完成数据上传。

6.png

使用说明

在 SysOM 上可以有两种使用方式。

如果想持续性的观测系统那么可以监控模式下 profiling 功能,对应路径在:监控中心->机器 ip->General dashboard->sysom-profiling。

7.png

如果是想获取 profiling 的一些结论性信息可以通过诊断模式,对应路径在:诊断中心->调度诊断中心->应用 profile 分析。

当前会统计 top 10 应用 CPU 占用百分比,同时会将热点栈信息展示出,热点栈在应用自身所有栈信息的百分比也会做一个统计,最后会对热点栈做个分析,明确热点栈是在应用自身还是在 OS。

8.png

以上展示的是 oncpu 的面板信息,profiling 的其他功能的面板信息持续适配中。

具体 profiling 功能可以执行 sysAK 统一监控目录下的 raptor 获取,除了功能项也可以设置运行模式等。

9.png

运行模式

常规模式 trigger模式 filter模式 
定时触发去profiling,默认5分钟一次 设定指标阈值异常时触发 限定应用或者cpu,针对明确了异常应用或者应用绑核只在特定cpu上有问题场景 

profilng功能支持的内核版本

CentOS 7.6 及以上,alinux2/3、anolis,同时也支持了倚天 Arm 架构。

相关案例

1.某用户 CPU 指标偶有飙高,而相同业务的其他机器并无异常,怀疑 ECS 资源有问题

ecs 监控如下:

10.png

由于是间歇性抖动,常规手段较难抓到现场,对系统持续 profiling 一天后发现抖动时刻对应系统上 nginx 应用占用的 CPU 最多,并且 nginx 主要在做收发包处理,用户优化业务流量请求分布后该问题得到解决。

11.png

12.png

2.某用户系统业务压力没有增加的情况下 sys 指标莫名升高

用户监控如下:

13.png

对系统做 profiling 观测后发现有个 cachestat 脚本开启了 ftrace 功能,该脚本是之前同学定位问题部署后没有及时停止,停掉脚本后系统恢复正常。由于 ftrace 不是通过 sysfs 目录打开,查看 sysfs 的 ftrace 其实并无改动。

14.png

15.png

3.某用户机器 CPU 指标异常,ssh 无法登陆,整机夯住

用户监控图如下:

16.png

ssh 无法登陆、CPU 指标异常、内存有压力,根据“经验”一般怀疑系统在做内存回收,但是通常情况下无法拿到第一现场佐证,没有说服力。通过 profiling,部署一天,我们抓到了第一现场,13:57 分 CPU 占用异常高,大阳线拔地而起,再看系统行为就是内核占着 CPU 在做内存回收,随后建议用户优化应用的内存使用。该问题可以算是云上环境的“经典问题”。

17.png

18.png

4.某用户机器 ping 报文偶现秒级时延抖动

ping 主机偶现秒级的时延抖动,同时伴随个别 CPU sys 偶现占用达到 100%。

19.png

由于是个别 CPU 的短暂抖动,因此我们对某一 CPU 上的执行情况做 profiling。我们看到网络抖动时间点,runc 在读 /proc/cpuinfo 信息,“smp_call_function_single”核间call 存在热点,跟我们看到的 sys 偶尔高现象也能吻合。

最终容器同学通过对 cpuinfo 信息缓存备份以减少对 /proc/cpuinfo 的访问,缓解系统压力,当然高版本内核对 /proc/cpuinfo 的访问也做了部分优化,相关 patch 见[4]。

20.png

总结

SysOM 致力打造一个集主机管理、配置部署、监控报警、异常诊断、安全审计等一些列功能的自动化运维平台。以上是对 SysOM profiling 功能的相关介绍,由于篇幅有限只介绍了部分案例,相关功能模块已完成功能验证,正在开源中,敬请期待。

更多的运维技术,可关注我们的gitee开源运维仓库:

SysOM:https://gitee.com/anolis/sysom

SysAK:https://gitee.com/anolis/sysak

Coolbpf:https://gitee.com/anolis/coolbpf

参考

[1]《Google-Wide Profiling: A Continuous Profiling Infrastructure for Data Centers》

[2]《Observability Engineering》

[3] http://www.brendangregg.com/perf.html

[4] https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg2414427.html

—— 完 ——

加入龙蜥社群

加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。

640.png

 

相关文章
|
3天前
|
运维 监控 安全
构建高效自动化运维系统:策略与实践
【4月更文挑战第29天】 在信息技术日新月异的今天,高效的运维管理已成为企业保持竞争力的关键因素。本文将探讨如何构建一个能够适应快速变化需求的自动化运维系统。通过深入分析自动化工具的选择、配置管理的最佳实践以及持续集成和部署的策略,我们旨在为读者提供一个清晰的框架来优化他们的运维流程。文章的核心在于提出一种结合了最新技术和思维模式的综合解决方案,以实现运维工作的最优化。
|
3天前
|
运维 监控 jenkins
构建高效自动化运维体系:策略与实践
【4月更文挑战第29天】随着信息技术的飞速发展,企业对IT运维提出了更高的要求。传统的手动运维方式已无法满足当前复杂多变的业务需求,因此,构建一个高效的自动化运维体系显得尤为迫切。本文将探讨自动化运维的核心策略及其在企业中的实际应用,旨在为读者提供一个清晰的自动化运维转型路径。通过分析自动化工具选择、流程设计、监控告警以及持续集成和部署等方面,文章力求为运维团队提供一套系统的自动化解决方案,以实现效率提升和故障率降低的双重目标。
|
2天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。
|
2天前
|
运维 Kubernetes 持续交付
构建高效自动化运维系统:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】 在快速发展的云计算时代,传统的运维模式已无法满足敏捷开发和快速迭代的需求。本文将介绍如何利用容器技术搭建一套高效自动化运维系统,实现软件的持续集成(CI)与持续部署(CD)。文章首先探讨了现代运维面临的挑战,接着详细阐述了容器技术的核心组件和工作原理,最后通过实际案例展示了如何整合这些组件来构建一个可靠、可扩展的自动化运维平台。
|
2天前
|
机器学习/深度学习 运维 监控
构建高效自动化运维体系:从理论到实践
【4月更文挑战第30天】 在信息技术日益发展的今天,自动化运维已经成为提高系统稳定性、优化资源配置和降低人力成本的关键。本文旨在探讨如何构建一个高效的自动化运维体系,涵盖从初步规划到具体实施的全过程。文章首先分析了自动化运维的必要性,接着提出一套完整的构建方案,并详细阐述了关键技术与工具的选择和应用。通过案例分析,验证了所提方案的有效性,并对自动化运维的未来趋势进行了展望。
|
3天前
|
运维 监控 安全
构建高效自动化运维系统:策略与实践
【4月更文挑战第30天】 在现代IT基础设施管理中,自动化运维不再是可选项而是必需品。随着复杂性的增加和变更的频繁性,自动化可以提高效率、减少错误并释放人员专注于更有价值的任务。本文将探讨构建一个高效的自动化运维系统的关键环节,包括工具选择、流程设计以及监控和优化策略。通过案例分析和最佳实践分享,读者可以获得实施自动化运维的实用指导和启发。
|
3天前
|
人工智能 运维 监控
构建高效自动化运维体系:DevOps与AI的融合实践
【4月更文挑战第30天】 在当今快速迭代的软件开发环境中,高效的自动化运维体系成为确保交付速度和服务质量的关键。本文探讨了如何通过整合DevOps理念和人工智能(AI)技术来构建一个更加智能、高效的运维体系。文章将详细阐述自动化运维的核心组件,以及如何利用AI技术优化这些组件的性能和决策过程。通过实际案例分析,本文展示了这种融合实践在提高运维效率、降低错误率以及提升系统稳定性方面的显著成效。
|
8月前
|
缓存 运维 Linux
Linux(CentOS)运维脚本工具集合
Linux(CentOS)运维脚本工具集合
150 2
|
29天前
|
运维 Linux Shell
linux运维常用命令
linux运维常用命令
|
2月前
|
监控 网络协议 Linux
Linux 命令大全 & CentOS常用运维命令
Linux 命令大全 & CentOS常用运维命令
163 0

热门文章

最新文章