シェルのシステムの監視とログ分析

シェルのシステムの監視とログ分析

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 }
 

おすすめ

転載: www.cnblogs.com/mkmkmk/p/12173171.html
おすすめ