下面列出的采集项都是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=mount,fstype=fstype,mount是挂载点,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,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 rcv_buf)而加入到prequeue失败,重新由backlog处理,计数器加1
  • TCPTSReorder Recovery状态时,接收到到部分确认(snd_una
  • 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

文章来源于互联网,如有雷同请联系站长删除:【Falcon】Falcon-Agent基础数据采集

发表评论