下面列出的采集項(xiàng)都是falcon-agent直接支持的,每隔一段時間(目前是60s)采集匯報(bào)一次
CPU相關(guān)采集項(xiàng)
計(jì)算方法:每秒采集一次/proc/stat萌京,計(jì)算差值。都是GAUGE類型的囚衔。
- cpu.idle 是個百分比的數(shù)字题篷,比如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核數(shù)
- cpu.switches cpu上下文切換次數(shù),COUNTER類型
磁盤相關(guān)采集項(xiàng)
計(jì)算方法:先讀取/proc/mounts拿到所有掛載點(diǎn)屡穗,然后通過syscall.Statfs_t拿到blocks和inode的使用情況贴捡,都是GAUGE類型的。
每個metric都會有個tag:mount=fstype村砂,fstype是文件系統(tǒng),比如ext4
- df.bytes.free 是個integer础废,表示free的block數(shù)目
- df.bytes.free.percent 是個float汛骂,表示free的block數(shù)目占總的block數(shù)目的百分比,比如32.1
- df.bytes.total 是個integer评腺,表示block總數(shù)
- df.bytes.used 不解釋
- df.bytes.used.percent 不解釋
- df.inodes.total 是個integer帘瞭,表示inode總數(shù)
- df.inodes.free 是個integer,表示free的inode數(shù)目
- df.inodes.free.percent 是個float歇僧,表示free的inode占比
- df.inodes.used 不解釋
- df.inodes.used.percent 不解釋
LSI RAID
使用 megacli 工具讀取 RAID 相關(guān)信息图张,10分鐘采集一次,tag 表明所屬 PD 或者 VD:
PD=Enclosure_ID:SLOT_ID诈悍,如 PD=32:0 表明第一塊磁盤
VD=0 表明第一個邏輯磁盤
- sys.disk.lsiraid.pd.Media_Error_Count 這個及以下三個指標(biāo)目前僅作為數(shù)據(jù)收集祸轮,不一定意味磁盤損壞(概率變大)
- 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,則此物理磁盤出現(xiàn)問題
- sys.disk.lsiraid.vd.cache_policy 如果值不為0侥钳,表示此邏輯磁盤緩存策略和設(shè)置不符
- sys.disk.lsiraid.vd.state 如果值不為0适袜,表示此邏輯磁盤出現(xiàn)問題
SMART
使用 smartctl 工具讀取磁盤 SMART 信息,10分鐘采集一次舷夺,目前所有指標(biāo)僅作為數(shù)據(jù)收集苦酱,不一定意味磁盤損壞(概率變大),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
分區(qū)讀寫監(jiān)控
測試所有已掛載分區(qū)是否可讀寫疫萤,1分鐘采集一次,tag 表明掛載點(diǎn)敢伸,mount=/home
- sys.disk.rw 如果值不為0扯饶,表明此分區(qū)讀寫出現(xiàn)問題
IO相關(guān)采集項(xiàng)
計(jì)算方法:每秒采集一次/proc/diskstats,計(jì)算差值,都是COUNTER類型的尾序。
每個metric都會有個tag: device=$device钓丰,表示設(shè)備,比如sda1每币、sdb
下面各個采集項(xiàng)都是Integer携丁,意思用中文表達(dá)不好說,直接給英文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的數(shù)字
- disk.io.write_bytes 單位是byte的數(shù)字
- disk.io.avgrq_sz 下面幾個值就是iostat -x 1看到的值
- disk.io.avgqu-sz
- disk.io.await
- disk.io.svctm
- disk.io.util 是個百分?jǐn)?shù)兰怠,比如56.43梦鉴,表示56.43%
機(jī)器負(fù)載相關(guān)采集項(xiàng)
計(jì)算方法:讀取/proc/loadavg,都是GAUGE類型的痕慢。沒啥好解釋的尚揣,metric名稱如下:
- load.1min
- load.5min
- load.15min
網(wǎng)絡(luò)相關(guān)采集項(xiàng)
計(jì)算方法:讀取/proc/net/dev,每秒采集一次掖举,計(jì)算差值快骗,都是Integer類型,都是COUNTER類型的塔次。
每個metric都對應(yīng)一個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
端口采集項(xiàng)
計(jì)算方法:ss -ln,獲取里邊正在處于listen狀態(tài)的端口继榆。GAUGE類型巾表,值要么是1:代表在監(jiān)聽,要么是0略吨,代表沒有在監(jiān)聽
每個metric有tag:port=port就是端口
更新說明 最新版本不會把所有端口都上報(bào),用戶在portal上配置監(jiān)控策略翠忠,對某些端口做監(jiān)控鞠苟,配置了哪些端口就匯報(bào)哪些端口
- net.port.listen
機(jī)器內(nèi)核配置
都是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采集項(xiàng)
使用 ntpq -pn 獲取本機(jī)時間相對于 ntp 服務(wù)器的 offset,10分鐘采集一次
- sys.ntp.offset 本機(jī)偏移時間秽之,單位為ms当娱,值過大或者為0則表明有異常,需要報(bào)警
進(jìn)程監(jiān)控
- proc.num 進(jìn)程數(shù)目考榨,可以通過tag指定具體指哪個進(jìn)程跨细,比如name=sshd,如果是Java的應(yīng)用進(jìn)程名可能都是java河质,沒法做區(qū)分冀惭,此時可以配置cmdline申鱼,比如cmdline=./falcon_agent-c./cfg.ini
其他采集項(xiàng)
- agent.alive 只有一個值,就是1云头,可以配合nodata(600)來做機(jī)器是否宕機(jī)的輔助判斷依據(jù)
/proc/net/netstat中的部分采集項(xiàng),TcpExt.拼接上下面各個字段就是metric淫半,比如TcpExt.PruneCalled
- PruneCalled 慢速路徑中溃槐,如果不能將數(shù)據(jù)直接復(fù)制到user space,需要加入到sk_receive_queue前科吭,會檢- 查receiver side memory是否允許昏滴,如果rcv_buf不足就可能prune ofo queue。此時計(jì)數(shù)器加1
- LockDroppedIcmps tcp_v4_err(): 接收到ICMP錯誤報(bào)文对人,但tcp socket被user鎖住
- ArpFilter 在三手握手時的SYN_RECV狀態(tài)中接收到RST或者SYN的次數(shù)
- TW inet_twdr_do_twkill_work(): TIME_WAIT超時的socket數(shù)量(timeout >= 4s)
- DelayedACKLocked ACK定時器因?yàn)閡ser已經(jīng)鎖住而無法發(fā)送ACK的次數(shù)
- ListenOverflows 三路握手最后一步完全之后谣殊,Accept queue隊(duì)列超過上限時加1
- ListenDrops 任何原因,包括Accept queue超限牺弄,創(chuàng)建新連接姻几,繼承端口失敗等,加1
- TCPPrequeueDropped 如果因?yàn)閮?nèi)存不足(ucopy.memory < sk->rcv_buf)而加入到prequeue失敗势告,重新由backlog處理蛇捌,計(jì)數(shù)器加1
- TCPTSReorder Recovery狀態(tài)時,接收到到部分確認(rèn)(snd_una < high_seq)時但已經(jīng)undo完成(undo_retrans == 0)的次數(shù)咱台。 數(shù)量上與TCPPartialUndo相等络拌。
- TCPDSACKUndo Disorder狀態(tài)下,undo完成(undo_retrans == 0)的次數(shù)
- TCPLoss 丟包
- TCPLostRetransmit 根據(jù)SACK數(shù)據(jù)推測出的重段包丟失計(jì)數(shù)器:在tcp_sacktag_write_queue()->tcp_mark_lost_retrans()回溺, 如果發(fā)現(xiàn)tcp_highest_sack_seq(tp)超過某skb在重傳時的snd_nxt(TCB->ack_seq)春贸,就認(rèn)為這個重傳包 已經(jīng)丟失了,加1(加的不是段數(shù))遗遵。tcp_highest_sack_seq(tp)是被SACK過的具有最高SEQ號的skb的seq
- TCPLossFailures tcp_retransmit_timer(): icsk_retransmit==0(第一次進(jìn)入重傳狀態(tài))并且處于Loss狀態(tài)下萍恕,計(jì)數(shù)器加1
- TCPFastRetrans (非RTO timer)快速重傳次數(shù),即tcp_fastretrans_alert()/tcp_simple_retransmit()->tcp_xmit_retransmit_queue()中瓮恭,如果不是LOSS狀態(tài)雄坪,就加1
- TCPTimeouts 在RTO timer中,從CWR/Open狀態(tài)下第一次超時的次數(shù)屯蹦,其余狀態(tài)不計(jì)入這個計(jì)數(shù)器;SYN-ACK的超時次數(shù)
- TCPSchedulerFailed tcp_delack_timer(): 在delay ACK處理功能內(nèi)维哈,如果prequeue中仍有數(shù)據(jù),計(jì)數(shù)器就加1;加入到prequeue登澜,本來是期待著userspace(使用tcp_recvmsg()之類的系統(tǒng)調(diào)用)盡快處理之阔挠。其中仍有數(shù)據(jù),可能隱含著userspace行為不佳脑蠕。
- TCPAbortOnMemory 在執(zhí)行tcp_close()/probe timer/keepalive timer時购撼,orphan sockets數(shù)量和tcp_memory_allocated是否超過最大值的次數(shù)
- TCPAbortOnTimeout RTO/probe/keepalive timer到達(dá)最大重試次數(shù)或者最長重試時間的次數(shù)
- TCPAbortFailed tcp_send_active_reset(): alloc_skb()或者tcp_transmit_skb()失敗跪削。
- TCPMemoryPressures tcp_enter_memory_pressure()在從“非壓力狀態(tài)”切換到“有壓力狀態(tài)”時計(jì)數(shù)器加1
- TCPSpuriousRTOs tcp_process_frto(),如果frto_counter !=0 && frto_counter != 1加1
- TCPBacklogDrop 如果socket被user鎖住迂求,后退一步內(nèi)核會把包加到sk_backlog_queue碾盐,但如果因?yàn)閟k_rcv_buf不足的原因入隊(duì)失敗,計(jì)數(shù)器加1
- TCPMinTTLDrop 在接收到TCP報(bào)文或者TCP相關(guān)的ICMP報(bào)文時揩局,檢查IP TTL毫玖,如果小于socket option設(shè)置的一個閥值,就丟包
進(jìn)程資源監(jiān)控
威波寫了一個插件凌盯,監(jiān)控god啟動進(jìn)程占用的資源情況付枫,大家可以用來監(jiān)控服務(wù)進(jìn)程的狀態(tài),并且繼承g(shù)od部署時使用tag驰怎,具體Metric如下:
1阐滩、process.cpu.all #進(jìn)程和它的子進(jìn)程使用的sys+user的cpu,單位是jiffies
2县忌、process.cpu.sys #進(jìn)程和它的子進(jìn)程使用的sys cpu掂榔,單位是jiffies
3、process.cpu.user #進(jìn)程和它的子進(jìn)程使用的user cpu芹枷,單位是jiffies
4衅疙、process.swap #進(jìn)程和它的子進(jìn)程使用的swap,單位是page
5鸳慈、process.fd #進(jìn)程使用的文件描述符個數(shù)
6饱溢、process.mem #進(jìn)程占用內(nèi)存,單位byte
服務(wù)器 門神 管理口 狀態(tài)監(jiān)控
Metric 如下:
1走芋、 xm.menshen # 服務(wù)器門神是否可用绩郎。值為整數(shù)類型,1 可用翁逞,其他不可用
2肋杖、xm.ipmi # 服務(wù)器管理接口是否可用。值為整數(shù)類型挖函,1 可用状植,其他不可用
其他命令采集
ss -s
- ss.orphaned
- ss.closed
- ss.timewait
- ss.slabinfo.timewait
- ss.synrecv
- ss.estab
轉(zhuǎn)載:http://git.n.xiaomi.com/falcon/doc/wikis/agent_metric_intro