系统指标

目录

1. cpu.xxx

1.1 cpu空闲率cpu.idle

cpu.idle表示除硬盘IO等待时间以外其它等待时间,这个值越大,表示cpu越空闲,还可以执行更多的任务,反之亦然,此处我们falcon展示的是idle的波动情况, 而不是像sar -u命令展示出来的瞬时值,其中sar命令计算公式:
(/proc/stat中当前时间对应的cpu.idle值 )/ (/proc/stat中当前时间对应的cpu.total值),cpu.total就是cpu那一行所有项的加和。
falcon中计算公式:
(/proc/stat中当前时间对应的cpu.idle值 - /proc/stat中上一秒对应的cpu.idle值) * 100 / (/proc/stat中当前时间对应的cpu.total值 - /proc/stat中上一秒对应的cpu.total值)

1.2 cpu.iowait

cpu.iowait表示在一个采样周期内有百分之几的时间属于以下情况:CPU空闲、并且有仍未完成的I/O请求。此指标不能用来单独判断IO瓶颈问题,这与IO并发度有很大关系,当此指标升高时,还应看一下disk.io.await指标,详情可参见http://linuxperf.com/?p=33
falcon中计算公式:
(/proc/stat中当前时间对应的cpu.iowait值 - /proc/stat中上一秒对应的cpu.iowait值) * 100 / (/proc/stat中当前时间对应的cpu.total值 - /proc/stat中上一秒对应的cpu.total值)

1.3 cpu.steal

cpu.steal表示被同一宿主机上的其他vm所占用的超出指定cpu配额的程度,例如一台宿主机中每台vm的cpu配额是25%,但是每个vm可以使用超过25%的真实cpu时间片,此时对于其他的vm来说就出现了cpu.steal。原因可能是你的虚拟机需要更多的cpu配额,此时要看是不是st在同一宿主所有的vm上都涨了;还有可能是物理宿主机超卖,此时要看是不是只有一部分vm的st陡增。如果发生了cpu.steal报警,此时有三种解决方法:关闭此vm,并在其他的宿主上申请;联系云,增加此vm的cpu的配额;若是一直很高,联系云,可能有超卖。

1.4 其他cpu监控项的说明

cpu.user CPU用于运行用户态进程的时间比例。
cpu.nice CPU用于以Nice优先级运行用户态进程的时间比例。
cpu.busy 等于 1 - cpu.idle。
cpu.system CPU用于运行内核态进程的时间比例。
cpu.guest CPU用于运行虚处理器的时间比例。
cpu.irq CPU用于硬中断的时间比例。
cpu.softirq CPU处于软中断的时间比例。
cpu.switches CPU上下文切换次数,计数器类型。

使用 cat /proc/stat 可查看CPU的使用情况。 

从左至又的各数据项的含义分别为 user, nice, system, idle, iowait,irq, softirq, stealstolen, guest, 均为从系统开始累计到当前时刻的值,单位为jiffies(节拍数),一个节拍大致可理解为操作系统进程调度的最小时间片,不同linux内核可能值有不同。

falcon中CPU监控项计算公式:
以cpu.steal为例,计算方法为 (/proc/stat中当前时间对应的cpu.steal值 - /proc/stat中上一秒对应的cpu.steal值) * 100 / (/proc/stat中当前时间对应的cpu.total值 - /proc/stat中上一秒对应的cpu.total值)
cpu.total值为图中各项之和,即user+nice+system+idle+iowait+irq+softirq+stealstolen+guest

2. tcp当前连接数snmp.Tcp.CurrEstab

snmp.Tcp.CurrEstab表示当前已建立的tcp连接数,GAUGE类型,即瞬时值,计算方法: 

读取/proc/net/snmp中的内容,找到tcp的部分,并读取CurrEstab项对应的值上报

3. snmp.Tcp.XXX( 除了CurrEstab)

