下面列出的采集项都是falcon-agent直接支持的,每隔一段时间(目前是60s)采集汇报一次
CPU相关采集项
计算方法:每秒采集一次/proc/stat,计算差值。都是GAUGE类型的。
- cpu.idle 是个百分比的数字,比如80.3
- cpu.busy 与cpu.idle相对=100-cpu.idle
- cpu.guest guest时间占比
- cpu.iowait iowait时间占比
- cpu.irq irq时间占比
- cpu.softirq softirq时间占比
- cpu.nice nice时间占比
- cpu.steal steal时间占比
- cpu.system system时间占比
- cpu.user user时间占比
- cpu.cnt cpu核数
- cpu.switches cpu上下文切换次数,COUNTER类型
磁盘相关采集项
计算方法:先读取/proc/mounts拿到所有挂载点,然后通过syscall.Statfs_t拿到blocks和inode的使用情况,都是GAUGE类型的。
每个metric都会有个tag:mount=fstype,fstype是文件系统,比如ext4
- df.bytes.free 是个integer,表示free的block数目
- df.bytes.free.percent 是个float,表示free的block数目占总的block数目的百分比,比如32.1
- df.bytes.total 是个integer,表示block总数
- df.bytes.used 不解释
- df.bytes.used.percent 不解释
- df.inodes.total 是个integer,表示inode总数
- df.inodes.free 是个integer,表示free的inode数目
- df.inodes.free.percent 是个float,表示free的inode占比
- df.inodes.used 不解释
- df.inodes.used.percent 不解释
LSI RAID
使用 megacli 工具读取 RAID 相关信息,10分钟采集一次,tag 表明所属 PD 或者 VD:
PD=Enclosure_ID:SLOT_ID,如 PD=32:0 表明第一块磁盘
VD=0 表明第一个逻辑磁盘
- sys.disk.lsiraid.pd.Media_Error_Count 这个及以下三个指标目前仅作为数据收集,不一定意味磁盘损坏(概率变大)
- sys.disk.lsiraid.pd.Other_Error_Count
- sys.disk.lsiraid.pd.Predictive_Failure_Count
- sys.disk.lsiraid.pd.Drive_Temperature
- sys.disk.lsiraid.pd.Firmware_state 如果值不为0,则此物理磁盘出现问题
- sys.disk.lsiraid.vd.cache_policy 如果值不为0,表示此逻辑磁盘缓存策略和设置不符
- sys.disk.lsiraid.vd.state 如果值不为0,表示此逻辑磁盘出现问题
SMART
使用 smartctl 工具读取磁盘 SMART 信息,10分钟采集一次,目前所有指标仅作为数据收集,不一定意味磁盘损坏(概率变大),tag 表明盘符,device=/dev/sda
- sys.disk.smart.Reallocated_Sector_Ct
- sys.disk.smart.Spin_Retry_Count
- sys.disk.smart.Reallocated_Event_Count
- sys.disk.smart.Current_Pending_Sector
- sys.disk.smart.Offline_Uncorrectable
- sys.disk.smart.Temperature_Celsius
分区读写监控
测试所有已挂载分区是否可读写,1分钟采集一次,tag 表明挂载点,mount=/home
- sys.disk.rw 如果值不为0,表明此分区读写出现问题
IO相关采集项
计算方法:每秒采集一次/proc/diskstats,计算差值,都是COUNTER类型的。
每个metric都会有个tag: device=$device,表示设备,比如sda1、sdb
下面各个采集项都是Integer,意思用中文表达不好说,直接给英文doc
- disk.io.ios_in_progress Number of actual I/O requests currently in flight.
- disk.io.msec_read Total number of ms spent by all reads.
- disk.io.msec_total Amount of time during which ios_in_progress >= 1.
- disk.io.msec_weighted_total Measure of recent I/O completion time and backlog.
- disk.io.msec_write Total number of ms spent by all writes.
- disk.io.read_merged Adjacent read requests merged in a single req.
- disk.io.read_requests Total number of reads completed successfully.
- disk.io.read_sectors Total number of sectors read successfully.
- disk.io.write_merged Adjacent write requests merged in a single req.
- disk.io.write_requests total number of writes completed successfully.
- disk.io.write_sectors total number of sectors written successfully.
- disk.io.read_bytes 单位是byte的数字
- disk.io.write_bytes 单位是byte的数字
- disk.io.avgrq_sz 下面几个值就是iostat -x 1看到的值
- disk.io.avgqu-sz
- disk.io.await
- disk.io.svctm
- disk.io.util 是个百分数,比如56.43,表示56.43%
机器负载相关采集项
计算方法:读取/proc/loadavg,都是GAUGE类型的。没啥好解释的,metric名称如下:
- load.1min
- load.5min
- load.15min
网络相关采集项
计算方法:读取/proc/net/dev,每秒采集一次,计算差值,都是Integer类型,都是COUNTER类型的。
每个metric都对应一个tag: iface=$iface,比如eth0
metric中带有in的表示流入情况,out表示流出情况,total是总量in+out,支持的metric如下:
- net.if.in.bytes
- net.if.in.compressed
- net.if.in.dropped
- net.if.in.errors
- net.if.in.fifo.errs
- net.if.in.frame.errs
- net.if.in.multicast
- net.if.in.packets
- net.if.out.bytes
- net.if.out.carrier.errs
- net.if.out.collisions
- net.if.out.compressed
- net.if.out.dropped
- net.if.out.errors
- net.if.out.fifo.errs
- net.if.out.packets
- net.if.total.bytes
- net.if.total.dropped
- net.if.total.errors
- net.if.total.packets
端口采集项
计算方法:ss -ln,获取里边正在处于listen状态的端口。GAUGE类型,值要么是1:代表在监听,要么是0,代表没有在监听
每个metric有tag:port=port就是端口
更新说明 最新版本不会把所有端口都上报,用户在portal上配置监控策略,对某些端口做监控,配置了哪些端口就汇报哪些端口
- net.port.listen
机器内核配置
都是GUAGE类型
- kernel.maxfiles 读取的/proc/sys/fs/file-max
- kernel.files.allocated 读取的/proc/sys/fs/file-nr第一个Field
- kernel.files.left 值=kernel.maxfiles-kernel.files.allocated
- kernel.maxproc 读取的/proc/sys/kernel/pid_max
ntp采集项
使用 ntpq -pn 获取本机时间相对于 ntp 服务器的 offset,10分钟采集一次
- sys.ntp.offset 本机偏移时间,单位为ms,值过大或者为0则表明有异常,需要报警
进程监控
- proc.num 进程数目,可以通过tag指定具体指哪个进程,比如name=sshd,如果是Java的应用进程名可能都是java,没法做区分,此时可以配置cmdline,比如cmdline=./falcon_agent-c./cfg.ini
其他采集项
- agent.alive 只有一个值,就是1,可以配合nodata(600)来做机器是否宕机的辅助判断依据
/proc/net/netstat中的部分采集项,TcpExt.拼接上下面各个字段就是metric,比如TcpExt.PruneCalled
- PruneCalled 慢速路径中,如果不能将数据直接复制到user space,需要加入到sk_receive_queue前,会检- 查receiver side memory是否允许,如果rcv_buf不足就可能prune ofo queue。此时计数器加1
- LockDroppedIcmps tcp_v4_err(): 接收到ICMP错误报文,但tcp socket被user锁住
- ArpFilter 在三手握手时的SYN_RECV状态中接收到RST或者SYN的次数
- TW inet_twdr_do_twkill_work(): TIME_WAIT超时的socket数量(timeout >= 4s)
- DelayedACKLocked ACK定时器因为user已经锁住而无法发送ACK的次数
- ListenOverflows 三路握手最后一步完全之后,Accept queue队列超过上限时加1
- ListenDrops 任何原因,包括Accept queue超限,创建新连接,继承端口失败等,加1
- TCPPrequeueDropped 如果因为内存不足(ucopy.memory < sk->rcv_buf)而加入到prequeue失败,重新由backlog处理,计数器加1
- TCPTSReorder Recovery状态时,接收到到部分确认(snd_una < high_seq)时但已经undo完成(undo_retrans == 0)的次数。 数量上与TCPPartialUndo相等。
- TCPDSACKUndo Disorder状态下,undo完成(undo_retrans == 0)的次数
- TCPLoss 丢包
- TCPLostRetransmit 根据SACK数据推测出的重段包丢失计数器:在tcp_sacktag_write_queue()->tcp_mark_lost_retrans(), 如果发现tcp_highest_sack_seq(tp)超过某skb在重传时的snd_nxt(TCB->ack_seq),就认为这个重传包 已经丢失了,加1(加的不是段数)。tcp_highest_sack_seq(tp)是被SACK过的具有最高SEQ号的skb的seq
- TCPLossFailures tcp_retransmit_timer(): icsk_retransmit==0(第一次进入重传状态)并且处于Loss状态下,计数器加1
- TCPFastRetrans (非RTO timer)快速重传次数,即tcp_fastretrans_alert()/tcp_simple_retransmit()->tcp_xmit_retransmit_queue()中,如果不是LOSS状态,就加1
- TCPTimeouts 在RTO timer中,从CWR/Open状态下第一次超时的次数,其余状态不计入这个计数器;SYN-ACK的超时次数
- TCPSchedulerFailed tcp_delack_timer(): 在delay ACK处理功能内,如果prequeue中仍有数据,计数器就加1;加入到prequeue,本来是期待着userspace(使用tcp_recvmsg()之类的系统调用)尽快处理之。其中仍有数据,可能隐含着userspace行为不佳。
- TCPAbortOnMemory 在执行tcp_close()/probe timer/keepalive timer时,orphan sockets数量和tcp_memory_allocated是否超过最大值的次数
- TCPAbortOnTimeout RTO/probe/keepalive timer到达最大重试次数或者最长重试时间的次数
- TCPAbortFailed tcp_send_active_reset(): alloc_skb()或者tcp_transmit_skb()失败。
- TCPMemoryPressures tcp_enter_memory_pressure()在从“非压力状态”切换到“有压力状态”时计数器加1
- TCPSpuriousRTOs tcp_process_frto(),如果frto_counter !=0 && frto_counter != 1加1
- TCPBacklogDrop 如果socket被user锁住,后退一步内核会把包加到sk_backlog_queue,但如果因为sk_rcv_buf不足的原因入队失败,计数器加1
- TCPMinTTLDrop 在接收到TCP报文或者TCP相关的ICMP报文时,检查IP TTL,如果小于socket option设置的一个阀值,就丢包
进程资源监控
威波写了一个插件,监控god启动进程占用的资源情况,大家可以用来监控服务进程的状态,并且继承god部署时使用tag,具体Metric如下:
1、process.cpu.all #进程和它的子进程使用的sys+user的cpu,单位是jiffies
2、process.cpu.sys #进程和它的子进程使用的sys cpu,单位是jiffies
3、process.cpu.user #进程和它的子进程使用的user cpu,单位是jiffies
4、process.swap #进程和它的子进程使用的swap,单位是page
5、process.fd #进程使用的文件描述符个数
6、process.mem #进程占用内存,单位byte
服务器 门神 管理口 状态监控
Metric 如下:
1、 xm.menshen # 服务器门神是否可用。值为整数类型,1 可用,其他不可用
2、xm.ipmi # 服务器管理接口是否可用。值为整数类型,1 可用,其他不可用
其他命令采集
ss -s
- ss.orphaned
- ss.closed
- ss.timewait
- ss.slabinfo.timewait
- ss.synrecv
- ss.estab
转载:http://git.n.xiaomi.com/falcon/doc/wikis/agent_metric_intro