經常使用命令 tsar --nginx --live -i 1 查詢1秒的狀態每秒採樣一次 系統模塊 cpu 字段含義ios
採集方式nginx
CPU的佔用率計算,都是根據/proc/stat計數器文件而來,stat文件的內容基本格式是:git
cpu 67793686 1353560 66172807 4167536491 2705057 0 195975 609768 cpu0 10529517 944309 11652564 835725059 2150687 0 74605 196726 cpu1 14380773 127146 13908869 832565666 150815 0 31780 108418github
cpu是總的信息,cpu0,cpu1等是各個具體cpu的信息,共有8個值,單位是ticks,分別是算法
User time, 67793686 Nice time, 1353560 System time, 66172807 Idle time, 4167536491 Waiting time, 2705057 Hard Irq time, 0 SoftIRQ time, 195975 Steal time, 609768apache
CPU總時間=user+system+nice+idle+iowait+irq+softirq+Stl
各個狀態的佔用=狀態的cpu時間%CPU總時間*100%
比較特殊的是CPU總使用率的計算(util),目前的算法是:
util = 1 - idle - iowait - stealswift
mem 字段含義cookie
採集方法app
內存的計數器在/proc/meminfo,裏面有一些關鍵項dom
MemTotal: 7680000 kB MemFree: 815652 kB Buffers: 1004824 kB Cached: 4922556 kB
含義就不解釋了,主要介紹一下內存使用率的計算算法:
util = (total - free - buff - cache) / total * 100%
load 字段含義
採集方法
/proc/loadavg文件中保存的有負載相關的數據
0.00 0.01 0.00 1/271 23741
分別是1分鐘負載,五分鐘負載,十五分鐘負載,運行進程/總進程 最大的pid
只須要採集前五個數據既可獲得全部信息
注意:只有當系統負載除cpu核數>1的時候,系統負載較高
traffic 字段含義
採集方法
流量的計數器信息來自:/proc/net/dev
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed lo:1291647853895 811582000 0 0 0 0 0 0 1291647853895 811582000 0 0 0 0 0 0 eth0:853633725380 1122575617 0 0 0 0 0 0 1254282827126 808083790 0 0 0 0 0 0
字段的含義第一行已經標示出來,每一行表明一個網卡,tsar主要採集的是出口和入口的bytes/packets
注意tsar只對以eth和em開頭的網卡數據進行了採集,像lo這種網卡直接就忽略掉了,流量的單位是byte
tcp 字段含義
採集方法
tcp的相關計數器文件是:/proc/net/snmp
Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts Tcp: 1 200 120000 -1 31702170 14416937 935062 772446 16 1846056224 1426620266 448823 0 5387732
咱們主要關注其中的ActiveOpens/PassiveOpens/AttemptFails/EstabResets/CurrEstab/InSegs/OutSegs/RetransSegs
主要關注一下重傳率的計算方式:
retran = (RetransSegs-last RetransSegs) / (OutSegs-last OutSegs) * 100%
udp 字段含義
採集方法
UDP的數據來源文件和TCP同樣,也是在/proc/net/snmp
Udp: InDatagrams NoPorts InErrors OutDatagrams Udp: 31609577 10708119 0 159885874 io 字段含義
採集方法
IO的計數器文件是:/proc/diskstats,好比:
202 0 xvda 12645385 1235409 416827071 59607552 193111576 258112651 3679534806 657719704 0 37341324 717325100 202 1 xvda1 421 2203 3081 9888 155 63 421 1404 0 2608 11292
每一行字段的含義是:
經過這些計數器能夠算出來上面的每一個字段的值
double n_ios = rd_ios + wr_ios; double n_ticks = rd_ticks + wr_ticks; double n_kbytes = (rd_sectors + wr_sectors) / 2; st_array[0] = rd_merges / (inter * 1.0); st_array[1] = wr_merges / (inter * 1.0); st_array[2] = rd_ios / (inter * 1.0); st_array[3] = wr_ios / (inter * 1.0); st_array[4] = rd_sectors / (inter * 2.0); st_array[5] = wr_sectors / (inter * 2.0); st_array[6] = n_ios ? n_kbytes / n_ios : 0.0; st_array[7] = aveq / (inter * 1000); st_array[8] = n_ios ? n_ticks / n_ios : 0.0; st_array[9] = n_ios ? ticks / n_ios : 0.0; st_array[10] = ticks / (inter * 10.0);
注意:
扇區通常都是512字節,所以有的地方除以2了 ws是指真正落到io設備上的寫次數, wrqpms是指系統調用合併的寫次數, 它們之間的大小關係沒有可比性,由於不知道多少請求可以被合併,好比發起了100個read系統調用,每一個讀4K,假如這100個都是連續的讀,因爲硬盤一般容許最大的request爲256KB,那麼block層會把這100個讀請求合併成2個request,一個256KB,另外一個144KB,rrqpm/s爲100,由於100個request都發生了合併,無論它最後合併成幾個;r/s爲2,由於最後的request數爲2
paritition 字段含義
採集方法
首先經過/etc/mtab獲取到分區信息,而後經過statfs訪問該分區的信息,查詢文件系統相關信息,包含:
struct statfs { long f_type; long f_bsiz e; long f_blocks; long f_bfree; long f_bavail; long f_files; long f_ffree; fsid_t f_fsid; long f_namelen; };
而後就能夠計算出tsar須要的信息,分區的字節數=塊數*塊大小=f_blocks * f_bsize
pcsw 字段含義
採集方法
計數器在/proc/stat:
ctxt 19873315174 processes 296444211
分別表明進程切換次數,以及進程數
tcpx 字段含義
recvq sendq est twait fwait1 fwait2 lisq lising lisove cnest ndrop edrop rdrop pdrop kdrop
分別表明
tcprecvq tcpsendq tcpest tcptimewait tcpfinwait1 tcpfinwait2 tcplistenq tcplistenincq tcplistenover tcpnconnest tcpnconndrop tcpembdrop tcprexmitdrop tcppersistdrop tcpkadrop
採集方法
計數器來自:/proc/net/netstat /proc/net/snmp 裏面用到的數據有:
TcpExt: SyncookiesSent SyncookiesRecv SyncookiesFailed EmbryonicRsts PruneCalled RcvPruned OfoPruned OutOfWindowIcmps LockDroppedIcmps ArpFilter TW TWRecycled TWKilled PAWSPassive PAWSActive PAWSEstab DelayedACKs DelayedACKLocked DelayedACKLost ListenOverflows ListenDrops TCPPrequeued TCPDirectCopyFromBacklog TCPDirectCopyFromPrequeue TCPPrequeueDropped TCPHPHits TCPHPHitsToUser TCPPureAcks TCPHPAcks TCPRenoRecovery TCPSackRecovery TCPSACKReneging TCPFACKReorder TCPSACKReorder TCPRenoReorder TCPTSReorder TCPFullUndo TCPPartialUndo TCPDSACKUndo TCPLossUndo TCPLoss TCPLostRetransmit TCPRenoFailures TCPSackFailures TCPLossFailures TCPFastRetrans TCPForwardRetrans TCPSlowStartRetrans TCPTimeouts TCPRenoRecoveryFail TCPSackRecoveryFail TCPSchedulerFailed TCPRcvCollapsed TCPDSACKOldSent TCPDSACKOfoSent TCPDSACKRecv TCPDSACKOfoRecv TCPAbortOnSyn TCPAbortOnData TCPAbortOnClose TCPAbortOnMemory TCPAbortOnTimeout TCPAbortOnLinger TCPAbortFailed TCPMemoryPressures TcpExt: 0 0 0 80 539 0 0 0 0 0 3733709 51268 0 0 0 80 5583301 5966 104803 146887 146887 6500405 39465075 2562794034 0 689613557 2730596 540646233 234702206 0 44187 2066 94 240 0 114 293 1781 7221 60514 185158 2 2 3403 400 107505 5860 24813 174014 0 2966 7 168787 106151 40 32851 2 0 2180 9862 0 15999 0 0 0
具體字段找到而且獲取便可
percpu ncpu 字段含義
字段含義等同cpu模塊,只不過可以支持採集具體的每個cpu的信息
採集方法
等同於cpu模塊
pernic 字段含義
字段含義等同traffic模塊,只不過可以支持採集具體的每個網卡的信息
採集方法
等同於traffic模塊
應用模塊 proc 字段含義
採集方法
計數器文件
/proc/pid/stat:獲取進程的cpu信息
/proc/pid/status:獲取進程的mem信息
/proc/pid/io:獲取進程的讀寫IO信息
注意,須要將採集的進程名稱配置在/etc/tsar/tsar.conf總的mod_proc on procname,這樣就會找到procname的pid,並進行數據採集
nginx 字段含義
採集方法
經過nginx的採集模塊配置,訪問特定地址,具體參見:https://github.com/taobao/tsar-mod_nginx
location = /nginx_status { stub_status on; }
請求到的數據是:
Active connections: 1 server accepts handled requests request_time 24 24 7 0 Reading: 0 Writing: 1 Waiting: 0
須要確保nginx配置該location,而且可以訪問curl http://localhost/nginx_status獲得上面的數據
若是nginx的端口不是80,則須要在配置文件中指定端口,配置文件是/etc/tsar/tsar.conf,修改mod_nginx on爲mod_nginx on 8080
相似的有nginx_code, nginx_domain模塊,相應的配置是:
req_status_zone server "$host" 20M; req_status server; location /traffic_status { req_status_show; }
經過訪問curl http://localhost/traffic_status可以獲得以下字段的數據
localhost,0,0,2,2,2,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0
請求到的數據每一個字段的含義是:
若是domain數量太多,或者端口不是80,須要進行專門的配置,配置文件內容以下:
port=8080 #指定nginx的端口
top=10 #指定最多采集的域名個數,按照請求總個數排列
domain=a.com b.com #指定特定須要採集的域名列表,分隔符爲空格,逗號,或者製表符
在/etc/tsar/tsar.conf中指定配置文件的路徑:mod_nginx_domain on /tmp/my.conf
squid 字段含義
採集方法
訪問squid的mgrinfo信息獲取,有些字段通過了一些patch,可能不適用外部版本
haproxy 字段含義
採集方法
haproxy通過了patch,可以在多進程模式下進行統計信息的彙總,而後經過haproxy的本地訪問其狀態頁面admin分析獲得
lvs 字段含義
採集方法
訪問lvs的統計文件:/proc/net/ip_vs_stats
apache
參見:https://github.com/kongjian/tsar-apache
tcprt
私有應用,略
swift
私有應用,略
cgcpu/cgmem/cgblkio
私有應用,略
trafficserver
待補充
tmd
私有應用,略