和snmp.Tcp.CurrEstab一样,都是读取/proc/net/snmp中的内容,找到tcp部分,根据标签如ActiveOpens上报对应的值。 snmp.Tcp.ActiveOpens tcp主动连接的发送次数
snmp.Tcp.AttemptFails tcp syn_recv状态被reset的次数
snmp.Tcp.EstabResets 当tcp状态在CLOSE_WAIT或TCP_ESTABLISHED状态时被reset的次数
snmp.Tcp.InErrs tcp协议层接收出错的数据包的个数
snmp.Tcp.InSegs tcp协议层收到的数据包个数
snmp.Tcp.MaxConn 主机可支持的TCP最大连接数目,初始化为-1
snmp.Tcp.OutRsts tcp协议层发送的reset数据包的个数
snmp.Tcp.OutSegs tcp协议层发出的数据包个数
snmp.Tcp.PassiveOpens tcp listen状态被动打开的次数
snmp.Tcp.RetransSegs tcp协议层重传的数据包个数
snmp.Tcp.RtoAlgorithm 转发未答复对象的延时的算法的数目,初始化为1
snmp.Tcp.RtoMax TCP延迟重发的最大值,初始化为120000
snmp.Tcp.RtoMin TCP延迟重发的最小值,初始化为200

4. snmp.Udp.XXX

本机udp连接的一些指标,也是读取/proc/net/snmp中的内容,找到udp部分,根据标签如SndbufErrors上报对应的值。

5. net.port.listen/port=xxx

此监控项监控某个端口是否开启,开启为1,否则为0,瞬时值,计算方法:
(读取ss -nlt得出的内容,判断是否有xxx端口,若有则上报1,否则是0)

6. ntp.offset

此监控项,表示从指定ntp服务器获得的标准时间与本地时间的差值的绝对值,计算方法: (从指定的ntp服务器获得标准时间t1,然后获得本地时间t2,上报Abs(t1-t2),注意单位是毫秒)

7. TcpExt.xxx

详情请参考:TcpExt指标说明
此监控项集合表示tcp连接状态值,计算方法:
(读取/proc/net/netstat中的内容,按照标签读取对应的值上报),此处只说明其中比较常用的几个:
TcpExt.ListenOverflows,表示超出listen队列长度(即一般网络编程中listen(number)的number)的连接数,此项过高可以在一定程度上说明后端处理请求慢
TcpExt.ListenDrops,除了包含ListenOverflows的情况外,内存不足无法新建连接也会造成此项过大
Tcp.AttemptFails,从syn_send和syn_rcvd直接倒closed状态的连接数,加上syn_rcvd直接到listen状态的连接数
TcpExt.TCPBacklogDrop,如果socket被user锁住,后退一步内核会把包加到sk_backlog_queue,但如果因为sk_rcv_buf不足的原因入队失败,计数器加1,此参数无需关注,主要看listenoverflows
TcpExt.TCPLoss tcp协议栈丢失数据包而进行恢复的次数
TcpExt.TCPLossFailures tcp协议栈丢失数据包而进行恢复失败的次数
TcpExt.TCPLostRetransmit tcp协议栈丢失重传的数据包的次数
TcpExt.TCPTimeouts tcp数据在指定时间内没有受到应答ack而超时的次数
TcpExt.TCPAbortOnTimeout tcp协议栈各定时器超时重复次数超过最大限制而关闭sock的次数

