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
  • 通过yum源安装
    1. 远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例
    2. 执行以下命令,选择和内核版本一致的SysAK包名。
      yum search sysak
    3. 执行以下命令,安装SysAK,默认下载SysAK最新版本。
      yum install sysak-4.19.91-26.x86_64
  • 如果无法访问aliyun的yum源
    1. 远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例
    2. 下载对应内核最新版本的SysAK rpm包。

      例如,通过uname -a命令查询ECS实例的内核版本为4.19.91-26.al7.x86_64,该内核最新版本的SysAK rpm包是sysak-4.19.91-26-1.3.0-1.al7.x86_64.rpm。执行命令如下:

      wget http://mirrors.aliyun.com/alinux/2.1903/plus/x86_64/Packages/sysak-4.19.91-26-1.3.0-1.al7.x86_64.rpm
      说明 您可以访问镜像源地址,查看对应内核最新版本的SysAK rpm包。
    3. 执行以下命令,安装SysAK。
      rpm -ivh --nodeps <SysAK rpm包安装路径>
      例如,使用wget命令默认安装在root路径,执行命令如下:
      rpm -ivh --nodeps sysak-4.19.91-26-1.3.0-1.al7.x86_64.rpm
Anolis OS 8.4 ANCK
  1. 远程连接ECS实例。具体操作,请参见通过密码或密钥认证登录Linux实例
  2. 下载对应内核最新版本的SysAK rpm包。

    例如,通过uname -a命令查询ECS实例的内核版本为4.19.91-24.8.1.an8.x86_64,该内核最新版本的SysAK rpm包是sysak-4.19.91-24.8-1.2.1-1.an8.x86_64。执行命令如下:

    wget https://gitee.com/anolis/sysak/ales/10ttach_fi11048/download/sysak-4.19.91-24.8-1.2.1-1.an8.x86_64.rpm
    说明 您可以访问sysak rpm地址,查看对应内核最新版本的SysAK rpm包。
  3. 执行以下命令,安装SysAK。
    rpm -ivh --nodeps <SysAK rpm包安装路径>
    例如,使用wget命令默认安装在root路径,执行命令如下:
    rpm -ivh --nodeps sysak-4.19.91-24.8-1.2.1-1.an8.x86_64.rpm
CentOS 7及其他内核版本大于3.10的Linux系统 仅支持开源版本自定义编译安装,可能存在兼容性问题。直接访问SysAK开源地址进行安装。

使用SysAK

使用方法

常用命令 说明
sysak help 查看SysAK。
Usage: sysak [ cmd ] [ subcmd [ cmdargs ] ]
  • cmd:为SysAK管理工具相关命令,包括list、help。
  • subcmd:为SysAK各种工具子功能相关命令。
  • 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 ]
  • -a:全系统扫描。
  • -p:只扫描系统panic事件。
  • -i:只扫描已知问题。
其他还有一些功能参数可配合ossre服务端进行使用。
loadtask 诊断系统load情况,输出load高的原因及负载贡献最多的进程。 sysak loadtask [ -m maxload ] [ -i interval ] [ -f outfile ] [ -d ] [ -s ]
  • -m:设置要监控的load值,大于这个值时自动开启诊断。如果不设置,则立即对当前系统进行诊断。
  • -i:监控load时,每次扫描的间隔时长,单位秒。
  • -f:输出信息的存放文件,默认是/var/log/sysak/loadtask.log
  • -d:后台运行,所有大于maxload的信息都会进行保存。
  • -s:在控制台显示摘要信息。
  • -g:同时生成全系统火焰图。
iosdiag io诊断工具。 sysak iosdiag [ options ] subcmd [ cmdargs ]
  • options
    • -u url:指定URL,将会通过curl命令把诊断日志文件打包上传到该URL,不指定URL不上传。
    • -s latency/hangdetect:停止诊断。
  • subcmd
    • latency:执行io延迟诊断功能。
    • hangdetect:执行io夯诊断功能。
  • cmdargs

    -h,跟在子命令之后显示功能支持参数。

更多信息,请参见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 网络延迟探测定界工具。 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。可选,默认一直运行。
    更多信息,请参见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:输出到指定文件。