SysAK(System Analyse Kit)是阿里云操作系统提供的一个全方位的系统运维工具集,可以覆盖系统的日常监控、线上问题诊断和系统故障修复等常见运维场景。本文为您介绍SysAK的安装部署和使用方法。
背景信息
阿里云通过对百万服务器运维经验进行抽象总结,进而打造出系统运维工具集SysAK,该工具集可以覆盖以下常见运维场景:
- 日常监控:针对各种系统资源更精细化的资源监控,帮助业务运维实现细粒度的运维调度和资源控制。除此之外,还实现了许多增强的系统指标,实时监控系统的干扰和抖动等情况。
- 问题诊断:针对负载异常、网络抖动、内存泄漏、IO夯、性能异常等情况提供线上诊断功能。 同时减少工具的专业性,可操作性强。
- 故障修复:对于非整机异常的问题(例如死锁、夯机等), 该工具提供介入能力对系统进行恢复或故障隔离。
工具本身不会为系统带来更大的负载开销,避免引起网络抖动问题。SysAK通过技术手段保证所有工具同时运行时不超过3%的系统消耗,单个工具不超过1%的系统消耗。
安装SysAK
环境要求
- 操作系统:Alibaba Cloud Linux 2、Anolis OS 8.4 ANCK、CentOS 7及其他内核版本大于3.10的Linux系统
说明 您可以运行
uname -a
命令查看实例的内核版本。 - 硬件:x86_64
安装部署
操作系统 | 安装方法 |
---|---|
Alibaba Cloud Linux 2 |
|
Anolis OS 8.4 ANCK |
|
CentOS 7及其他内核版本大于3.10的Linux系统 | 仅支持开源版本自定义编译安装,可能存在兼容性问题。直接访问SysAK开源地址进行安装。 |
使用SysAK
使用方法
常用命令 | 说明 |
---|---|
sysak help | 查看SysAK。Usage: sysak [ cmd ] [ subcmd [ cmdargs ] ]
|
sysak list -a | 查看支持的所有子功能。 |
sysak [subcmd] -h | 查看每个子功能的具体用法。 |
SysAK的两种模式
SysAK目前支持监控模式和诊断模式。监控模式下SysAK常驻后台,为运维人员提供系统的各项指标。诊断模式随用随启,主要用于分析系统现象根因。更多信息,请参见SysAK系统监控功能和SysAK诊断功能。
SysAK系统监控功能
启动监控
您可以通过以下两种方式,使用SysAK自动监控系统各项指标。
- 执行以下命令,直接启动监控。
sysak mservice -S
- 依次执行以下命令,将SysAK监控加入到系统常驻服务中,下次开机自启动。
systemctl enable sysak systemctl start sysak
监控指标
说明 增强特性特指SysAK自身实现的特色功能(指标项)或者SysAK通过Alibaba Cloud Linux、Anolis OS的内核增强特性实现的功能(指标项)。
- 系统资源
指标分类 类别说明 具体指标项 增强特性 计算资源 CPU user 用户态CPU使用率 无 sys 系统态CPU使用率 hirq 中断CPU使用率 sirq 软中断CPU使用率 LOAD load* 1秒、5秒、15秒负载 内存资源 内存 free 内存余量 used 内存使用量 buffer 内存buffer使用量 cache 内存cache使用量 total 内存总量 mem.util 内存使用率 swap swpin swap换入的page数 swapout swap换出的page数 total swap的page总量 swap.util swap使用率 IO资源 IO访问 rrqms 每秒向设备发出的合并读取请求数 wrqms 每秒向设备发出的合并写入请求数 rs 每秒向设备发出的读取请求数 ws 每秒向设备发出的写入请求数 rsecs 每秒从设备读取的扇区数 wsecs 每秒写入设备的扇区数 rqsize 向设备发出的请求的平均大小 qusize 向设备发出的请求的平均队列长度 svctm 向设备发出的I/O请求的平均服务时间 io.util I/O请求的CPU时间百分比 磁盘空间 bfree 剩余数据块数量 bused 已用数据块数量 btotl 数据块总量 patition.util 数据库使用率 ifree 剩余文件节点数量 itotl 文件节点总量 iutil 文件节点使用率 网络资源 网络流量 bytin 网络接收流量数Byte bytout 网络发出流量数Byte pktin 网络收包总量 pktout 网络发包总量 TCP active tcp主动建连数 pasive tcp被动建连数 iseg tcp收包数 outseg tcp发包数 UDP idgm udp收包数 odgm udp发包数 - 系统瓶颈
指标分类 类别说明 具体指标项 增强特性 IO瓶颈 读写延迟 await IO的平均等待时间 无 rawait IO读的平均等待时间 wawait IO写的平均等待时间 内存瓶颈 cache回收与碎片整理 kswapd kswapd回收次数 pg_kr 异步回收page数 pg_dr 直接回收page数 kcompd kcompactd规整次数 dc_all 内存直接规整次数 dc_fin 内存直接规整完成次数 oom 发生oom次数 网络瓶颈 网络传输 pkterr 系统错误包数量 pktdrp 系统丢包数量 EstReset ESTABLISHED状态发生reset次数 AtmpFail tcp connection尝试失败次数 retran tcp重传率 noport udp目的端口/地址不存在次数 idmerr udp无效包个数 CPU瓶颈 多任务并发 cswch 系统的上下文切换数 proc 系统fork次数 就绪队列长时排队 rqslow.dltnum 就绪队列等待超过阈值的次数 SysAK rqslow.dlttm 就绪队列等待超过阈值的总延时 SysAK 系统软件瓶颈 内核临界资源访问 noschd.dltnum CPU在sys态驻留超过阈值次数 SysAK noschd.dlttm CPU在sys态驻留超过阈值总延时 SysAK - 系统干扰
指标分类 类别说明 具体指标项 增强特性 系统干扰 长时间关中断延迟 irqoff.dltnum 系统关中断超过阈值次数 SysAK irqoff.dlttm 系统关中断超过阈值总延时 SysAK - 容器场景(每个容器的指标)
指标分类 类别说明 具体指标项 增强特性 计算资源 CPU资源 usr/sys/hriq/sirq 容器用户态/系统/中断/软中断CPU使用率 无 负载信息 nrun 容器中就绪状态的任务数 Alibaba Cloud Linux、Anolis OS nunint 容器中D阻塞状态任务数 load* 容器中1秒、5秒、10秒的负载情况 内存资源 MEMROY资源 total/free/used/cache/buffer 容器中内存的总量、剩余、使用、cache、buffer量 无 内存瓶颈 pgfault 容器中缺页异常次数 pgmajfault 容器磁盘交换或者文件映射缺页的次数 mfailcnt 容器发生内存申请失败的次数 drgl* 全局内存回收的延迟时间分布 Alibaba Cloud Linux、Anolis OS drml* 容器中内存回收延迟时间分布 dcl* 容器内存压缩的延迟时间分布 IO资源 IO指标 riops 容器中读IO个数 无 wiops 容器中读写IO个数 rbps 容器中的读字节数 wbps 容器中的写字节数 rwait 容器中读等待时间 Alibaba Cloud Linux、Anolis OS wwait 容器中的写等待时间 rsrv 容器中读服务时间 wsrv 容器中写服务时间 rioq 容器中读排队IO个数 wioq 容器中写排队IO个数 rioqsz 容器中读排队的IO字节数 wioqsz 容器中写排队的IO字节数 rarqsz 容器中读IO的平均字节数 warqsz 容器中写IO的平均字节数 硬件资源 资源瓶颈 llcref 容器LLC访问次数 无 llcmis 容器LLC miss次数 CPI 容器CPI (cycles per instruction)
服务配置
SysAK监控服务支持对采集的指标项通过配置文件进行配置。配置文件存放在/usr/local/sysak/sysakmon.conf路径下,修改配置后,需要执行systemctl restart sysak
命令重启mservice服务。
配置项说明:
- server_mode http|local:监控服务的监控模式。HTTP模式表示以HTTP服务模式监控;local模式是将数据存放在本地,在本地查看监控数据。
- cron_period 60:local模式下监控服务的采样周期,默认60秒;HTTP模式不涉及。
- output_file_path:local模式下监控服务存放日志的路径,默认路径为/usr/local/sysak/log/tsar.data;HTTP模式不涉及。
- mod_xxx on:
on
表示开启该监控项,off
表示关闭该监控项。
数据查看
模式 | 监控结果查看命令 | 说明 |
---|---|---|
HTTP模式 | curl http://127.0.0.1:9200/metric/raw/ 说明 请您根据实际情况替换为实际ECS实例的IP地址。 | 获取系统所有的监控信息。 |
curl http://127.0.0.1:9200/metric/cgroup/raw 说明 请您根据实际情况替换为实际ECS实例的IP地址。 | 获取cgroup资源组的监控信息。 | |
curl http://127.0.0.1:9200/metric/cgroup/$cgroupid/raw 说明 请您根据实际情况替换为实际ECS实例的IP地址。 | 获取指定资源组$cgroupid的监控信息。 | |
local模式 | sysak mservice -l | 交互式地显示监控信息。 |
SysAK诊断功能
用户场景诊断
命令类别 | 功能 | 命令及说明 |
---|---|---|
ossre_client | 自动扫描当前系统可能存在的问题。 | sysak ossre_client [ -a ] [ -p ] [ -i ]
|
loadtask | 诊断系统load情况,输出load高的原因及负载贡献最多的进程。 | sysak loadtask [ -m maxload ] [ -i interval ] [ -f outfile ] [ -d ] [ -s ]
|
iosdiag | io诊断工具。 | sysak iosdiag [ options ] subcmd [ cmdargs ]
|
系统底层专项诊断
- 调度
命令类别 功能 命令及说明 nosched 检测系统中内核态长时间占住CPU,导致CPU上的任务无法及时调度运行的问题。 sysak nosched [--help] [-t THRESH(ms)] [-f LOGFILE] [-s duration(s)]
-t THRESH
:内核不调度的门限时间,超过门限就会进行记录,单位ms。可选,默认10 ms。-f LOGFILE
:将log记录到指定文件。可选,默认记录在/var/log/sysak/nosched/nosched.log。-s durations
:设置该程序运行多长时间,单位s。可选,默认一直运行。
irqoff 检测系统中长时间关闭中断的异常状态。 sysak irqoff [--help] [-t THRESH(ms)] [-f LOGFILE] [duration(s)]
-t THRESH
:关中断的门限时间,超过门限就会记录,单位ms。可选,默认10 ms。-f LOGFILE
:将log记录到指定文件。可选,默认记录在/var/log/sysak/irqoff/irqoff.log。durations
:设置该程序运行多长时间,单位s。可选,默认一直运行。
runqslower 检测系统中任务调度延迟大的异常情况。 sysak runqslower [-s SPAN] [-t TID] [-f LOGFILE] [-P] [THRESH]
-s SPAN
:设置该程序运行多长时间,单位s。可选,默认一直运行。THRESH
:任务被抢占的门限时间,超过门限就记录,单位ms。可选,默认20 ms。-f LOGFILE
:将log记录到指定文件。可选,默认记录在/var/log/sysak/runqslow/runqslow.log。-t tid
:过滤选项,指定被监控的现场ID。可选,默认监控所有的线程。-P
:记录prev任务的name和TID。可选,默认不记录。
- 内存
命令类别 功能 命令及说明 memleak 诊断内核内存泄漏情况,包括slab、vmalloc、buddy内存的泄漏情况,找到泄漏点。 sysak memleak [-t type] [-i internal] [-c]
-t
:内存泄漏类型。- slab:slab分配内存泄漏检测。
- vmalloc:vmalloc分配内存泄漏检测。
- page:伙伴系统内存分配泄漏检测。
-i
:指定检测时间,默认300 s。-c
:指定此参数后,只会做快速检测,判断内存是否泄漏,不进行泄漏点的诊断。
mmaptrace 抓取用户态内存泄漏点,提供用户态内存申请调用栈。 sysak mmaptrace [ option ] [ args ]
-p <pid>
: 监控指定pid用户态申请内存情况。-l
:设置监控malloc/mmap申请的大小。-s
:显示申请内存的用户态调用栈。
memgraph 内存大图工具。 sysak memgraph [ option ]
-g
:显示内存使用大图。-f
:显示页缓存详细信息。-a
:显示匿名内存详细信息。-k
:内存泄漏检测。-l
:显示系统线程内存使用情况。-c
:显示系统cgroup内存使用情况。
- IO
命令类别 功能 命令及说明 iofsstat 实现从进程和文件级别统计IO信息。 sysak iofsstat [-h] [-T TIMEOUT] [-t TOP] [-u UTIL_THRESH] [-b BW_THRESH] [-i IOPS_THRESH] [-c CYCLE] [-d DEVICE] [-p PID] [-j] [-f]
-T TIMEOUT
:指定命令运行的时长(secs)。-t TOP
:报告的top N的最大IO资源使用情况。-u UTIL_THRESH
:指定util-thresh作为过滤条件 ,该参数可以过滤util低于此阈值的信息。-b BW_THRESH
:指定BW-thresh作为过滤条件。该参数可以过滤bw低于此阈值的信息。-i IOPS_THRESH
:指定IOPS-thresh作为过滤条件。该参数可以过滤iops低于此阈值的信息。-c CYCLE
:指定刷新频率(secs)。-d DEVICE
:指定监控的disk盘名称。-p PID
:指定关注的任务pid。-j,--json
:以json-format格式输出。-f,--fs
:监控报告指定分区的信息。
- 网络
命令类别 功能 命令及说明 pingtrace 网络延迟探测定界工具。 pingtrace [ options ]
-v,--version
:显示版本号。-h,--help
:帮助信息。-s,--server
:以server模式运行。-c,--client ip
:以client模式运行。-C:--count UINT
:探测报文数量,默认不限。-i <i nterval_us>
:以us为单位,报文发送间隔时间。-t < UINT >
:以s为单位,程序运行时间。-m,--maxdelay us
:ping延时的阈值,只有超过该值的报文数据才会被记录下来,默认为0。-b <I NT=556 >
:发送探测报文的大小,至少144字节。--log TEXT=./pingtrace.log
:日志文件名称。--logsize INT
:日志文件最大占用磁盘空间。--logbackup INT=3
:日志文件最多备份数量。--mode auto/pingpong/compact
:PingTrace运行模式。-o,--output image/json/log/imagelog
:PingTrace数据输出格式。-n,--namespace
:探测与net namespace相关的信息。--nslocal
:在探测net namespace相关信息时,告知PingTrace client和server运行在同一host上,以避免获取到冗余数据。--userid UINT
:在探测net namespace相关信息时,为不同host指定不同userid,以帮助PingTrace识别和修正不同host上时间不同步问题。--debug
:打印相关debug信息,主要为libbpf信息。
skcheck tcp和socket泄漏检测工具。 sysak skcheck [ options ] [ cmdargs ]
-s
:启动泄漏检测。-i
:设置开启的socket阈值,默认是2000。-l
:设置关闭的socket阈值,默认是500。
- 性能
命令类别 功能 命令及说明 numa_access 显示指定pid、cpu numa信息。 sysak numa_access [ options ] [ cmdargs ]
-p <pid>
:指定pid。-c <cpu>
:指定CPU。-i <time>
:设置显示间隔时间。
hw_event docker的硬件事件信息。 sysak hw_event [ options ] [ cmdargs ]
-c <name>
:指定docker的名字,默认是所有docker。-s <time>
:设置运行时间,默认5 s。
- 虚拟化
命令类别 功能 命令及说明 kvmexittime 跟踪诊断虚拟机Vmexit事件。 sysak kvmexittime [--help] [-p PID] [-t TID] [interval]
-p <pid>
:指定pid。-t <tid>
:指定tid。interval
:跟踪诊断的时间。--help
:输出当前命令帮助信息。
- Generic
命令类别 功能 命令及说明 syscall_slow 用于系统调用慢的原因自动分析应用线程锁竞争问题。 sysak syscall_slow [-t THRESH(ms)] [-n sys_NR] <[-c COMM] [-p tid]> [-f LOGFILE][duration(s)]
-t
:当系统调用时间超过该指定门限时就记录,单位ms;可选,默认10 ms。-n
:检测指定的系统调用。可选,默认所有系统调用。-c/-p
:只检测指定任务名字或者线程ID,二选一。必选。-f
:将log记录到指定文件。可选,默认记录在/var/log/sysak/syscall_slow/syscall_slow.log。durations
:设置该程序运行多长时间,单位s。可选,默认一直运行。
ulockcheck 自动分析应用线程锁竞争问题。 sysak ulockcheck -p <pid> | -s <thread pid>| -a | -t <0|1> | -d
-p
:开始监控指定进程线程锁竞争情况。-a
:显示当前锁owner及请锁次数top 5。-s
:显示监控线程的锁竞争情况。-t
:开启打印开关。如果等锁超过100 ms,会打印线程锁的用户态调用栈。-d
:停止监控。
cpuirq 输出CPU上的中断绑定和运行情况。 sysak cpuirq [-c cpu -b ] [ -t [ -i interval ] ]
-c
:指定要查看的CPU。-b
:输出指定CPU的中断绑定信息。-t
:查看一定时间内产生最多的中断。-i
:指定时间间隔softirq。
softirq 统计系统软中断的运行情况(数量、速率等)。 sysak softirq [ option ] [ args ]
-s
:指定初始数据源文件。-r
:输出到指定文件。