|
|
楼主 |
发表于 2023-9-16 22:36:19
|
显示全部楼层
2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。
' \# B* i6 l: t- c6 X2、查看服务器cpu的总核数: @: l( |# Z& A# ]& M0 W) Q+ A! }$ B
复制代码代码如下:
8 M, E- `7 ~' |, J; x; C& P* a# Z$ J' s3 W. T# n
# grep -c 'model name' /proc/cpuinfo 或者 cat /proc/cpuinfo
$ p- v9 W9 u. @$ m7 j( g; L8 `' D; M2 }
3、截取服务器1分钟、5分钟、15分钟的负载情况
. ]2 a9 _. T1 K2 m* s9 I复制代码代码如下:
" {# Y' V0 h% B' E/ U9 A' h1 b
3 z/ }5 _6 O- X+ L# uptime | awk '{print $8,$9,$10,$11,$12}'+ n3 k2 |3 j" t2 O0 d5 r1 v' h2 @
load average: 0.01, 0.02, 0.004 E1 T. @6 ^0 U
4、查看截取15分钟的平均负载
; C# F& t: @. a$ f* L
$ }3 y0 Z6 }# f4 B复制代码代码如下:
2 {& T S0 y+ y) D5 y) }0 {2 N; Q" D
# uptime | awk '{print $12}' (用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空了。而用$NF表输出最后一段的内容)
' \7 z$ K" h9 ?5 R8 L9 s; m- N# uptime | awk '{print $NF}'
; | ?! n. P0 u, _% J2 ]
. y8 G8 ~) e& c q) A5、编写系统负载监控的脚本文件:
5 P. s5 `, X+ T& b复制代码代码如下:2 n& P6 v, o+ J' S2 b# L
8 x9 k- W' P$ H' y# vim /scripts/load-check.sh
# C3 F4 {5 F, X! g$ [* \- R, x[code]2 P% }+ f# F* }" ^* [$ O7 t: W6 C
#!/bin/bash 3 l4 V3 B4 M0 U& k" n9 X
#使用uptime命令监控linux系统负载变化 5 `3 ?$ { ~9 \& j' @( N
" m* Y* a( | O# D% o+ V5 X' h, Q/ l
#取系统当前时间(以追加的方式写入文件>>) : u" E( j1 r" T/ d6 ]
date >> /scripts/datetime-load.txt
" F5 U i' e6 {! J
( H, `, u$ @7 }$ p#提取服务器1分钟、5分钟、15分钟的负载情况
6 R+ e1 n0 L7 Guptime | awk '{print $8,$9,$10,$11,$12}' >> /scripts/load.txt 0 E, S, L; K1 K- I' y
* [% |' o6 q9 b/ U5 p* L#逐行连接上面的时间和负载相关行数据(每次重新写入文件>) 8 h* ^. u5 y% g" I3 p
paste /scripts/datetime-load.txt /scripts/load.txt > /scripts/load_day.txt7 n X$ G" G2 z$ Z0 a# V
# chmod a+x /scripts/load-check.sh9 ?8 r6 j3 ~! V9 q6 B$ K
6、编写系统负载结果文件邮件发送脚本:% R) U1 m4 p4 v, B
复制代码代码如下:
7 Q- ~% t9 D5 ]' Q& e5 r
( z9 {* l2 v2 }8 x8 l& C1 U# vim /scripts/sendmail-load.sh
3 [" d$ s* {: r2 }, Z#!/bin/bash & _ O, B% R3 L' u
#把系统负载监控生成的load_day.txt文件通过邮件发送给用户
: i) `7 Q. V# }; V# s ; M2 B4 t4 T" p& \. q& C5 M" l
#提取本服务器的IP地址信息
# v* N! z. {6 R5 q2 D0 a" E2 S) {( jIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` 2 m* P5 r; W; p5 v
4 G" W$ ~4 |* S8 d) k U2 Y#提取当前日期
5 g0 i& F1 L, ^* Dtoday=`date -d "0 day" +%Y年%m月%d日`
; P" I% y$ y9 [: y% V) R! j
: m! L6 Z& q2 K0 Z( n; h# W2 D#发送系统负载监控结果邮件 1 s8 n6 O, z, C9 d
echo "这是$IP服务器$today的系统负载监控报告,请下载附件。" | mutt -s "$IP服务器$today的系统负载监控报告" -a /scripts/load_day.txt fuquanjun@xxx.com
4 `5 i1 o' v0 P" j# chmod a+x /scripts/sendmail-load.sh
2 l8 o8 \# C; n; p; _4 R( ]7、编写系统负载监控的脚本文件:
: q/ l- o4 n! q X9 C% m复制代码代码如下:4 k0 p3 I# j' w$ @1 s' ]% D$ E
& y" d9 a; v! E* C) c1 z- @5 C4 S# vim /scripts/load-warning.sh* B" L p/ G) D5 f$ ^0 O8 Y
#!/bin/bash
/ b- Z6 f# ~9 t3 w. y#使用uptime命令监控linux系统负载变化 8 k# `7 c/ d( U% m; b. p* F
5 G6 D, {4 P# x6 X/ y' @( a
#提取本服务器的IP地址信息 J$ h9 `) ]7 f9 U& b! y, e6 ^% P2 M
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` : f6 a& L! m" z! Z' P' M, `
, k& L+ Q! }1 g
#抓取cpu的总核数
: s/ P( m0 V) h4 v8 k! l6 Wcpu_num=`grep -c 'model name' /proc/cpuinfo`
k; W& C% F' z0 i/ M) d+ K5 V
) j, p( r# |4 S0 t#抓取当前系统15分钟的平均负载值
6 a. j5 k6 C0 I2 cload_15=`uptime | awk '{print $NF}'` 6 H9 u$ K7 p$ w/ S
J; t. B& I0 ~6 J$ }% q$ U Z5 c#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
2 Z( x0 D% U, waverage_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
5 U& O' p8 o9 k: j6 `4 e8 |8 i3 E/ E
& k' u/ x+ |; P+ r5 z#取上面平均负载值的个位整数
9 w% Y* K5 t+ r' L9 F. i: A `average_int=`echo $average_load | cut -f 1 -d "."`
( N2 W. M- }8 p ^) y* D! P, b% e1 B7 S
#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
" P8 }- i! E/ _9 \$ A6 yload_warn=0.70
^; `- ]" n# l. u6 A% b
+ ]% y4 D9 e; c' m#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
) U7 p7 z# u; \5 P' nif (($average_int > 0)); then
& G* z; h# |! d# f" k! l o9 j echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" fuquanjun@xxx.com + s' A, }' M7 H- K
else ( R$ j: N( Y) C; Y2 R
#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
: J$ L9 t9 G2 ?0 {6 Z+ Cload_now=`expr $average_load \> $load_warn` : k0 Y8 s$ M% B+ X
! q2 O( V" K$ U8 R3 m% Z O#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
$ u8 z! B! H+ q y- T/ G* t if (($load_now == 1)); then
3 t& @6 q/ b5 l2 T& } Y" z m echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" fuquanjun@xxx.com , V) [2 v m) j1 o
fi " f7 a& d1 A4 X. x3 b( x% J$ t" H
fi9 D% j* a5 G5 v& H% t6 c
# chmod a+x /scripts/load-warning.sh
% E* H2 P" B1 R) U5 `" K三、监控服务器系统cpu占用情况:
1 c5 W- s- f4 L0 G; @3 \+ T* J" k( z9 t9 i0 b5 B
1、使用top命令查看linux系统cpu使用情况:
8 l/ \/ M, Z; z0 S1 H, H" n复制代码代码如下:- n8 k2 A. z R& O* Z7 H$ {
/ _: L, H8 }9 Z z( N+ \- v) h" q# top -b -n 1 | grep Cpu (-b -n 1 表只需要1次的输出结果)
' g- u4 q0 l" b4 r! t8 D 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%st1 u2 P% d9 M' j$ x, D1 N" p% [
8 \. C( G0 s3 `/ L/ z1 @2、查看截取空闲cpu的百分比数值命令(只取整数部分):
9 d# R0 H2 T4 F& i. x复制代码代码如下:, |& T I" C1 {* T7 b* R4 x
) h1 _. ^! Q( y' A; S9 Y
# top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."/ l, }4 M7 \5 x: F
4 r5 n: n3 H# P- B# |1 J
3、编写cpu监控的脚本文件:
$ v+ z; x% a6 ]$ G复制代码代码如下:
8 X/ s: d3 q7 e2 ] ^; ^' k$ w. r, z. @" \
# vim /scripts/cpu-check.sh) o! t* Q$ N+ k+ m
#!/bin/bash 6 W$ m" z- [8 d% }8 W5 n% Y
#使用top命令监控linux系统cpu变化
% x1 @4 u8 u1 N4 W3 i! O% I1 @$ o
7 E- t4 q) N* \) Z" J0 g& r#取系统当前时间(以追加的方式写入文件>>) * \3 L: C2 b# p5 w3 U2 M8 H
date >> /scripts/datetime-cpu.txt
, C8 ?' Y8 _: ~/ k8 d
" P/ ^3 T+ a# `7 l+ E+ T+ B* V& H#抓取当前cpu的值(以追加的方式写入文件>>) 7 T* t T- ]! x8 s: Y# U# |
top -b -n 1 | grep Cpu >> /scripts/cpu-now.txt
/ J2 Y+ a, Y- A, \ ( u: o" h4 O! m2 o' t& W
#逐行连接上面的时间和cpu相关行数据(每次重新写入文件>) . }6 |2 I( {0 I
paste /scripts/datetime-cpu.txt /scripts/cpu-now.txt > /scripts/cpu.txt
a0 _9 W- }* @+ ^8 Y* S% j4 j2 `# chmod a+x /scripts/cpu-check.sh# X4 i. v/ \. W. e
4、查看CPU监控的结果文件:% U2 x6 ~. H) R6 Q
复制代码代码如下:
# U0 i; j- S9 v# F' d+ g$ ]) s2 E' O
# cat /scripts/cpu.txt
) f3 Z, p/ r4 v J; w- f
: ]! w( E+ @* G) [5、编写cpu结果文件邮件发送脚本:
+ H$ j7 S; [+ D3 }& ?# O复制代码代码如下:
0 |2 w( ? {# Y- m: G5 D! l1 S; n4 y% F. _& _1 x! Y# i& i2 C
# vim /scripts/sendmail-cpu.sh" K( Y+ m0 E% B# E/ P5 ^) G
#!/bin/bash % [, g8 c/ x* d3 `: [4 g
#把生成的cpu.txt文件通过邮件发送给用户 5 `" x0 {3 ~' q
( \ C+ A1 z( L, N! x8 [, h" I1 ^#提取本服务器的IP地址信息 " R' {1 ^' J& T0 P7 F$ A. R2 E" p! f, R
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` ( @ }( ~' H% a& q
& B6 J# j5 @) J- C9 Y; n$ V- X
#提取当前日期
/ p/ e3 ^: i {: Wtoday=`date -d "0 day" +%Y年%m月%d日`
0 M* K1 T0 {3 @
0 ^# b. c) Q' q% m }#发送cpu监控结果邮件
+ g: o( h' T3 h! @# lecho "这是$IP服务器$today的cpu监控报告,请下载附件。" | mutt -s "$IP服务器$today的CPU监控报告" -a /scripts/cpu.txt fuquanjun@xxx.com1 `% i5 s+ }! W) p) J; U
# chmod a+x /scripts/sendmail-cpu.sh
7 [" o/ z! k( a" W) [$ R & A( X) M1 ?- A
四、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
/ m7 U! I8 r8 L7 o8 C2 g5 J( w# k- `7 f9 l) w3 l6 Z
复制代码代码如下:' h i% T2 y- [$ l; e4 e
! S' D9 [" _" S# i5 C' c8 a# vim /scripts/cpu-warning.sh
4 k# Q" d2 a! n& V! V( t7 k+ k( Q# h#!/bin/bash ( B6 [; z6 m2 w9 k! _- | S
#监控系统cpu的情况脚本程序 0 i. G$ Y/ |, \2 I
. x) p& o- p: o& \( k- G/ I
#提取本服务器的IP地址信息 " H7 V4 h) X" f$ |& W$ U- B
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` 7 \. F6 p' n- Y6 l. Z
! l7 Q: S1 v/ t9 ]#取当前空闲cpu百份比值(只取整数部分) $ s& M2 O2 u; ^6 y3 h7 E: k e. ]1 b
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."` 7 F) h1 ^7 ^5 x' `/ p
, ?, \( {5 F3 W#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
. S5 r: o' j% Bif (($cpu_idle < 20)); then
8 B# h3 ^$ F8 z) R echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" fuquanjun@xxx.com # W w {) L4 I0 A6 h
fi
2 w& N- J+ [6 x# chmod a+x /scripts/cpu-warning.sh |
|