Linux 常用监控工具

2013-05-12 linux monitor

在此简单列举一些常见的监控工具,以及配置方式等。

SAR

sar (select activity information) 用于采集系统的信息,默认会保存一个月的信息,在 CentOS 中包含在 sysstat软件包中。与此相关的还有:

  • sac, system ativity data collector。也就是 sar 的后端,用于收集信息;
  • sa1,用于将信息保存为二进制信息,默认位置为 /var/log/sa/saXX (其中XX表示当月的日期);
  • sar2,显示每天的统计信息,是 一个 shell 脚本
  • sadf,用于转换为其它的格式 (如csv,xml) 的程序。

sar1 和 sar2 会在 cron 任务中调用,配置在 /etc/cron.d/sysstat 文件中,默认每 10 分钟调用 sa1 采集一次数据;在 23:53 时通过 sa2 转换一次数据,默认保存 28 天,可以在 /usr/lib64/sa/sa2 中设置。

其中 /etc/cron.d/sysstat 文件内容如下。

# Run system activity accounting tool every 10 minutes
*/10 * * * * root /usr/lib64/sa/sa1 1 1
# Generate a daily summary of process accounting at 23:53
53 23 * * * root /usr/lib64/sa/sa2 -A

因为使用的是 crontab ,所以最小的粒度是 1min;当然,也可以使用 sa1 1 60 每秒执行依次,并执行 60 次,进一步减小监控的粒度。

保存数据

默认会将监控数据保存在 /var/log/sa/ 目录下,其中保存的数据,例如有一个 sa01 文件,可以直接通过 sar -f /var/log/sa/sa01 命令查看。

简单列举常用的参数:

sar [interval [count]]
    如果不使用时间参数则会显示到现在为止,所搜集的统计数据;
    -A
    保存所有,等加于-bBdHqrRSuvwWy -I SUM -I XALL -m ALL -n ALL -u ALL -P ALL;
    -f file
    从指定文件读取显示;
    CPU
    -u 统计平均值;-P ALL可以指定cpu号或者显示所有;

磁盘建议采用 iostat ,sar -d 采用的设备名称不太好识别,采用的是从设备号。

关于一些常见的监控项,可以参考如下图片:

monitor sar

TOP

top 是查看资源最常用的方式。

常用场景

简单列举下经常使用的场景。

Batch Mode

默认是交互模式,也就是循环执行,并接收用户的按键,这样对于一些采集的程序就不方便使用,这里可以使用 Batch Mode 。

----- 使用Batch Mode打印指标,此时仍是无限循环
$ top -b

----- 通过-n参数指定只打印一次
$ top -b -n 1

----- 指定时间点运行,需要注意TERM环境变量,top命令需要但是at并没有获取该参数
$ cat ./test.at
TERM=linux top -b -n 1 >/tmp/top-report.txt
$ at -f ./test.at now+1minutes

监听特定进程

可以通过如下方式指定只监控特定进程或者用户。

----- 指定多个进程
$ top -p 4360,4358
$ top -p 4360 -p 4358

----- 指定用户
$ top -u johndoe
$ top -u 500
$ top -U johndoe

多线程

可以通过 ps -eLf 命令查看,也即通过 -L 参数显示其 LWP(线程ID) 和 NLWP(线程的个数),而且,还可以查看线程在哪个 CPU 上运行。

$ ps -eo ruser,pid,ppid,lwp,psr,args -L

其中,每一列依次为:用户ID,进程ID,父进程ID,线程ID,运行该线程的CPU的序号,命令行参数(包括命令本身)。

对于 top 命令,可以通过 top -p LWPtop -H 或者 top + H ,也即通过 H 命令打开线程。

一些其它的常用命令如下。

----- 通过-H(Threads toggle)参数,一行显示一个线程
$ top -H -p `pidof mysqld`

----- 查看所有存在的线程,H(Show threads as if they were processes)
$ ps Hp `pidof mysqld`

----- 命令行列默认显示的是cmdline信息,可以通过c参数限制comm的信息
$ ps cuHp `pidof mysqld`

----- 也可以通过如下方式指定显示的列,详细参数可以将comm替换为args或者cmd
$ ps -o ruser,pid,ppid,lwp,psr,%cpu,%mem,vsz,rss,lstart,etime,comm Hp `pidof mysqld`
----- 如果不需要Header可以添加h选项
$ ps h -o ruser,pid,ppid,lwp,psr,%cpu,%mem,vsz,rss,lstart,etime,comm Hp `pidof mysqld`

----- 查看线程调用堆栈
$ pstack `pidof mysqld`

----- 查看线程数
$ pstree -p `pidof mysqld`