|
|
楼主 |
发表于 2023-9-16 22:36:19
|
显示全部楼层
2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。
4 \9 Q2 K- K, {9 _! C4 F2、查看服务器cpu的总核数7 l- Q' ]/ R9 e/ M# U5 D' D
复制代码代码如下:8 w* [1 s/ c# t$ v( i: T
' T4 j" D( D* o+ s' T7 M+ t # grep -c 'model name' /proc/cpuinfo 或者 cat /proc/cpuinfo
0 e: H, f! t o& M/ T5 f, I6 A( I$ O5 y2 @
3、截取服务器1分钟、5分钟、15分钟的负载情况: x6 n- l& ^) ?0 D( k
复制代码代码如下:) S# b. {/ n4 d6 d9 x; M) \' a7 j( f
+ L- k- h! A: ~+ h
# uptime | awk '{print $8,$9,$10,$11,$12}'7 ~ R I; w: S% a; t
load average: 0.01, 0.02, 0.00
, W! |* {0 a" b$ g0 q4、查看截取15分钟的平均负载# A6 e" j0 X* G. C( f' y6 S% J
6 b3 w& }( t2 r0 {: `2 r7 m
复制代码代码如下:
, D$ q% Q5 U( P# ?0 w
% _# z8 d. r6 E, _4 R. e# uptime | awk '{print $12}' (用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空了。而用$NF表输出最后一段的内容)& }' A' }6 V: e& @ I
# uptime | awk '{print $NF}'
7 p2 T% X6 |; p6 c q: n# x
3 q% y2 Y% O1 @* U( Y5、编写系统负载监控的脚本文件:
+ N0 m( K% \* e0 ]5 F3 p) w复制代码代码如下:5 s8 u" w( F( m5 I; x
7 m4 S3 F8 O9 x% u( N& I# vim /scripts/load-check.sh6 B: I% I9 P5 S, t1 k2 j$ O' u. [
[code]/ g; V$ Q# Q- o7 C# K0 N O
#!/bin/bash / V. ]! K9 B0 p8 u- C% e" D
#使用uptime命令监控linux系统负载变化 + V1 b* u3 R2 X; `! f6 }
. k! U+ l9 ~8 Y! R
#取系统当前时间(以追加的方式写入文件>>)
! A6 d; d% J/ W3 P: w9 w6 Xdate >> /scripts/datetime-load.txt
- E- b3 V8 |* H7 @ O
9 q! }6 z( j. w$ H( l H#提取服务器1分钟、5分钟、15分钟的负载情况 ; O9 W6 E8 j5 _5 `$ t3 Q
uptime | awk '{print $8,$9,$10,$11,$12}' >> /scripts/load.txt
# E9 D! J; J& Y5 l0 Y* r% V . r! k6 u$ B4 W. C9 X! j
#逐行连接上面的时间和负载相关行数据(每次重新写入文件>) : }' X9 o& F0 d5 Y
paste /scripts/datetime-load.txt /scripts/load.txt > /scripts/load_day.txt
. g9 ~# e2 c1 _! k+ W) T! h# chmod a+x /scripts/load-check.sh
f+ u% b5 U8 a: i' S% q6、编写系统负载结果文件邮件发送脚本:) e1 `6 G# q' m9 r8 j: o3 `# o# t
复制代码代码如下:) t+ P: D0 R; ~! o
5 K. G% R1 O- Q6 d7 v& T$ G# vim /scripts/sendmail-load.sh
/ F5 D+ }5 B1 y; B#!/bin/bash
! C6 Y1 m5 \# A1 l#把系统负载监控生成的load_day.txt文件通过邮件发送给用户
# Y6 [( p1 ?8 _+ E: Y$ ^' i
% o6 q" i0 l [- }% j. J- w+ ^#提取本服务器的IP地址信息
! n) m- k) H* a4 d! B, Y8 b* x" hIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
' V$ B8 K; [6 ], ^- q" H; [# L0 g+ A
" I/ l& m; M# q& ^4 s#提取当前日期 5 E3 O a8 k4 D3 n3 q* n+ r2 E
today=`date -d "0 day" +%Y年%m月%d日` * a$ t' _ b) p Q
( B7 i( ?2 ^! `: Z5 s
#发送系统负载监控结果邮件 8 v# I$ N; w. x: x0 P' R! q) H
echo "这是$IP服务器$today的系统负载监控报告,请下载附件。" | mutt -s "$IP服务器$today的系统负载监控报告" -a /scripts/load_day.txt fuquanjun@xxx.com
6 Y" `+ J6 V, H- E1 K; m. h B$ x# chmod a+x /scripts/sendmail-load.sh
# z. V" f! L6 \2 b3 }7、编写系统负载监控的脚本文件:
8 Y c9 R% O( k6 S2 ?, G复制代码代码如下:
5 d+ l0 {( t* q" M: k1 f
: q o. k/ _6 ~( R# vim /scripts/load-warning.sh
9 R8 H0 P3 g6 K# ^+ Q#!/bin/bash 3 e; Y: H/ l7 w# y- V8 t
#使用uptime命令监控linux系统负载变化
. j, [2 i6 ?* e# R! d a+ f6 v; ]
9 h7 R6 L& k7 k( t6 j#提取本服务器的IP地址信息
; o; x9 {. O7 l1 o9 M3 iIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
/ P9 v7 w" H i
' o5 u- K* h/ b: t6 k6 ^/ q$ D#抓取cpu的总核数
+ P" k# I- }' R$ ~4 q& L: |: a {! Ycpu_num=`grep -c 'model name' /proc/cpuinfo` ' {3 W6 ^5 s7 i" {
" R7 H4 x1 y2 g
#抓取当前系统15分钟的平均负载值 0 S* u. d ~/ n' m
load_15=`uptime | awk '{print $NF}'`
6 d" r D0 B; P 7 I+ K3 t9 j+ Q) v
#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
+ ^: Q2 T* r) Q) faverage_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc` " `1 {, O: B, H. v
( Z4 l+ ~! |" A" z m. |5 }. A#取上面平均负载值的个位整数 * _2 v0 j0 f. B4 T. E, t$ t! j) z3 g
average_int=`echo $average_load | cut -f 1 -d "."` & k3 n. o5 H' I% Z9 B
$ S: H5 I9 K# Q( X#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。 " ]. g& d1 s _5 c8 g
load_warn=0.70 ) ~, ]# }8 `3 n8 Q# B2 ^
, b3 K ~* p, v+ \
#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较 9 a; L& R5 U; m6 f3 D; H
if (($average_int > 0)); then ' @: X+ d1 E" v/ d x" e
echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" fuquanjun@xxx.com
. F6 e6 x# S. z7 s$ melse 7 ~; M" {* P0 c/ ]; O
#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
0 f, G: Q5 K/ ^) |: ^! y6 u, {load_now=`expr $average_load \> $load_warn`
% t I) P' J# ` * Z3 w) T3 [& x7 M
#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
0 R Y0 Y# ]- Q/ o if (($load_now == 1)); then ' I% j5 d6 U+ {, T$ s" {) b/ {
echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" fuquanjun@xxx.com + V8 }! d3 U6 {6 Y3 A8 L9 R
fi 0 i, s* e0 u# B$ G' t: t, o" M
fi
2 H- i; s1 c) q0 R g # chmod a+x /scripts/load-warning.sh& _; d* C- K* ]8 J5 K9 [/ c
三、监控服务器系统cpu占用情况:
8 f" I1 a! x4 M- S" y$ E) i$ L( n5 Q2 W0 N) d) S9 I. m" R
1、使用top命令查看linux系统cpu使用情况:0 `5 K L! q5 @
复制代码代码如下:# m# M0 `, J7 c
1 Z6 G$ T9 c# j ?$ i- L* Y3 [# top -b -n 1 | grep Cpu (-b -n 1 表只需要1次的输出结果)
3 R+ ` |( }6 \ Cpu(s): 0.0%us, 0.0%sy, 0.0%ni, 99.9%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st' A' T( k' O; t' e! `/ X
! ]2 s% e' L& ^* g- A7 z0 D1 T2、查看截取空闲cpu的百分比数值命令(只取整数部分):/ p+ f! T% l$ J5 O
复制代码代码如下:$ n4 n) S _+ Y6 \1 D2 V' s k0 W4 m
; R8 [6 |6 x ^5 {
# top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."
1 P* \2 Q; N0 t6 J/ n& U( v- ^, J8 F0 q) G& f. {5 e: O. V
3、编写cpu监控的脚本文件:2 b4 }1 s0 ^$ T+ H8 l: V/ x, E
复制代码代码如下:
6 d, J7 M i* I J! O/ P* V! B' i2 q- v
# vim /scripts/cpu-check.sh
8 b! n) e/ a8 G+ K#!/bin/bash : J6 W- }8 `. Y: G) A8 j* e/ G4 j
#使用top命令监控linux系统cpu变化
; }9 C& e$ c0 v5 G
l* [+ R8 O; N, x+ b#取系统当前时间(以追加的方式写入文件>>) / j: p" [" G5 c' R
date >> /scripts/datetime-cpu.txt $ H3 P0 I1 f$ a
3 l! f. E) ]; w# Q
#抓取当前cpu的值(以追加的方式写入文件>>) , M6 R5 d) G) T! V
top -b -n 1 | grep Cpu >> /scripts/cpu-now.txt
8 W4 K5 i+ t+ q1 n! o3 r8 q8 l/ b* p
; J2 v% v' C% ^4 k( I: y#逐行连接上面的时间和cpu相关行数据(每次重新写入文件>)
: g: R/ x1 V" S; [/ ~3 T0 ~! ^paste /scripts/datetime-cpu.txt /scripts/cpu-now.txt > /scripts/cpu.txt
O7 z+ }6 `; k- Z) [ y# chmod a+x /scripts/cpu-check.sh
; b) ~2 ]' k/ ]; L% V# O4、查看CPU监控的结果文件:
4 Y9 n' _! g; {9 M; _$ Z复制代码代码如下:3 } V- B- Y4 b; z& ]8 z
8 e: x' v8 \ X" I& p# cat /scripts/cpu.txt( |9 g, _. d- k
$ P" e+ D: a7 i% R0 P5、编写cpu结果文件邮件发送脚本:& {6 l- d9 [9 k6 Y, u
复制代码代码如下:
7 A' I. G' V0 ^# M- w$ _3 s+ S8 K2 n( d7 }9 t
# vim /scripts/sendmail-cpu.sh8 W) L+ }' |8 y$ x
#!/bin/bash 7 g& _$ S" r- J% s2 O; A1 i: `
#把生成的cpu.txt文件通过邮件发送给用户
2 m* ?% A+ n6 r* M" i: q
: I b8 \1 `6 H% A9 S3 [#提取本服务器的IP地址信息 $ m0 v* Q# y, R/ w! {& B, G' r
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` + O U3 _. H/ r( s5 ]
6 J8 [3 l3 T- W
#提取当前日期/ y, b( d0 R0 C/ M* @8 o: [
today=`date -d "0 day" +%Y年%m月%d日` , h4 @9 }; q l
2 n1 H) |4 u; c4 K
#发送cpu监控结果邮件
9 [; r/ `+ e0 @8 d1 N; M9 Vecho "这是$IP服务器$today的cpu监控报告,请下载附件。" | mutt -s "$IP服务器$today的CPU监控报告" -a /scripts/cpu.txt fuquanjun@xxx.com' B% |0 k u& t$ h
# chmod a+x /scripts/sendmail-cpu.sh
q2 h( ^% H) N5 s3 z* C J( c 9 K" s. ]" w1 q! o) U0 y9 ~4 t+ `, K
四、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
. Q2 [8 a) x v5 Q+ L7 R6 M3 |" b+ N+ k1 Q0 {. n1 l$ W
复制代码代码如下:
. w" S* c, u3 f9 [
5 _7 a' z; d2 e I$ K$ l; p' W, [! `# vim /scripts/cpu-warning.sh
, s% y. k6 V6 C0 ~/ v; d/ _& ?#!/bin/bash ) w* o! I$ x' h0 H
#监控系统cpu的情况脚本程序
* c: n2 U- T/ l+ X) e " @0 D% `2 ^. [0 O
#提取本服务器的IP地址信息
* W, ^- h: d7 `# p- N; i6 u& }( ~IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` : V) U; r9 P0 ?
4 V& y# h7 M6 o) j6 d. {
#取当前空闲cpu百份比值(只取整数部分)
3 t- S; W5 c0 i: r( I' \# B) Bcpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
: X2 y [/ z2 J' t, D3 _3 C 3 Z% M' N) X$ g# Z, _: k, @9 d
#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
' @0 v( Y v ~ ] Z8 Fif (($cpu_idle < 20)); then
1 Y, h% q M7 G$ ` echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" fuquanjun@xxx.com
8 n& k' Q6 E: b% o8 ~fi
9 F2 I$ x2 t8 w) `: h. B/ \8 f# chmod a+x /scripts/cpu-warning.sh |
|