|
|
楼主 |
发表于 2023-9-16 22:36:19
|
显示全部楼层
2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。' K6 y9 G4 G; L9 u! R
2、查看服务器cpu的总核数, m) M& G7 F$ d9 m2 c# \# A- n
复制代码代码如下:
+ m' Z7 S" b2 {6 Z: `2 x' ~7 p0 s5 F, W3 s& q2 T
# grep -c 'model name' /proc/cpuinfo 或者 cat /proc/cpuinfo
8 X) B, X& H F5 L( s8 Q: N$ g* P" K# {" j( I
3、截取服务器1分钟、5分钟、15分钟的负载情况: }/ s+ [' t0 L) B
复制代码代码如下:
# S3 t. [4 v' O/ c2 ?
3 i+ _, g; f4 D' R# uptime | awk '{print $8,$9,$10,$11,$12}'/ S- s+ l/ U& g8 l( r
load average: 0.01, 0.02, 0.00" }0 _$ ?2 h! @1 m
4、查看截取15分钟的平均负载
6 q* o/ U$ k" [( D" G$ I4 }6 X# [2 |' O h
复制代码代码如下:2 X( i1 g3 \& A# U7 l9 v
4 x7 x2 Y# j8 L( ]/ [( B
# uptime | awk '{print $12}' (用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空了。而用$NF表输出最后一段的内容): R* U+ n4 {# k
# uptime | awk '{print $NF}'7 J! k; `3 R. S' d7 w2 r- A
1 W5 R$ ?0 D# s( }
5、编写系统负载监控的脚本文件:
; r4 v- Z% @! \( m' f5 L复制代码代码如下:
; C0 v) H& q* ]* S7 l: t$ J4 h1 x% d! f. [
# vim /scripts/load-check.sh% ^+ h$ E& U: x6 \/ n
[code]- e& ^8 T- Z, m1 a" L& f
#!/bin/bash / }; K6 @ w* g" p, L4 p% ?. ]
#使用uptime命令监控linux系统负载变化
1 z9 w+ m5 G. H5 {' d- W - Z$ Y* Y( u) K" E3 F4 j
#取系统当前时间(以追加的方式写入文件>>)
% c+ ^; Z# f4 A7 o5 P2 M5 L* [% Ddate >> /scripts/datetime-load.txt
/ R* E" A& B% K z) e6 v - M0 B6 C: M, F" y& u' {; Y
#提取服务器1分钟、5分钟、15分钟的负载情况
4 T3 e0 Z2 x' ~& `uptime | awk '{print $8,$9,$10,$11,$12}' >> /scripts/load.txt
1 a0 s7 S! z# d + i; D9 y6 h( W3 d( T' w+ J
#逐行连接上面的时间和负载相关行数据(每次重新写入文件>) 7 ^+ t# z& q, o! W5 ~9 }$ \
paste /scripts/datetime-load.txt /scripts/load.txt > /scripts/load_day.txt
0 _* Y- C9 G3 H4 Y! Y# chmod a+x /scripts/load-check.sh4 }9 o! a( ]& \2 ?: J' R+ Q2 c" N
6、编写系统负载结果文件邮件发送脚本:
5 }* s( Q0 h' K' t6 [复制代码代码如下:
, Z, I" X# W! o3 p3 F3 H% x6 C! k/ ^: X8 f5 d6 T
# vim /scripts/sendmail-load.sh7 ?0 J$ i) U3 L! j
#!/bin/bash & E- z: ?# N# f! L
#把系统负载监控生成的load_day.txt文件通过邮件发送给用户
1 ~) H! x. x* x2 P , x) ^) }5 p" P9 ~- Y8 k6 [
#提取本服务器的IP地址信息
a j( r# x7 v' b& v' @, FIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
8 k5 P8 X4 u) U& `
: X; ?' g7 [8 j- [- x7 u- u#提取当前日期 8 C: D' s& t- W. Q
today=`date -d "0 day" +%Y年%m月%d日`
, X- Q1 R+ S. Y5 e3 ?! ~/ j: E
, k7 z e: [! L4 d0 x#发送系统负载监控结果邮件 5 O2 m& w! `/ m
echo "这是$IP服务器$today的系统负载监控报告,请下载附件。" | mutt -s "$IP服务器$today的系统负载监控报告" -a /scripts/load_day.txt fuquanjun@xxx.com1 L; P4 F9 R; S6 l: m& W4 e* X& a* Q
# chmod a+x /scripts/sendmail-load.sh% @( c+ O- q' j8 C3 ^# ]9 K9 F
7、编写系统负载监控的脚本文件:
0 k$ w8 R, S& G复制代码代码如下:9 I3 M/ z4 w7 C* H( S0 b
' B' ^" @+ l" l# {( f# vim /scripts/load-warning.sh
/ u1 g) b9 d/ \$ R- O/ a#!/bin/bash
; t; ^1 y, t. |, @$ e#使用uptime命令监控linux系统负载变化 3 g4 r( N2 T- N0 T5 @
+ B7 [9 d7 c* B7 N" A#提取本服务器的IP地址信息
8 i3 s, s. ]; `IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
( {/ o- u: a9 w; o: M: j% [. K
# u* O2 D$ i1 S J4 C, `#抓取cpu的总核数
6 t: e, X+ g* K. ^3 e `1 ccpu_num=`grep -c 'model name' /proc/cpuinfo`
' V) H: B6 H9 w
( {( J i9 _9 @4 F4 g#抓取当前系统15分钟的平均负载值
& z% g# ]' F0 nload_15=`uptime | awk '{print $NF}'` % q3 _( ]8 b R8 W6 N
0 r8 a: j! l2 u* B8 t! m2 t9 T
#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
, j, M, L" Q2 u5 P& ~& ]: @average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
" a+ {( H0 J3 c4 ~) A. A$ }
& ^' ^" M& m. G3 T1 s! \1 c* H#取上面平均负载值的个位整数 4 u* S- T. `. Q0 v
average_int=`echo $average_load | cut -f 1 -d "."`
4 D# g: P' p! C5 E$ c4 I
7 T, d% o6 R, \. f9 }#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
1 q4 {& t. B% u7 \! L) \load_warn=0.70 3 g# @; z2 Y4 G
9 P6 `( g" K# B( j$ x
#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
- q5 F: l% S, Yif (($average_int > 0)); then ( J* ^/ S/ r! \+ a! X
echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" fuquanjun@xxx.com
3 ]; G+ h. k% q4 r, ]else
, U6 P2 M% U+ P: t#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 ) 7 j$ e% \0 a' N! i5 g$ C
load_now=`expr $average_load \> $load_warn`
2 A* J0 p& L' g& _4 h! Z5 o% d& W
/ G" l: M0 Q n#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员 1 l1 W- y& T; w- M& ^* P# f% b
if (($load_now == 1)); then 5 @; d. [1 w$ N, h( E3 y3 J7 O
echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" fuquanjun@xxx.com n9 T4 `% \6 o3 U4 p6 n
fi & O6 ?% m9 M4 |
fi4 m' \ N$ k6 Q5 L% Z/ _; p! u6 l9 H
# chmod a+x /scripts/load-warning.sh
/ ^2 u* n0 J6 X6 N9 d( D7 G三、监控服务器系统cpu占用情况:
) Q) Z& L: u8 i* f# v0 `4 F0 E- J3 N+ d
0 m, e( J, s. r7 p4 Q# ^7 `4 d4 z1、使用top命令查看linux系统cpu使用情况:0 @) G5 `, y/ y i( t9 `) | J
复制代码代码如下:
- L! F9 k% p" }& G( D+ Y0 Y! X5 N+ y4 ]4 `- A
# top -b -n 1 | grep Cpu (-b -n 1 表只需要1次的输出结果)! N6 \# s; n# U# W$ K
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
4 J+ Q2 d2 V+ D1 G
! `$ F: O4 }3 p' o& f2、查看截取空闲cpu的百分比数值命令(只取整数部分):
5 ^: K- z# r/ |0 @1 `复制代码代码如下:
! I; x0 a8 K( f. Y9 r z6 Y$ d L
# top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."
4 q, Q$ u8 v. P& D
1 ~2 T# @6 I3 F% Z* K3、编写cpu监控的脚本文件:# t2 L H: e( f) U Y9 y
复制代码代码如下:
) B4 |3 W9 S, K2 W" N3 v w, I1 d* d1 m ]5 ?) T3 }
# vim /scripts/cpu-check.sh8 \$ l7 E* `3 W
#!/bin/bash
4 J4 z9 M" b3 d6 F! H$ R#使用top命令监控linux系统cpu变化 # b+ y/ r# g# f. ^. y5 X
5 g2 x5 d1 |' ?% t
#取系统当前时间(以追加的方式写入文件>>) . @$ C; {: T/ t
date >> /scripts/datetime-cpu.txt
h, i1 W5 `4 H9 ?# o
) E3 R9 d: H( p- D/ }#抓取当前cpu的值(以追加的方式写入文件>>)
' P; D( G1 a# o: ?( J# Etop -b -n 1 | grep Cpu >> /scripts/cpu-now.txt
6 G ~( d: v& O" ]
, U2 A8 J0 z: ?6 i' a#逐行连接上面的时间和cpu相关行数据(每次重新写入文件>) / z! r! O# e% S$ w4 B
paste /scripts/datetime-cpu.txt /scripts/cpu-now.txt > /scripts/cpu.txt2 k# o) r! _0 d2 c9 {/ x
# chmod a+x /scripts/cpu-check.sh7 G9 U; F8 ~; _' I6 I1 R# o4 R
4、查看CPU监控的结果文件:
) d) k; q$ p7 S: C复制代码代码如下:
5 `5 Y8 C) J8 z; K; i
+ ^/ D; N6 Y9 F6 V/ R; G# cat /scripts/cpu.txt5 ~ t0 a* ^. Y& s
u- T/ O: h" R1 K% ~* e5、编写cpu结果文件邮件发送脚本:
0 [) h% [( K( J/ u( ^5 p复制代码代码如下:
8 @$ j0 b* [& O7 K; ~# R4 `7 \; t) C: c, _( r7 M( d: [- P1 ?
# vim /scripts/sendmail-cpu.sh& S# e/ x" t& l7 q4 U
#!/bin/bash 7 I( u0 i# Z& L, g: T% H5 y7 D
#把生成的cpu.txt文件通过邮件发送给用户 , Z$ N$ A' L" B: v
8 {! @( U R3 g1 o
#提取本服务器的IP地址信息
; f% Z2 B& v' i+ u& t* a3 `IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` + r+ o5 e2 g' u+ G, a6 x3 A
% E- f9 Q4 c# B#提取当前日期0 q" A [' g/ ?1 u
today=`date -d "0 day" +%Y年%m月%d日`
. ^( N# x$ @" Q. C; y2 ^4 i1 \
' j. h( S* b1 b: V" t#发送cpu监控结果邮件 ! ^/ b5 {1 S% x* o4 o/ B
echo "这是$IP服务器$today的cpu监控报告,请下载附件。" | mutt -s "$IP服务器$today的CPU监控报告" -a /scripts/cpu.txt fuquanjun@xxx.com
+ n- t+ n0 i% i% N7 \' L" H # chmod a+x /scripts/sendmail-cpu.sh; |/ D$ \5 V6 a u, i7 D2 |: \
/ R5 Q, e+ U7 y& y6 z3 {: x. u2 i
四、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
& z4 C; p6 Y( D: i7 }% V) @6 Z; N3 c% k: \! S7 M" g
复制代码代码如下:
; ?3 u' R2 J g- m/ z1 Z2 h( {! B( m% L! @1 O
# vim /scripts/cpu-warning.sh2 L* W3 b: t; t. X4 C9 F
#!/bin/bash . o: P- _( x$ ]( g" r, n/ M
#监控系统cpu的情况脚本程序 l I3 `8 j& ]0 \! O, [7 P% L
1 O f& a0 B- I# [3 M/ M2 q) z7 z#提取本服务器的IP地址信息
# O' s8 l4 p$ SIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
3 ~4 T/ V( @0 p1 e/ P- |
5 o# O( k% [; F+ U- U* h#取当前空闲cpu百份比值(只取整数部分)
7 n+ b, w4 m8 v5 Z, l+ fcpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
8 n+ P+ c! k6 E - b$ ?* n. V+ Q/ V$ m* v
#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
9 A. P: L$ s- @$ bif (($cpu_idle < 20)); then
2 [* x% S" z& o2 [7 i echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" fuquanjun@xxx.com
/ x5 s, X) x$ {% Ufi6 j% D9 H# e# E" o1 m- ^
# chmod a+x /scripts/cpu-warning.sh |
|