TcpExt.ArpFilter arp_rcv() -> NETFILTER(ARP_IN) -> arp_process() 与TCP无关,接收到ARP packet时做一次输出路由查找(sip, tip),如果找到的路由项的device与输入device的不同,计数器加1
TcpExt.DelayedACKs 尝试发送 delayed ACK 的次数,包括未成功发送的次数
TcpExt.DelayedACKLocked 发送方在发送数据包时,如果此时距离最近接收到数据包的时间间隔足够短(即在RTO内,此事件由RTO决定,RTO根据每次接收包的间隔时间动态计算,处于40ms与min(200ms, 1次RTT)之间),说明双方处于你来我往的双向数据传输中,就进入延迟确认模式。延迟确认定时器触发后,会发出一个被延迟的ACK,如果此时用户态进程正在使用此socket,则无法发送 delayed ACK 。而TcpExt.DelayedACKLocked就表示:用户态进程正在使用socket而导致无法发送 delayed ACK 的次数
TcpExt.LockDroppedIcmps icmp协议栈处理ICMP_DEST_UNREACH, ICMP_TIME_EXCEED, ICMP_QUENCH类型包时,当时sock正被用户程序锁定的包个数
TcpExt.PruneCalled 因为 socket 缓冲区满而被 prune 的包数量
TcpExt.TCPAbortFailed 尝试结束连接失败的次数
TcpExt.TCPAbortOnMemory 因内存问题关闭连接的次数
TcpExt.TCPDSACKUndo 撤销了发送DSACK包的次数,DSACK要求重传所有需要重传的数据.
TcpExt.TCPFastRetrans 成功快速重传的 skb 数量
TcpExt.TCPMemoryPressures 分配skb失败导致进入协议栈内存紧缺状态的次数
TcpExt.TCPMinTTLDrop 在接收到TCP报文或者TCP相关的ICMP报文时,检查IP TTL,如果小于socket option设置的一个阀值,就丢包
TcpExt.TCPPrequeueDropped 如果因为内存不足(ucopy.memory < sk->rcv_buf)而加入到prequeue失败,重新由backlog处理,计数器加1
TcpExt.TCPSchedulerFailed 如果在 delay ack 处理函数中发现 prequeue 还有数据,就加1
TcpExt.TCPSpuriousRTOs 通过F-RTO机制发现的虚假超时个数
TcpExt.TCPTSReorder 使用 TCP Timestamp 机制检测到的乱序次数
TcpExt.TW 经过正常的的超时结束 TIME_WAIT 状态的 socket 数量

8. mem.xxx

此监控项集合包括内存,swap,cache等的状态值,计算这些指标的基础都是读取/proc/meminfo的内容,然后返回map集合,其中包括各项指标机器对应的值: 

此处列举常用的几个:
mem.memtotal, 总内存,即图中的MemTotal。
mem.memused, 使用的内存。
mem.memcached 高速缓冲存储器(cache memory)使用的内存的大小,proc/meminfo中的Cached项。
mem.memfree, 空闲内存,包括/proc/meminfo中的 MemFree+Cached+Buffer。
mem.single.memfree 被系统留着未使用的内存, /proc/meminfo 中MemFree一项的值。
mem.memfree.percent, 表示可用内存的占本机内存的比例,计算方法为memfree/float(memtotal)。
mem.memused.percent, 表示已用内存的比例,即 1 - mem.memfree.percent。
mem.swapfree.percent,表示可用交换区所占本机总swap的比例,即SwapFree/SwapTotal。
mem.swapused.percent,表示已用交换区的比例,即1 - mem.swapfree.percent。
另外,增加了一个名为proc.falcon.agent.memused 的监控项,表示该节点上Falcon-Agent运行所占用的内存。

9. load.xxx

此监控项集合包括1min,5min,15min的负载值(load.1min,load.5min,load.15min),每一种又分为总的load和每个cpu的load,计算方法为读取/proc/loadavg中的前三项值: 

load.1min,load.5min,load.15min分别表示最近1、5、15分钟内运行队列中的平均进程数量。而load.1minPerCPU,load.5minPerCPU,load.15minPerCPU分别表示每个cpu所占load。例如,load.1minPerCPU = load.1min/cpu核数量

10. kernel.xxx

10.1 kernel.files.allocated

表示已经分配的文件描述符数目,从/proc/sys/fs/file-nr (第一项)读取并上报

10.2 kernel.maxfiles

表示内核可以分配的最大文件描述符数,从/proc/sys/fs/file-max读取并上报

10.3 kernel.files.left

表示剩余的文件描述符数目,kernel.maxfiles-kernel.files.allocated

10.4 kernel.files.percent

表示已分配的文件描述符数与总的文件描述符数的比例,计算公式为:
float64(kernel.files.allocated) * 100 / float64(kernel.maxfiles)

10.5 kernel.coredump

表示运行在机器上的程序是否发生了coredump。
这个metric默认值为1,表示没有程序发生coredump。但如果一分钟内检查到有程序coredump了,该值变为0。
默认发生coredump时产生的core文件都以【命令名-进程号-时间戳】的形式保存在机器的/var/sankuai/logs/core/下。

10.6 kernel.coredump.proc/name=xxx

表示进程级别的coredump监控。

11. net.if.xxx(网卡监控相关指标)

