シェルのシステムの監視とログ分析
CPU関連の情報は/ proc / STATで:監視システム
メモリは/ proc / meminfoに
トラフィック監視PROC /ネット/ devの
ディスクIOの/ proc / vmstatの
スクリプトコード
1#!/ binに/ bashの
2#Linuxホスト・システム監視情報
#インポートツールモジュール3
4ソースutilsの
5
#6のget CPU使用率
7関数CPUUSAGE()
8 {
物理CPUの数#9
10 phyCPUNums = `猫の/ proc / cpuinfoの|はgrep "物理ID" |並べ替え| uniqの|トイレ-l`
論理CPUの数は、11#
12 lgCPUNums = `猫の/ proc / cpuinfoを| grepを "プロセッサ" |トイレ-l`
13 #core
14個のコア= `猫の/ proc / cpuinfoを| grepを "コア" | uniqは|のawk '{$ 4印刷}'`
15 LOGINFO "ホスト[$ {IP}]物理CPU NUMSは$ {phyCPUNums}"
16 LOGINFO "ホスト[$ {IP}]の論理CPUのNUMSは$ {lgCPUNums}"
17 LOGINFO "ホスト[$ {IP}]コアNUMSは$ {コア}"
18 #CPU占有
CPU使用率の合計量を得るために19#
20 cpuTotalStart = 'AWKは/ PROC / stat` '{合計= 0} / CPU / BEGIN {(I = 2、I <= NF; I ++)のための合計+ = I} END {$合計を印刷}'
21 cpuUsedStart = 'AWK' BEGIN {使用= 0} / CPU / {使用= $ 2 + $ 3 + $ 4 + $ 7 + $ 8} END {使用する印刷} / PROC / stat`
CPU使用率の合計量が22の#の30秒再取得時間間隔との差分を算出します
23スリープ30
24 cpuTotalEnd = 'AWKは/ PROC / stat` '{合計= 0} / CPU / BEGIN {(I = 2、I <= NF; I ++)のための合計+ = I} END {$合計を印刷}'
25 cpuUsedEnd = 'AWK' BEGIN {使用= 0} / CPU / {使用= $ 2 + $ 3 + $ 4 + $ 7 + $ 8} END {使用する印刷} / PROC / stat`
`$ {cpuUsedStart} - 26 usedCPU = '$ {cpuUsedEndを} exprを
`$ {cpuTotalStart} - 27 totalCPU = '$ {cpuTotalEndを} exprを
28 LOGINFO "ホスト[$ {IP}] CPU使用率である:$(usagePercent $ {usedCPU} $ {totalCPU})%"
29
30}
31
メモリ使用量を取得するための32#
33関数MEMUSAGE(){
34 LOGINFOは、 "ホストのMEM使用率を取得するために開始します[$ {IP}]"
総メモリを得るために35#
36 totalMem = 'AWK '/ MemTotal / {$ 2印刷}' の/ proc / meminfo`
#37は空きメモリを取得します
38 FREEMEM = 'AWK '/ MEMFREE / {$ 2印刷}' の/ proc / meminfo`
39 usedMem = `exprを$ {totalMem} - $ {FREEMEM}`
#Echo $ 40($ {usagePercent usedMem}} $ {totalMem)
#Echo $ 41($ {totalMem kbToGb})
42 LOGINFO "ホスト[$ {IP}]総MEMは:$(kbToGb $ {totalMem})GB"
43#のメモリ使用量を計算し、ログに印刷されています
44 LOGINFO "ホスト[$ {IP}] MEMの使用である:$(usagePercent $ {usedMem} $ {totalMem})%"
45 LOGINFO "エンドは、ホストのMEM使用率を取得するには、[$ {IP}]"
46}
47
毎秒48#NIC平均トラフィック
49ネットワークデータ機能(){
50 LOGINFOは、 "ホストのネットデータを取得するために開始します[$ {IP}]"
51 ethName = $ 1
52 receiveByteStart = `猫の/ proc /ネット/ devの|はgrep -E "$ {ethName}" | awkの '{$ 2印刷}'`
53 sendByteStart = `猫の/ proc /ネット/ devの|はgrep -E "$ {ethName}" | awkの '{$ 10印刷}'`
54スリープ10
55 receiveByteSEnd = `猫の/ proc /ネット/ devの|はgrep -E "$ {ethName}" | awkの '{$ 2印刷}'`
56 sendBytesEnd = `猫の/ proc /ネット/ devの|はgrep -E "$ {ethName}" | awkの '{$ 10印刷}'`
57 inDataRate = $(エコー "スケール= 2;($ {receiveByteSEnd} - $ {receiveByteStart})/ 10" | BC)
58 outDataRate = $(エコー "スケール= 2;($ {sendBytesEnd} - $ {sendByteStart})/ 10" | BC)
59 LOGINFO "ホスト[$ {IP}]データである:$ {inDataRate} KB / S"
60 LOGINFO "ホスト[$ {IP}]データ外である:$ {outDataRate} KB / S"
61 LOGINFO "エンドは、ホストのネットデータを取得するには、[$ {IP}]"
62}
63
ディスク使用量の#64
65関数はdiskUsage(){
66 LOGINFO "ホストのディスク使用量を取得するために開始します[$ {IP}]"
67 noTimeLogInfo "` DF -h`"
68 LOGINFO "エンドは、ホストのディスク使用量を取得するには、[$ {IP}]"
69}
70
71 #disk IO
72関数diskIOIn(){
ディスクIOの方向に#73
74 inIoStart = 'AWK '/ pgpgin / {$ 2印刷}' の/ proc / vmstat`
75スリープ30
76 inIoEnd = 'AWK '/ pgpgin / {$ 2印刷}' の/ proc / vmstat`
$ 77犯し=(((inIoEnd-inIoStart)/(* 1024 30)))
78 LOGINFO "IOにおけるホスト[$ {IPは}]である:$ {inIo} MB / s" の
79
80}
81
82 #disk IOアウト
83関数diskIOout(){
IOの方向のうち、ディスクを取るために#84
85 outIoStart = 'AWK '/ pgpgout / {$ 2印刷}' の/ proc / vmstat`
86スリープ60
87 outIoEnd = 'AWK '/ pgpgout / {$ 2印刷}' の/ proc / vmstat`
88 outIo = $(((outIoEnd-outIoStart)/(60 * 1024)))
89 LOGINFO "IOアウトホスト[$ {IP}]は次のとおりです。$ {} outIo MB /秒"
90}
91
#92ユーザーがオンラインです
93関数onlineUser(){
94ユーザー= `ワット| awkのNR> 1 '| awkの{$ 1を印刷 "\トン" "\トン" $ 4}'`
95 USERCOUNT = `ワット| awkのNR> 1 '|トイレ-l`
96#loginAt = 'W | AWK 'NR> 1' | awkは' {$ 4印刷} `
97 LOGINFO "[$ {USERCOUNT}]のユーザーがオンラインがあります。"
98 noTimeLogInfo "ユーザー名loginAt"
99 noTimeLogInfo "$ {ユーザ}"
100}
101
102#ホストのネットワーク接続の分析
103機能のisAlive(){
猫のhostLists` `におけるIPの104
105 DO
106ピング$ {IP} -c 3>を/ dev / null
107 [$場合は?-eq 0];その後
108 LOGINFO "$ {IP}が到達可能です"
109#「sのオンライン
110オンラインユーザー
CPU関連の情報111の#を取得
112 CPUUSAGE
Memの113#関連情報を入手
114 MEMUSAGE
ディスクIOを得るために115#
116 diskIOIn
117 diskIOout
#118ディスク使用量
119はdiskUsage
#120は、第2又は平均出力流れを受け取り
121 Netdata wlp3s0
他の122
123 LOGINFO "ERRORの$ {IP}が到達不能である、詳細情報を参照でログインしてみてください.."
124 BE
125は行われ
126}
127
128 [1]一方
129 DO
130のisAlive
131睡眠60
132完了
印刷ログ機能
1#!/ binに/ bashの
#2のログを印刷
3 curr_path = `pwd`は
4機能LOGINFO()
5 {
6ローカルcurr_time = '日付 "+%Y-%M-%D%H:%M:%のS" `
7 LOG_FILE = $ {curr_path} /system_status.log
8#裁判官は、ログファイルが存在するかどうか
9 [-e $ {LOG_FILE}]もし
その後、10
11位ファイルが書き込み可能であるかどうかを検出します
12 [-w $ {LOG_FILE}]もし
その後、13
#14ファイルへの書き込みアクセスが許可を与えるためにはchmodコマンドを使用していない場合
15のchmod 770 $ {} LOG_FILE
16 BE
他の17
18#存在しないログファイルは、作成した場合
19タッチ$ {} LOG_FILE
20 BE
ログを書き込むための21#
22ローカル情報= $ 1
23エコー "$ {curr_time}` whoami` [情報] $ {インフォ}" >> $ {} LOG_FILE
24}
25関数noTimeLogInfo(){
26 msg=$1
27 echo "${msg}">>${log_file}
28 }
29
30 #把kb转换成gb,精度为3。expr只支持整数计算
31 function kbToGb(){
32 kbVal=$1
33 gbVal=$(echo "scale=3;${kbVal}/1024/1024"| bc)
34 echo $gbVal
35 }
36 #使用率以百分比的形式
37 #第一个参数为已使用量,第二个参数为总量
38 function usagePercent(){
39 used=$1
40 total=$2
41 usedPercent=$(echo "scale=2;${used}*100/${total}"| bc)
42 echo ${usedPercent}
43 }