SysAK(System Analyse Kit)是阿里云操作系统提供的一个全方位的系统运维工具集,可以覆盖系统的日常监控、线上问题诊断和系统故障修复等常见运维场景。本文为您介绍SysAK的安装部署和使用方法。
运维场景
阿里云通过对百万服务器运维经验进行抽象总结,进而打造出系统运维工具集SysAK,该工具集可以覆盖以下常见运维场景:
日常监控:针对各种系统资源更精细化的资源监控,帮助业务运维实现细粒度的运维调度和资源控制。除此之外,还实现了许多增强的系统指标,实时监控系统的干扰和抖动等情况。
问题诊断:针对负载异常、网络抖动、内存泄露、IO夯、性能异常等情况提供线上诊断功能。 同时减少工具的专业性,可操作性强。
故障修复:对于非整机异常的问题(例如死锁、夯机等), 该工具提供介入能力对系统进行恢复或故障隔离。
工具本身不会为系统带来更大的负载开销,避免引起网络抖动问题。SysAK通过技术手段保证所有工具同时运行时不超过3%的系统消耗,单个工具不超过1%的系统消耗。
安装SysAK
环境要求
操作系统:Alibaba Cloud Linux 2/3、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系统在运行诊断和监控功能时,会在内核中hook一些函数,可能会导致系统无法正常运行。请您选择合适的窗口期执行诊断和监控命令。
使用方法
常用命令 | 说明 |
| 查看SysAK。
|
| 查看支持的所有子功能。 |
| 查看每个子功能的具体用法。 |
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模式 |
说明 请您根据实际情况替换为实际ECS实例的IP地址。 | 获取系统所有的监控信息。 |
说明 请您根据实际情况替换为实际ECS实例的IP地址。 | 获取cgroup资源组的监控信息。 | |
说明 请您根据实际情况替换为实际ECS实例的IP地址。 | 获取指定资源组$cgroupid的监控信息。 | |
local模式 |
| 交互式地显示监控信息。 |
SysAK诊断功能
用户场景诊断
命令类别 | 功能 | 命令及说明 |
ossre_client | 自动扫描当前系统可能存在的问题。 |
其他还有一些功能参数可配合ossre服务端进行使用。 |
loadtask | 诊断系统load情况,输出load高的原因及负载贡献最多的进程。 |
|
iosdiag | io诊断工具。 |
更多信息,请参见iosdiag功能说明。 |
系统底层专项诊断
调度
命令类别
功能
命令及说明
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。可选,默认一直运行。
更多信息,请参见nosched功能说明。
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。可选,默认一直运行。
更多信息,请参见irqoff功能说明。
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。可选,默认不记录。
更多信息,请参见runqslower功能说明。
内存
命令类别
功能
命令及说明
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
网络延迟探测定界工具。
sysak pingtrace [ options ]
-v,--version
:显示版本号。-h,--help
:帮助信息。-s,--server
:以server模式运行。-c,--client ip
:以client模式运行。-C:--count UINT
:探测报文数量,默认不限。-i <interval_us>
:以us为单位,报文发送间隔时间。-t < UINT >
:以s为单位,程序运行时间。-m,--maxdelay us
:ping延时的阈值,只有超过该值的报文数据才会被记录下来,默认为0。-b <INT=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。可选,默认一直运行。
更多信息,请参见syscall_slow功能说明。
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
:输出到指定文件。