net.if.xxx.xxx监控流量的出入情况,基础都是读取/proc/net/dev中的数据,然后取每个表头对应的数据做简单的处理,再上报,其中
net.if.in.Mbps/iface=eth0, 表示eth0网卡的流量流入速度,单位是Mbps(兆比特每秒)nettype=1g表示千兆网卡,nettype=2g表示双千兆网卡,nettype=10g表示万兆网卡,nettype=20g表示双万兆网卡
net.if.in.bps/iface=eth0, 意思同上,单位是bps(比特每秒)
net.if.in.bytes/iface=eth0,表示eth0网卡的流入流量,单位是byte,1byte=8bit(比特)
net.if.change 值为0表示网卡速率没有变化,值为1表示网卡速率有变化需要报警。
net.if.change的值的计算方式:
通过每次读取/sys/class/net/bond0/speed文件 或 /sys/class/net/eth0/speed文件与falcon-agent第一次启动时读取这个文件获得的值相比较,如果相同则上报0表示网卡速率没有变化,如果不同则上报1表示网卡速率有变化。
net.if.in.Mbps.all 所有网卡的流量流入速度和,单位为Mbps。
net.if.out.Mbps.all 所有网卡的流量流出速度和,单位为Mbps。
net.if.total.Mbps.all 所有网卡的出入流量速度和(net.if.in.Mbps.all + net.if.out.Mbps.all),单位为Mbps。

12. 磁盘监控

df.bytes.xxx.xxx/fstype=xxx,mount=xxx此监控项集合监控硬盘各分区的使用情况,首先读取 /proc/mounts,获得所有的挂载点以及挂载分区的文件类型: 

然后使用syscall.Statfs_t获得每个挂载分区的存储使用情况。配合下图来看:

 

举几个例子说明磁盘监控项是如何计算的:
df.bytes.free.percent/fstype=ext4, mount=/opt,表示文件类型为ext4的/opt 分区中剩余容量所占本分区总容量的百分比。配合上图中数据来看主机这个监控项的值为:1-52%=48%
df.statistics.total,表示主机上磁盘的总空间。图中主机监控项的值为:559G(所有分区的和)
df.statistics.used,表示主机上已使用的磁盘空间。图中主机监控项的值为:264G (所有分区用量的和)
df.statistics.used.percent,表示主机磁盘利用率,计算公式为:df.statistics.used/df.statistics.percent*100%,即上述两项相除取百分比得到。
另外,df.inodes.xxx.xxx/fstype=xxx,mount=xxx此监控项集合监控硬盘各分区的inode使用情况。其中,df.inodes.total:inode总数,df.inodes.free:可用inode数目,df.inodes.free.percent:可用inode占比。

13. ss.estab

此监控项表示本机已建立的连接数,可以执行命令:ss | grep ESTAB | wc -l 查看
ss.closewait 表示处于close wait的TCP连接数量,执行命令:ss -tan|grep CLOSE-WAIT |wc -l 查看
数据获取方式,在机器上执行命令:ss -s

ss.closed 表示已经关闭的TCP连接数(closed 43)
ss.timewait 表示处于等待状态的TCP连接数(timewait 15)

14. cpu.100

7天内cpu.busy加和平均值, 一天一个值(已弃用)

15. cpu.90/unit=h, net.90/unit=h, disk.90/unit=h, io.90/unit=h

1天内cpu, net, disk, io利用率排序,90分位对应的值; 一天一个值; 具体计算方法:资源利用率计算方法

16. util/unit=d

max(cpu.90/unit=h, net.90/unit=h, disk.90/unit=h, io.90/unit=h), 一天一个值;具体计算方法:资源利用率计算方法

17. disk.io.util

表示每个上报周期内,IO操作的时间所占的比例,表示此上报周期内IO操作的繁忙程度,值越大说明磁盘IO操作越频繁,磁盘压力越大。
当前falcon的具体计算方法:
读取/proc/diskstats文件,
纳入计算的条件:只选取第四个字段不为0,且对于不同的device(即第三个字段),falcon只处理len(device)==3 and (前缀为sd 或 vd) 或者len(device)>=4 and 前缀为 xvd的设备。

