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

楼主 |
发表于 2023-9-16 22:36:19
|
显示全部楼层
2个CPU表明系统负荷可以达到2.0,此时每个CPU都达到100%的工作量。推广开来,n个CPU的电脑,可接受的系统负荷最大为n.0。2 k3 p* J" ^2 v" R
2、查看服务器cpu的总核数
# W2 g( B$ Y/ ]' T复制代码代码如下:
$ Y2 q/ X. F' P( x- H8 z/ B( B4 w' @9 s
# grep -c 'model name' /proc/cpuinfo 或者 cat /proc/cpuinfo
5 P) D1 x) |6 K" {' [; L, J: R p$ f: \$ y9 c% V' C
3、截取服务器1分钟、5分钟、15分钟的负载情况( |8 J$ T1 X2 E- x
复制代码代码如下:3 {% L4 |" d5 @4 V, L5 t. e6 y5 P
' v, l5 a% z" j# uptime | awk '{print $8,$9,$10,$11,$12}') C7 |' I5 B+ Z7 B
load average: 0.01, 0.02, 0.003 ^/ t/ V% Z% n+ m- \
4、查看截取15分钟的平均负载: s! v7 _. D K6 G: z* [
) ^9 V' V3 C$ a. g* C$ h
复制代码代码如下:
8 b3 [6 N, I8 {3 y- a. z( [9 d
* Z. g/ K2 |$ {# uptime | awk '{print $12}' (用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空了。而用$NF表输出最后一段的内容)
6 C! V3 t9 f! T6 m# c, l# uptime | awk '{print $NF}'
1 Q4 n9 {, h- R) @9 m# A$ I9 B/ ?* A6 b4 ^" B( R
5、编写系统负载监控的脚本文件:
2 ^2 t: j0 A; d; ~% f7 u复制代码代码如下:9 a2 E9 ]8 |! _2 A, C+ B
7 b# A3 x3 m8 D$ O1 }# vim /scripts/load-check.sh
l4 t$ ], a k$ c3 \# o[code]( M2 h: w- Y, D5 x; R& D! L
#!/bin/bash & p1 F' J, V% M- v" e7 B% ~
#使用uptime命令监控linux系统负载变化
" T( @ ]4 a" g6 ]# ]8 N
! @' D+ N/ B$ s, I#取系统当前时间(以追加的方式写入文件>>) 3 h' T) Q7 q% I7 x- ^3 G
date >> /scripts/datetime-load.txt
: @' c6 H" ], P% C 3 j2 S+ x, H% [# b5 n% _+ l* h0 R8 E
#提取服务器1分钟、5分钟、15分钟的负载情况
# F, ^, j1 T4 x# quptime | awk '{print $8,$9,$10,$11,$12}' >> /scripts/load.txt 8 a8 t2 J& L, \
7 Z" E j- w! P* }#逐行连接上面的时间和负载相关行数据(每次重新写入文件>) 8 ^+ f7 t/ S8 i! H9 t& m2 S1 j/ e1 l
paste /scripts/datetime-load.txt /scripts/load.txt > /scripts/load_day.txt, [& h4 t2 m6 J0 \! W6 x! `
# chmod a+x /scripts/load-check.sh) g" {4 v2 I' c" {7 R
6、编写系统负载结果文件邮件发送脚本:
# C; H) t9 j" I) R/ h复制代码代码如下:# U; B) Y. Y8 |4 I
7 h& }! J3 ^: W
# vim /scripts/sendmail-load.sh7 ~ n' Z0 A S+ K) c
#!/bin/bash
2 T/ D8 q1 u; r! Q% E+ x#把系统负载监控生成的load_day.txt文件通过邮件发送给用户 4 d$ l( f' P# D% A
8 S+ B X$ Q5 k! ]6 z7 ^( Y! L# l
#提取本服务器的IP地址信息
. C8 B x9 D% a5 l- nIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` , X+ @8 N8 V- {
( d) J& H0 I8 A& P
#提取当前日期 + z3 B6 N1 V( g
today=`date -d "0 day" +%Y年%m月%d日`
6 X4 {9 G' |3 y& T3 |$ T ; t" y; X7 u" `, m" S2 w
#发送系统负载监控结果邮件 0 }" P' S+ |! U* B3 ~
echo "这是$IP服务器$today的系统负载监控报告,请下载附件。" | mutt -s "$IP服务器$today的系统负载监控报告" -a /scripts/load_day.txt fuquanjun@xxx.com
; z5 ^4 y8 H; U5 }# l- f# chmod a+x /scripts/sendmail-load.sh
3 V: R1 `4 l2 n8 t1 b' K# v7 x7、编写系统负载监控的脚本文件:
- b" o4 e( O# O$ {/ ]9 c复制代码代码如下:" ~) n9 f, f, P
9 T) v- D+ m+ \5 U5 W# vim /scripts/load-warning.sh
/ O+ {$ ?( k: _) l8 R#!/bin/bash
& R/ W6 o& i( v! A1 @; }' M3 d#使用uptime命令监控linux系统负载变化
: I; Q! }5 ?7 Y5 D
9 i; B+ H ^1 D8 Q#提取本服务器的IP地址信息
" K% L. _* d- X6 X" G$ f k' B( rIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` - u- {/ l7 _1 F2 {" ~3 Y
3 L7 x; @ |0 j3 b6 S
#抓取cpu的总核数
5 k) a9 x/ ^6 Tcpu_num=`grep -c 'model name' /proc/cpuinfo`
8 G% V: V2 F |8 D" [% L
3 h) ]7 ?2 c4 i9 I- z#抓取当前系统15分钟的平均负载值 8 j- `& ]* S. K, T, i
load_15=`uptime | awk '{print $NF}'`
: u$ j5 L: X2 |- J
3 g7 [; J/ W$ G$ n#计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
; V/ @* D9 q8 k" o: z/ Q1 v" `; iaverage_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
. m# J/ Z6 f% {( r
) k! X" u6 n. L, h* z& X#取上面平均负载值的个位整数 ( ~: B( P _4 z, T- Z2 T
average_int=`echo $average_load | cut -f 1 -d "."`
2 p; g9 [# U/ y( g& D! V- ^3 H
4 ^9 N) }4 ?; o; F#设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
- J4 r$ _: L8 Eload_warn=0.70 9 D) E/ z( f9 a6 E
+ S. Q; V8 X2 |; R% A$ }4 F$ f#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较 # | ?' v$ }8 U' s: r
if (($average_int > 0)); then
' _' b1 `; S* @) Q! F- m( B) k echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" fuquanjun@xxx.com
6 G) ?2 u8 `6 selse
\, G- g/ ^) \7 q#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
0 D$ U4 a* J% C) L: T0 ?4 n- @load_now=`expr $average_load \> $load_warn`
1 p5 b% l# F- j% [" C; A! I
& m4 z i0 E# E" H8 C7 A, ~' ]#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员 / z4 W' N) ?2 f8 a; E( k* @
if (($load_now == 1)); then 8 f9 _/ v; S0 P. u$ i" h
echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" fuquanjun@xxx.com
3 S& R, J5 [# Q/ X7 O fi
. {" F% o4 a2 Tfi
3 j: {3 F D6 i# v # chmod a+x /scripts/load-warning.sh
9 C1 O8 j3 _( w7 H, n* ^, Z三、监控服务器系统cpu占用情况:
1 q2 C$ f6 U# z6 s; M$ @0 T: k! p, g0 ~0 q
1、使用top命令查看linux系统cpu使用情况:
, O3 D6 w0 X$ ~$ `复制代码代码如下:
+ |; {2 |+ v0 x% j8 [8 t
5 Q# O; j x, p7 E3 ~# top -b -n 1 | grep Cpu (-b -n 1 表只需要1次的输出结果)
' m; a0 c& {1 d3 Z& D2 s 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%st9 b' E6 v$ t7 C4 ~7 D1 {
/ Z. L2 s9 C3 ]# r: D
2、查看截取空闲cpu的百分比数值命令(只取整数部分):8 s1 A# M$ _: w1 W% R+ b1 q
复制代码代码如下:
$ z2 D j7 n6 O% }! P" P9 q+ Q2 ^. e
# top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."
" U( ~/ I% p/ d$ Q9 J. R1 k7 I* P6 F9 M
3、编写cpu监控的脚本文件:; B! a! B+ C7 D* s
复制代码代码如下:3 w5 @$ i7 S; u5 G. j
8 H* [7 h1 R0 E6 D' E
# vim /scripts/cpu-check.sh
+ Z8 x! d/ g0 q( Q) g. A#!/bin/bash
1 b; z( o8 h) h, a#使用top命令监控linux系统cpu变化
3 a8 ^" {1 f8 p5 Y
7 }# X% A( B; U2 j) ?#取系统当前时间(以追加的方式写入文件>>)
- E- r" j; ?. G% ndate >> /scripts/datetime-cpu.txt
4 s/ {6 y9 H* G# [3 l, k w$ A $ B# F" z% ]; x/ g& \& }: U
#抓取当前cpu的值(以追加的方式写入文件>>) / \# P+ e( b7 s/ ?5 y
top -b -n 1 | grep Cpu >> /scripts/cpu-now.txt $ Z: U7 t) w2 k$ j6 h& P8 [$ {7 X
P3 E( S$ Z7 C2 b0 P
#逐行连接上面的时间和cpu相关行数据(每次重新写入文件>) 7 f9 w( h" v. P
paste /scripts/datetime-cpu.txt /scripts/cpu-now.txt > /scripts/cpu.txt- _; ^9 O( u d& H
# chmod a+x /scripts/cpu-check.sh; j5 P: |" G: p
4、查看CPU监控的结果文件:
+ ?) N( E. ^5 |. d4 k复制代码代码如下:
! k- u% ]/ D1 z) s I: d% N
3 _% ^- I' x, `! f! a' J# cat /scripts/cpu.txt2 S4 O& G- n( D" v4 m! }0 U
: i1 E9 {9 i) W+ O0 N$ X6 E0 H5、编写cpu结果文件邮件发送脚本:" }: G% a7 B; k+ e) b3 G& T
复制代码代码如下:
3 `) B; J( @3 Q; a# V; M1 s# K6 Y; V# v
# vim /scripts/sendmail-cpu.sh
: Y$ I% o# R* l" a( y#!/bin/bash
, b' T A9 U- D5 M& P [#把生成的cpu.txt文件通过邮件发送给用户
/ [4 ]8 L @ t& d/ b6 a4 V: ?/ M9 N4 K 8 ^6 e% {! x% ?( E% U3 A) l. z
#提取本服务器的IP地址信息 6 u Q6 M8 K' T+ E& e4 S
IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
+ B" m3 y" J- n 9 Y6 _& P# V) }( M. {
#提取当前日期6 v5 @! `4 S. ^- p6 @& a. m% D; @2 Q
today=`date -d "0 day" +%Y年%m月%d日`
! R# L- H- Z9 Y+ e* e, b9 K$ q
$ U4 o7 j9 v3 \2 R#发送cpu监控结果邮件 ) T% s0 }8 c5 n' P$ M
echo "这是$IP服务器$today的cpu监控报告,请下载附件。" | mutt -s "$IP服务器$today的CPU监控报告" -a /scripts/cpu.txt fuquanjun@xxx.com! D7 c2 `3 V" p2 ^
# chmod a+x /scripts/sendmail-cpu.sh, x. q6 n- A4 t% |) ?# v
% U( n6 ^! R0 ?6 c' s( ]四、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
" l% [ e( ]1 N0 k# i, G6 ^# B# w$ p& e, o# z6 m
复制代码代码如下:
, z' k5 D N- h4 M2 V* L! k; k7 a- u1 l" H; p8 b
# vim /scripts/cpu-warning.sh
/ s7 y; T( u; s, I; q#!/bin/bash
8 l8 G" a" i& |. `0 x#监控系统cpu的情况脚本程序 0 [) U1 z% m) ~3 K4 O0 S
& ^( Z o3 R6 v$ g# E+ b
#提取本服务器的IP地址信息
; N# }- o0 _! b$ QIP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "` 3 d2 T* d* a% y
: j! P- A7 J. \& f# n$ m: [#取当前空闲cpu百份比值(只取整数部分) 8 w$ f& v& W# W' I' W+ V1 s. n
cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."` 4 I5 G8 V7 G/ G: S9 ?+ x$ _
% W V! l$ f/ P2 y7 h# A
#设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
2 Q: c' o0 d; _0 C4 b3 Y3 nif (($cpu_idle < 20)); then
h- M3 w# U. a: ]3 |& k echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" fuquanjun@xxx.com
8 ?7 `$ p% L; L( g( R& I* lfi# Y3 I& Z$ G& h' j* s
# chmod a+x /scripts/cpu-warning.sh |
|