Linux运维基本合集做运维,不怕出问题,就怕出问题,抓不住现场,蒙在鼓里。因此,依托强大的监测系统,收集尽可能多的指标,意义重大。但是哪些指标有意义呢?基于实践的思路,工程师在长期的经验中总结出来的经验才是最有价值的。在运维工程师长期的工作实践中,我们总结了一些系统运维过程中经常提到的指标,主要包括以下几类:CPULoad内存磁盘IO网络相关内核参数ss统计输出端口收集核心服务进程生存信息收集关键业务流程资源消耗NTP偏移量收集DNS解析收集每个类别,具体详细指标如下,这些指标由open-falcon的代理组件直接支持。falcon-agent每隔一定时间(目前为60秒)收集相关指标并上报给服务器。CPU相关收集项的计算方法:通过收集/proc/stat得到,可以参考sar命令的统计输出了解。cpu.idle:CPU或CPU空闲且系统没有未完成的磁盘I/O请求的时间百分比。cpu.busy:相对于cpu.idle,其值等于100减去cpu.idle。cpu.guest:一个或多个CPU运行虚拟处理器所花费的时间百分比。cpu.iowait:一个或多个CPU空闲的时间百分比,在此期间系统有一个未完成的磁盘I/O请求。cpu.irq:CPU或CPU用于服务硬件中断所花费的时间百分比。cpu.softirq:CPU或CPU用于服务软件中断所花费的时间百分比。cpu.nice:在用户级别使用nice执行时发生的CPU使用率百分比priority.cpu.steal:当管理程序为另一个虚拟处理器提供服务时,一个或多个虚拟CPU非自愿等待所花费的时间百分比。cpu.system:在系统级(内核).cpu执行时发生的CPU使用率百分比。user:在用户级别(应用程序)执行时发生的CPU利用率百分比。cpu.cnt:cpu核数。cpu.switches:cpu上下文切换次数,计算器类型。磁盘相关采集项计算方法取消:先读/proc/mounts拿到所有挂载点,然后通过syscall.Statfs_t拿到blocks和inode的使用情况。每个metric都会附加一组标签说明,类似mount=$mount,fstype=$fstype,其中$mount是挂载点,比如/home,$fstype是文件系统,比如ext4。df.bytes.free:可用磁盘,int64df.bytes.free.percent:可用磁盘占总量的百分比,float64,如32.1df.bytes.total:磁盘总大小,int64df.bytes.used:已用磁盘大小,int64df.bytes.used.percent:占磁盘总使用大小的百分比,float64df.inodes.total:inode总数,int64df.inodes.free:可用inode数,int64df.inodes.free.percent:availableinodeRatio,float64df.inodes.used:usedinodedata,int64df.inodes.used.percent:usedinoderatio,float64megacli工具输出使用megacli工具读取RAID相关信息,每个metric都会附上一组tag说明,它用于表示所属的PD或VD。PD格式为PD=Enclosure_ID:SLOT_ID。例如PD=32:0表示第一个磁盘,VD=0表示第一个逻辑磁盘。sys.disk.lsiraid.pd.Media_Error_Count:这个和后面三个指标目前只是作为数据收集,并不一定代表磁盘损坏(只是代表损坏概率变大)sys.disk。lsiraid.pd.Other_Error_Countsys.disk.lsiraid.pd.Predictive_Failure_Countsys.disk.lsiraid.pd.Drive_Temperaturesys.disk.lsiraid.pd.Firmware_state:如果值不为0,说明这个物理磁盘sys.disk.lsiraid有问题.vd.cache_policy:如果值不为0,说明这个逻辑磁盘缓存策略和设置不匹配sys.disk.lsiraid.vd.state:如果值不为0,说明有问题此逻辑磁盘SMART工具输出使用smartctl工具读取磁盘SMART信息。目前所有的指标只是作为数据收集,并不一定代表磁盘损坏(只是说明概率变高),每个指标都会有一组tag描述,表示盘符,比如device=/开发/sda。sys.disk.smart.Reallocated_Sector_Ctsys.disk.smart.Spin_Retry_Countsys.disk.smart.Reallocated_Event_Countsys.disk.smart.Current_Pending_Sectorsys.disk.smart.Offline_Uncorrectablesys.disk.smart.Temperature_Celsius写分区读写监控测试是否所有挂载分区可读,每个metric都会有一组tag描述,表示挂载点,比如mount=/homesys.disk.rw:如果值不为0,说明这个分区的读写有问题。IO相关采集项的计算方式:每秒采集一次/proc/diskstats,计算差值,都是计数器类型。每个metric都会有一组标签说明,比如device=$device,用来表示具体的设备,比如sda1、sdb。用户可以参考iostat的帮助文档了解具体的metric含义。disk.io.ios_in_progress:当前正在进行的实际I/O请求数。disk.io.msec_read:所有读取花费的ms总数。disk.io.msec_total:ios_in_progress>=1.disk的时间量。io.msec_weighted_total:最近I/O完成时间和backlog的度量。disk.io.msec_write:所有写入花费的ms总数。disk.io.read_merged:相邻的读请求合并在一个req.disk.io.read_requests中:读取成功完成的总数。disk.io.read_sectors:读取成功的扇区总数。disk.io.write_merged:相邻的写入请求合并为一个请求。disk.io.write_requests:写入成功完成的总数。disk.io.write_sectors:写入成功的扇区总数。disk.io.read_bytes:单位是byte的数字disk.io.write_bytes:单位是byte的数字disk.io.avgrq_sz:下面几个值就是iostat-x1看到的值disk.io.avgqu-szdisk.io.awaitdisk.io.svctmdisk.io.util:是个百分数,比如56.43,表示56.43%机器负载相关采集项提取计算方法:读/proc/loadavg是原,类型的:load.1minload.5minload.15min内存相关获取项的计算方法:读取/proc/meminfo中的内容,其中mem.memfree是free+buffers+cached,mem.memused=mem.memtotal-mem.memfree用户可以参考free有关详细信息,请查看命令输出和帮助文档以了解每个指标的含义。mem.memtotal:总内存大小mem.memused:使用了多少内存mem.memused.percent:使用内存的百分比mem.memfreemem.memfree.percentmem.swaptotal:总交换大小percent:使用的交换空间比例mem.swapfreemem。swapfree.percent网络相关集合项计算方法:读取/proc/net/dev的内容,每一个metric都附有一组标签,形式为iface=$iface,表示具体的接口,比如eth0。带in的metric表示流入,out表示流出,total是in+out的总和。支持的指标如下:net.if.in.bytesnet.if.in.compressednet.if.in.droppednet.if。in.errorsnet.if.in.fifo.errsnet.if.in.frame.errsnet.if.in.multicastnet.if.in.packetsnet.if.out.bytesnet.if.out.carrier.errsnet.if.out。collisionsnet.if.out.compressednet.if.out.droppednet.if.out.errorsnet.if.out.fifo.errsnet.if.out.packetsnet.if.total.bytesnet.if.total.droppednet.if.total。errorsnet.if.total.packets端口集合项计算方式,通过ss-ln,判断指定端口是否处于监听状态。原始值类型,值要么是1:表示正在听,要么是0,表示不听。每个指标都附有一组标记,例如port=port,其中port是特定端口。net.port.listen机器内核配置kernel.maxfiles:读取/proc/sys/fs/file-maxkernel.files.allocated:首先读取/proc/sys/fs/file-nrFieldkernel.files。left:value=kernel.maxfiles-kernel.files.allocatedkernel.maxproc:read/proc/sys/kernel/pid_maxntp获取项使用ntpq-pn获取本地时间相对于ntp服务器的偏移量。sys.ntp.offset:本地偏移时间,单位ms,如果值过大或为0,说明有异常,需要报警进程监控。一种是基于进程的名字,比如name=sshd;另一个基于命令行。例如,Java应用程序进程的名称可能是java。按照第一种情况,是没法区分的。您可以在此时配置cmdline。如cmdline=./falcon_agent-c./cfg.ini进程资源监控process.cpu.all:进程及其子进程使用的sys+usercpu,单位为jiffiesprocess.cpu.sys:进程和itssub-processes使用的syscpu,单位为jiffiesprocess.cpu.user:进程及其子进程使用的用户cpu,单位为jiffiesprocess.swap:进程及其子进程使用的swap,单位为pageprocess.fd:进程使用的文件描述符个数process.mem:进程占用的内存,单位bytess命令输出ss.orphanedss.closedss.timewaitss.slabinfo.timewaitss.synrecvss.estab(来源:book.open-falcon.org)