一般只会上报vda/vdb/vdc这三块盘的监控数据,disk.io.util是根据倒数第2个指标计算的,各个指标的含义如下:

/proc/diskstats文件比/sys/block/sda/stat文件多3个域,从左至右分别对应主设备号,次设备号和设备名称。后续的11个域在这两个文件里是相同的,它们的函义将在下面解释。除了第9个域,所有的域都是从启动时的累积值。

第1个域:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。
第2个域:合并读完成次数。
第3个域:读扇区的次数,成功读过的扇区总次数。
第4个域:读花费的毫秒数,这是所有读操作所花费的毫秒数(用make_request()到end_that_request_last()测量)。
第5个域:写完成次数 ----写完成的次数,成功写完成的总次数。
第6个域:合并写完成次数 -----合并写次数。
第7个域:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。
第8个域:写操作花费的毫秒数 --- 写花费的毫秒数,这是所有写操作所花费的毫秒数(用
make_request()到end_that_request_last()测量)。
第9个域:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小。
第10个域:输入/输出操作花费的毫秒数 ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。
第11个域:输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。
以disk.io.util为例,计算公式为:(当前上报时间点第10个域的值 - 上一秒那个时间点第10个域的值) * 100 / 一个收集周期的时间
现在一个收集周期的时间为1s,上面公式中时间单位需要转换为毫秒数,也就是1000。

其他监控项的计算方法类似,它们代表的含义如下,计算方式与上面介绍过的disk.io.util类似:
disk.io.ios_in_progress: 当前正在处理的输入/输出请求数
disk.io.msec_total: ios_in_progress >= 1 的时间(毫秒数)
disk.io.msec_read: 读扇区花费的毫秒数
disk.io.msec_write : 写扇区花费的毫秒数
disk.io.msec_weighted_total:输入/输出的加权毫秒数。
disk.io.read_bytes: IO读的速率。
disk.io.write_bytes: IO写的速率。
disk.io.read_requests: 完成的读请求数。
disk.io.write_requests: 完成的写请求数。
disk.io.read_merged: 合并读完成数。
disk.io.write_merged: 合并写完成数。
disk.io.read_sectors: 读扇区次数。
disk.io.write_sectors: 写扇区次数。

另外,下面四个监控项是用iostat -x读出。
disk.io.avgqu-sz:平均请求队列的长度。
disk.io.avgrq_sz:平均请求扇区的大小。
disk.io.await: 每一个IO请求的处理的平均时间(单位是毫秒)。
disk.io.svctm: 表示平均每次设备I/O操作的服务时间(以毫秒为单位)。

根据不同的tag有三个具体的counter:
device=某个具体的device(磁盘),表示这个磁盘的IO操作繁忙程度;
device=all,表示此主机上所有符合计算条件的磁盘的平均繁忙程度;
device=max表示所有符合计算条件的磁盘中最大的繁忙程度。

磁盘有3块,vda/vdb/vdc,它们各自有自己的分区:vda1/vdb1/vdc1,挂载点都是挂载到分区上面的,所以有:
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 25G 17G 7.2G 70% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/vdc1 493G 157G 311G 34% /opt
vdb1分区是供swap使用的,通过cat /etc/fstab可以看到:
UUID=dbc91a45-e531-4980-b5da-c9460df76ac8 / ext4 defaults 1 1
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/vdb1 none swap sw 0 0
/dev/vdc1 /opt ext4 defaults 2 2

18. df.mounts.ro

取机器/proc/mounts文件,如果ext4或者xfs的为rw上报1,如果是ro则上报0

rootfs / rootfs rw 0 0
proc /proc proc rw,relatime 0 0
sysfs /sys sysfs rw,relatime 0 0
devtmpfs /dev devtmpfs rw,relatime,size=66042484k,nr_inodes=16510621,mode=755 0 0
devpts /dev/pts devpts rw,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /dev/shm tmpfs rw,relatime 0 0
/dev/sda1 / ext4 rw,relatime,barrier=1,data=ordered 0 0
/proc/bus/usb /proc/bus/usb usbfs rw,relatime 0 0
/dev/sdb1 /opt ext4 rw,relatime,barrier=1,data=ordered 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw,relatime 0 0

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值