系统运维 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

 

相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
相关文章
|
4天前
|
运维 监控
构建高效运维体系:从理论到实践
在当今快速发展的信息化时代,高效的运维体系是保障企业信息系统稳定运行的关键。本文旨在探讨如何构建一个高效、可靠的运维体系,通过分析当前运维面临的挑战,提出相应的解决策略,并结合实际案例,展示这些策略的实施效果。文章首先介绍了高效运维的重要性,接着分析了运维过程中常见的问题,然后详细阐述了构建高效运维体系的策略和步骤,最后通过一个实际案例来验证这些策略的有效性。
|
5天前
|
运维 监控 安全
运维自动化:提升效率与可靠性的关键技术
在信息技术飞速发展的今天,企业对IT系统的稳定性和高效性要求越来越高。运维自动化作为实现这一目标的重要手段,通过软件工具来模拟、执行和管理IT运维任务,不仅大幅提高了工作效率,还显著增强了系统的可靠性。本文将探讨运维自动化的概念、实施步骤以及面临的挑战,旨在为读者提供一份关于如何有效实施运维自动化的指南。
|
4天前
|
机器学习/深度学习 数据采集 人工智能
智能运维:从自动化到AIOps的演进与实践####
本文探讨了智能运维(AIOps)的兴起背景、核心组件及其在现代IT运维中的应用。通过对比传统运维模式,阐述了AIOps如何利用机器学习、大数据分析等技术,实现故障预测、根因分析、自动化修复等功能,从而提升系统稳定性和运维效率。文章还深入分析了实施AIOps面临的挑战与解决方案,并展望了其未来发展趋势。 ####
|
7天前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
24 3
|
12天前
|
人工智能 运维 监控
构建高效运维体系:理论与实践的深度融合####
本文旨在探讨高效IT运维体系的构建策略,通过理论框架与实际案例并重的方式,深入剖析了现代企业面临的运维挑战。文章开篇概述了当前运维领域的新趋势,包括自动化、智能化及DevOps文化的兴起,随后详细阐述了如何将这些先进理念融入日常运维管理中,形成一套既灵活又稳定的运维机制。特别地,文中强调了数据驱动决策的重要性,以及在快速迭代的技术环境中保持持续学习与适应的必要性。最终,通过对比分析几个典型企业的运维转型实例,提炼出可复制的成功模式,为读者提供具有实操性的指导建议。 ####
|
11天前
|
运维 负载均衡 Ubuntu
自动化运维的利器:Ansible入门与实践
【10月更文挑战第31天】在当今快速发展的信息技术时代,高效的运维管理成为企业稳定运行的关键。本文将引导读者了解自动化运维工具Ansible的基础概念、安装步骤、基本使用,以及如何通过实际案例掌握其核心功能,从而提升工作效率和系统稳定性。
|
12天前
|
运维 资源调度 监控
提升运维效率的关键技术与实践
在当今快速发展的信息技术时代,运维工作面临着前所未有的挑战和机遇。本文旨在探讨如何通过采用先进的技术和实施最佳实践来提高IT运维的效率和效果。我们将深入分析自动化工具、监控策略、灾难恢复计划以及持续集成/持续部署(CI/CD)等关键领域,展示它们如何协同工作以优化运维流程。此外,文章还将提供一些实际案例研究,帮助读者更好地理解这些概念的应用。无论是对于初创公司还是大型企业,掌握这些技术都将是提升竞争力的关键。
|
10天前
|
运维 监控 网络协议
自动化运维的魔法——打造高效、可靠的系统
【10月更文挑战第32天】在数字化时代的浪潮下,运维不再是简单的硬件维护和故障排除。它已经演变成一场关乎效率、稳定性和创新的技术革命。自动化运维,作为这场革命的核心,正引领着企业走向更加智能和高效的未来。本文将带你探索自动化运维的世界,揭示其背后的原理和实践,让你领略到自动化带来的无限可能。
18 0
|
1月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
52 4
|
13天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
38 4