procfs虚拟文件系统
/proc虚拟文件系统(也叫procfs)是Unix操作系统所使用的虚拟文件系统的Linux实现,包括Sun Solaris、LinuxBSD。在/proc开始时,它以一个标准文件系统出现,并包含与正在运行的进程IDs同样名字的文件。
然而,在/proc中的文件不占用磁盘空间,它们存在于工作存储器(内存)中。/proc最初的目的是便于进程信息的存取,但是现在,在Linux中,它可被内核的每一部分使用来报告某些事情。
在/proc文件系统提供的成百上千的值当中,我们将集中考虑集群监控所需的最小集,它们包括:
- /proc/loadavg:包含系统负载平均值;
- /proc/meminfo:包含存储管理统计量;
- /proc/net/dev:包含网卡度量;
- /proc/stat:包含内核统计量;
- /proc/uptime:包含总的系统正常工作时间及空闲时间。
每个文件提供的值的数量是不同的。这些文件的完整有效值列表如下。
/proc/loadavg:负载
- 1秒钟平均负载;
- 5秒钟平均负载;
- 15秒钟平均负载;
- 总作业数;
- 正在运行的作业总数。
/proc/meminfo:存储器信息
- 活动存储器;
- 不活动存储器;
- 缓冲存储器;
- 高速缓冲存储器;
- 总的自由存储器;
- 总的高位存储器;
- 自由高位存储器;
- 总的低位存储器;
- 自由低位存储器;
- 共享存储器;
- 交换存储器;
- 交换高速缓冲存储器;
- 交换自由存储器;
- 总存储器。
/proc/net/dev:网卡数据
- 接收到的字节;
- 接收到的压缩字节;
- 收到的误码数;
- 收到的漏失误码;
- 收到的FIFO误码;
- 收到的帧误码;
- 收到的多播误码;
- 收到的总包数;
- 已传输的字节;
- 已传输的压缩字节;
- 传输误码总数;
- 传输载波误码;
- 传输冲突误码;
- 传输漏失误码;
- 传输FIFO误码;
- 传输的总包数。
/proc/stat:系统状态
- 引导时间;
- 上下文切换数量;
- 中断总量;
- 进页面总数;
- 出页面总数;
- 进程总数;
- 换入总数;
- 换出总数;
- 合计CPU空闲时间;
- 合计CPU nice时间;
- 合计CPU系统时间;
- 合计CPU用户时间。
- 同时提供对每个CPU的:
- 单个CPU空闲时间;
- 单个CPU nice时间;
- 单个CPU系统时间;
- 单个CPU用户时间。
- 以及对每个磁盘驱动器的如下数据:
- 单个磁盘块读;
- 单个磁盘块写;
- 单个磁盘I/O总数;
- 单个磁盘I/O读;
- 单个磁盘I/O写。
/proc/uptime:工作时间
- 系统总工作时间;
- 系统总空闲时间。
值得注意的是,每次某个/proc被读时,一个句柄函数都被内核或特有模块调用,来产生数据。数据在运行中产生,不管是读一个字符还是一个大的字块,整个文件都将被重建。这对效率是至关重要的一点,因为使用/proc的任何系统监控器将吞下整个文件,而不是一点一点地处理它。
tsdb采集loadavg采集脚本
#!/bin/bash # loadavg-collector.sh # /proc/loadavg # 0.00 0.00 0.00 1/173 30545 # The first three fields in this file are load average figures giving the number of jobs in the run queue (state R) or waiting # for disk I/O (state D) averaged over 1, 5, and 15 minutes. They are the same as the load average numbers given by uptime(1) # and other programs. # The fourth field consists of two numbers separated by a slash (/). The first of these is the number of currently executing # kernel scheduling entities (processes, threads); this will be less than or equal to the number of CPUs. # The value after the slash is the number of kernel scheduling entities that currently exist on the system. # The fifth field is the PID of the process that was most recently created on the system. # 该脚本每15秒输出如下格式内容,并直接通过nc提交给open-tsdb: # put proc.loadavg.1m 1398245238 0.00 host=tyunwei2.tsptest # put proc.loadavg.5m 1398245238 0.00 host=tyunwei2.tsptest set -e while true;do awk -v now=`date +%s` -v host=`hostname` \ '{ print "put proc.loadavg.1m "now " "$1" host="host;print "put proc.loadavg.5m "now " "$2" host="host }' /proc/loadavg sleep 15 done | nc -w 30 192.168.0.75 4242