- 积分
- 16843
在线时间 小时
最后登录1970-1-1
|

楼主 |
发表于 2023-9-16 22:36:19
|
显示全部楼层
2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。7 x( a9 D' ?+ R" E
2、查看服务器cpu的总核数
( ~) ~9 A2 a- l# `+ c复制代码代码如下:5 X/ `' |+ Z# c3 V8 a- Y
f; F; q1 T( i* `7 T5 U6 w
# grep -c 'model name' /proc/cpuinfo 或者 cat /proc/cpuinfo
7 m. v3 ]: }* |; y, \7 B! Z, D0 U7 O$ c8 d- k, E
3、截取服务器1分钟、5分钟、15分钟的负载情况
- R4 s- Y% W7 E1 n K$ L复制代码代码如下:
% h- m- x. R; C2 Z2 u" f8 @4 z! D" k ^2 w0 l+ ?8 k
# uptime | awk '{print $8,$9,$10,$11,$12}'
: O5 B: J. Q9 j N* M% a load average: 0.01, 0.02, 0.00
6 Y0 c+ I: G2 t7 C5 _! w0 v4、查看截取15分钟的平均负载
) I; q# O0 v8 C
- [1 ^+ ^4 B6 G1 ~复制代码代码如下:1 V3 S) f' L4 C/ _; |7 y3 ?
5 J1 h) {/ J; ^
# uptime | awk '{print $12}' (用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空了。而用$NF表输出最后一段的内容)
) `9 x$ w# A6 z! k# uptime | awk '{print $NF}'
5 i, S: l/ p7 G7 n) |/ o* z
6 V5 e$ Z9 @! q) j! k% b: l5、编写系统负载监控的脚本文件:
' i( D" M9 G I( n) p2 s0 O复制代码代码如下:
" W$ [2 s# r; f$ c8 i6 V
1 I% c6 P( S4 E# vim /scripts/load-check.sh+ Z" C( W3 D2 `4 |* W2 A
[code]4 C' Q4 ~; k4 a; d* \
#!/bin/bash 3 a# y* R& A: W- {: U8 D+ d+ p& d
#使用uptime命令监控linux系统负载变化
% c. f% [( T9 q5 j3 i& e. n ' ~% V, b+ B3 ^- ?1 Z6 v4 T& W
#取系统当前时间(以追加的方式写入文件>>)
7 F6 s- B% N5 j- }( w" T) Wdate >> /scripts/datetime-load.txt * B7 E) r7 t ^
1 Y1 \0 p4 |) h; c4 ^
#提取服务器1分钟、5分钟、15分钟的负载情况
& e: P) _0 y+ fuptime | awk '{print $8,$9,$10,$11,$12}' >> /scripts/load.txt + Z Y; {2 p8 c3 W; l, C
/ W- u) ]/ I6 `9 F9 K#逐行连接上面的时间和负载相关行数据(每次重新写入文件>) 7 ?5 n# n# w1 a- e+ d
paste /scripts/datetime-load.txt /scripts/load.txt > /scripts/load_day.txt
. n( X, L& ?4 e# chmod a+x /scripts/load-check.sh
4 h2 H4 C2 s! d* F8 t1 ]8 r6、编写系统负载结果文件邮件发送脚本:3 X4 E4 N# I% d
复制代码代码如下:0 }$ E; o V3 b7 A( q9 X/ ^
- Q9 X# q$ o" v+ F# vim /scripts/sendmail-load.sh
8 j% D, s6 O* U& E+ C& q4 y# j#!/bin/bash # j C8 e/ T1 z$ K0 A+ }
#把系统负载监控生成的load_day.txt文件通过邮件发送给用户
$ u% [$ S, ^ j( v8 c, i
* K. h1 |6 c6 w, m Q; e#提取本服务器的IP地址信息 % K! c7 u9 L+ p
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
; k3 f2 _9 U8 }/ b' n* S 0 Q7 o3 S2 w; k/ C' h7 X
#提取当前日期
0 \6 d+ i% |3 g9 A* R0 dtoday=`date -d "0 day" +%Y年%m月%d日`
9 B+ K' j O% k! ]2 l
$ @2 r( p" \) g9 J" Y6 p" F& z& Q#发送系统负载监控结果邮件
$ Y5 y5 U# j( Pecho "这是$IP服务器$today的系统负载监控报告,请下载附件。" | mutt -s "$IP服务器$today的系统负载监控报告" -a /scripts/load_day.txt fuquanjun@xxx.com$ @. p$ ~5 _% Y4 a2 H
# chmod a+x /scripts/sendmail-load.sh2 B6 k! u" c; C! E
7、编写系统负载监控的脚本文件:3 t4 s8 p- S; J- d3 J9 _/ n9 L. _
复制代码代码如下:; W+ m' [* d Q; b1 D8 d+ d- ^
7 P M- J( ~3 I/ ], I# vim /scripts/load-warning.sh. `) r5 e; x, k/ @" F1 Z) l
#!/bin/bash
4 z0 V- z5 {/ B9 c7 Q$ r8 ^+ `! f% U#使用uptime命令监控linux系统负载变化 5 {/ r& ]2 a' D& I
0 I# A. d* w+ B0 X5 t T4 ~#提取本服务器的IP地址信息 1 \3 i `6 ?5 i; f
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` ' ?* r9 O$ p( x# l% A: P V
$ w9 Q+ @5 a/ J- g9 {! e#抓取cpu的总核数 % T- B2 ^" o2 C5 a( t- p5 K7 O; m
cpu_num=`grep -c 'model name' /proc/cpuinfo` 0 E' W, q, }. T& r2 k- A* m% `
) ]( b2 b0 {. f/ F#抓取当前系统15分钟的平均负载值
, A4 y2 L5 u" u ]load_15=`uptime | awk '{print $NF}'`
' n2 N$ K5 g9 @2 g: i" Y
; ]0 A/ Q+ b- D7 h* |#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
9 S1 x( F0 ^2 X2 a" Y& x% M6 h+ _average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc` , W& q' E+ f+ G& S! {
8 ?# j& |: ]" i$ Y3 z( E* A#取上面平均负载值的个位整数 % V, C3 a3 M! F) y2 I+ T& y
average_int=`echo $average_load | cut -f 1 -d "."`
$ K# Q; b& d- C0 A* a% `4 l
: ?2 c5 g0 Y O* O8 B' y#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
& g! D# c3 {, ?: n9 i8 ?4 u4 K% fload_warn=0.70 " X% }4 n( P) o& P
% j+ }# B+ H* j/ v
#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
( h2 M: N3 d, Y) u; B9 [/ B- @if (($average_int > 0)); then
" q& V- e. K" B4 l8 o echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" fuquanjun@xxx.com
, X8 a- }; p3 D2 d0 ~else - J0 }& l: {% t/ O: |6 f
#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
5 Y! }* r; N6 a: tload_now=`expr $average_load \> $load_warn` , K. X$ \2 N9 q8 U
9 E; u$ p) G9 q: o# N
#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员 # e f0 p! y4 ` k- x
if (($load_now == 1)); then 5 R, ^; C1 A$ k" u( D' j
echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" fuquanjun@xxx.com 9 A: f; E/ L, N, s
fi
! c( v0 I/ j* s% H3 u- Rfi) ^% I* u3 p1 c+ P) q7 ?
# chmod a+x /scripts/load-warning.sh) g3 {' Y4 |6 _4 \% ]; l" ~' u9 @* R3 R
三、监控服务器系统cpu占用情况:
! N& ~1 N3 S1 u3 r& }8 }. _! q6 d) v% m3 T3 r% R. a2 P0 U3 d! b
1、使用top命令查看linux系统cpu使用情况:
' } ]9 ^8 U. H6 u8 V复制代码代码如下:
+ }! o. E$ |# C3 E/ j2 q- D( C4 C0 I( H7 b
# top -b -n 1 | grep Cpu (-b -n 1 表只需要1次的输出结果)0 t4 H" C- T( O3 J
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%st2 l) s* P8 T8 ]. I
( e6 p$ e* k/ ~& ^2 a, i2、查看截取空闲cpu的百分比数值命令(只取整数部分):% D, T. a k0 U
复制代码代码如下:
, h7 x7 }; E0 u6 V; Y* P# \( ^, ]& O6 l7 V. Y9 a
# top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."
5 T5 j! O! f6 }; `1 e% w; _: L) I0 G
4 V* r/ y2 \- f7 v4 i5 |9 i3、编写cpu监控的脚本文件:8 ]$ A5 [" @' T! `! Y
复制代码代码如下:
+ U* M; c: r- k+ [8 |! n
) T; z8 K* R" Q" e# vim /scripts/cpu-check.sh
- D! E _- C8 r" u& f8 A; ]) d D' c#!/bin/bash
9 ?, F4 v. B: }9 P' e/ Y. y#使用top命令监控linux系统cpu变化 # z9 q! z* \3 C, ~6 f& R$ `0 L0 m3 W
( q+ p) a1 m$ |#取系统当前时间(以追加的方式写入文件>>)
: |) z0 S+ }, H3 d8 I* |date >> /scripts/datetime-cpu.txt
# b. O. j q& k3 e ?* y
/ b* T% J. t3 d1 r#抓取当前cpu的值(以追加的方式写入文件>>)
7 L- C1 W# ]9 v+ L% }top -b -n 1 | grep Cpu >> /scripts/cpu-now.txt / p+ r+ l) R* c' H# o: r" y5 @
6 [2 V( j3 ? H. W- \4 { }3 B7 d
#逐行连接上面的时间和cpu相关行数据(每次重新写入文件>) ) \( j" Y- k9 `; U
paste /scripts/datetime-cpu.txt /scripts/cpu-now.txt > /scripts/cpu.txt
5 K8 P8 a) f& e" [2 C" P) G; N# chmod a+x /scripts/cpu-check.sh
8 D0 K- g9 _& H4、查看CPU监控的结果文件:1 d+ b) ]% d. R" u- r" V8 S: b
复制代码代码如下:( `$ G# F9 J& n" M6 r
& A, l- Y* G. J9 x8 e9 L# cat /scripts/cpu.txt- }1 n6 I9 A- W3 {" C( _$ L n
$ s& `3 n- R: d+ e
5、编写cpu结果文件邮件发送脚本:
/ U) w+ k( D- [) O0 l复制代码代码如下:
% B' P+ G# R$ H- P8 x5 X0 ?+ ^
( V) }/ Q' H. t* {# vim /scripts/sendmail-cpu.sh
) d# S! E4 S/ k4 t9 x3 m#!/bin/bash 9 Y! T, [- f7 d0 g/ f
#把生成的cpu.txt文件通过邮件发送给用户
4 F( J& E2 Y9 k3 z / i, A c/ n$ R6 C0 f8 F
#提取本服务器的IP地址信息
5 D0 w# C4 z+ N' c; _4 PIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
, a) q, {) e5 V! m* T! L 3 |+ } y# V6 o1 ]7 h! o( n
#提取当前日期
- V% u1 g& }6 ]6 F- n. Ntoday=`date -d "0 day" +%Y年%m月%d日` & B- f: g. i L! K1 T) }
9 j: H, T3 O; X' h: i! h6 y* h! `#发送cpu监控结果邮件
- b* d4 ~3 N' `; r1 ?echo "这是$IP服务器$today的cpu监控报告,请下载附件。" | mutt -s "$IP服务器$today的CPU监控报告" -a /scripts/cpu.txt fuquanjun@xxx.com
]0 d4 Y; Y! X # chmod a+x /scripts/sendmail-cpu.sh
3 X/ r2 A3 [5 s6 z* e( v9 p) b' N : M& a3 b; ^! O* n
四、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
( O, M! z( [1 \% B1 i1 d) t
/ ~3 J& Y' W [8 B( X复制代码代码如下:- z5 \+ v! d3 m& I* ]1 A
+ V. L y9 m A# vim /scripts/cpu-warning.sh7 T' I9 K0 l4 t' _2 P9 ^
#!/bin/bash
5 F& P b: i+ r$ d" S0 X#监控系统cpu的情况脚本程序 6 z* T. C J1 H, u2 K! }
" ?9 @9 g) {( M" R/ ]4 r4 r& o) [#提取本服务器的IP地址信息
" X3 l0 H$ F$ Y D0 jIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` # H. F4 X4 O! V
9 _8 }) e0 {- M8 {6 c. X#取当前空闲cpu百份比值(只取整数部分) # z) F0 j8 D) b+ Z. o* V
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."` " C1 D2 ~* T2 ?7 R2 R8 q* U2 l
7 q+ Y. l0 ?5 C2 @4 p" C
#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
! T# I; m7 K% Y# n* y- p E% U( ?5 \# `if (($cpu_idle < 20)); then
; o7 Z( I( ?1 n, T echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" fuquanjun@xxx.com & Z9 U( {9 K: A3 E$ T
fi: Q' z( l% T( j
# chmod a+x /scripts/cpu-warning.sh |
|