首页 > 编程知识 正文

linux服务器搭建教程,内部控制模块监控处理器性能故障

时间:2023-05-04 19:52:55 阅读:54598 作者:4001

监视硬件运行状况

shell监视cpu、内存和加载平均,记录日志,并在负载繁重时通过电子邮件通知管理员。

原理:

1 .获取CPU、内存、加载平均的数值

2 .判断数值是否超过自定义范围,例如(CPU90%,Memory10%,load average2)

3 .数值超出范围时,通过电子邮件通知管理员。 发送有时间间隔,每小时只发送一次。

4 .将数值写入log。

将crontab设置为每30秒运行一次。

服务器监视器. sh

#! /漂亮的黑米/bash

#记录系统监视、cpu、内存、加载平均,超过规定数值时通过电子邮件通知管理员

# * * *配置开始* * *

#当前目录路径

root=$(CD'$ ) dirname'$0' ); pwd )

#当前服务器名称

主机=$ (hostname )

# log文件路径

CPU_LOG='${ROOT}/logs/cpu.log '

MEM_LOG='${ROOT}/logs/mem.log '

load _ log=' $ { root }/logs/load.log '

#通知邮件列表

NOTICE_EMAIL='admin@admin.com '

# cpu、内存、加载平均记录上次通知邮件发送时间

CPU _ remark='/tmp/server monitor _ CPU.remark '

mem _ remark='/tmp/server monitor _ mem.remark '

load _ remark='/tmp/server monitor _ load average.remark '

#发送通知邮件的间隔

REMARK_EXPIRE=3600

now=$ (数据% s )

# * * *配置结束* * *

# * * *功能启动* * *

获取CPU占用

功能获取CPU (

CPU free=$ (vmstat 15,$ p '|awk ' { x=x $ 15 } end { printx/5 } '|awk-f.' { print $1} ' ) )

CPU用户=$ ((100-$ CPU free ) )

echo $cpuused

本地标记

remark=$ (获取重新标记$ { CPU _ remark } )

检查CPU使用率是否超过90%

if [ ' $ remark '=' ' ] [ ' $ CPU used '-gt90 ]; 陈真

echo ' subject 3360 $ {主机} cpuusesmorethan 90 % $ (日期% y-% m-% d ' % h : % m 3360 % s )|sendmail${noticical}

echo '$(date %s ) ' ' $CPU_REMARK '

fi

}

#获取内存使用量

function GetMem

mem=$ (自由- m|sed-n ' 3,3p ' ) )

(used=$ (echo $ mem|awk-f ' ' { print $3} ' ) ) ) ) ) ) ) ) )。

free=$ (echo $ mem|awk-f ' ' { print $4} ) )

总体=$ ($ used $ free ) )

limit=$($total/10 ) )

echo '${total} ${used} ${free} '

本地标记

remark=$ (get remark $ { mem _ remark } )

#检查内存使用率是否超过90%

if [ ' $ remark '=' ' ] [ ' $ limit '-gt ' $ free ' ]; 陈真

echo ' subject 3360 $ { host } memoryusesmorethan 90 % $ (日期% y-% m-% d ' % h : % m 3360 % s )|sendmail${noost}

echo '$(date %s ) ' ' $MEM_REMARK '

fi

}

获取加载平均

功能获取加载

load=$ (uptime|awk-f ' load average : ' ({打印$2} ) )

p>

m1=$(echo $load | awk -F ', ' '{print $1}')

m5=$(echo $load | awk -F ', ' '{print $2}')

m15=$(echo $load | awk -F ', ' '{print $3}')

echo "${m1} ${m5} ${m15}"

m1u=$(echo $m1 | awk -F '.' '{print $1}')

local remark

remark=$(GetRemark ${LOAD_REMARK})

# 检查是否负载是否有压力

if [ "$remark" = "" ] && [ "$m1u" -gt "2" ]; then

echo "Subject: ${HOST} Load Average more than 2 $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}

echo "$(date +%s)" > "$LOAD_REMARK"

fi

}

# 获取上一次发送电邮时间

function GetRemark() {

local remark

if [ -f "$1" ] && [ -s "$1" ]; then

remark=$(cat $1)

if [ $(( $NOW - $remark )) -gt "$REMARK_EXPIRE" ]; then

rm -f $1

remark=""

fi

else

remark=""

fi

echo $remark

}

# *** function end ***

cpuinfo=$(GetCpu)

meminfo=$(GetMem)

loadinfo=$(GetLoad)

echo "cpu: ${cpuinfo}" >> "${CPU_LOG}"

echo "mem: ${meminfo}" >> "${MEM_LOG}"

echo "load: ${loadinfo}" >> "${LOAD_LOG}"

exit 0

监控网站是否异常shell 监控网站是否异常的脚本,如有异常自动发电邮通知管理员。

流程:

1.检查网站返回的http_code是否等于200,如不是200视为异常。

2.检查网站的访问时间,超过MAXLOADTIME(10秒)视为异常。

3.发送通知电邮后,在/tmp/monitor_load.remark记录发送时间,在一小时内不重复发送,如一小时后则清空/tmp/monitor_load.remark。

#!/洁净的黑米/bash

SITES=("http://web01.example.com" "http://web02.example.com") # 要监控的网站

NOTICE_EMAIL='me@example.com' # 管理员电邮

MAXLOADTIME=10 # 访问超时时间设置

REMARKFILE='/tmp/monitor_load.remark' # 记录时否发送过通知电邮,如发送过则一小时内不再发送

ISSEND=0 # 是否有发送电邮

EXPIRE=3600 # 每次发送电邮的间隔秒数

NOW=$(date +%s)

if [ -f "$REMARKFILE" ] && [ -s "$REMARKFILE" ]; then

REMARK=$(cat $REMARKFILE)

# 删除过期的电邮发送时间记录文件

if [ $(( $NOW - $REMARK )) -gt "$EXPIRE" ]; then

rm -f ${REMARKFILE}

REMARK=""

fi

else

REMARK=""

fi

# 循环判断每个site

for site in ${SITES[*]}; do

printf "start to load ${site}n"

site_load_time=$(curl -o /dev/null -s -w "time_connect: %{time_connect}ntime_starttransfer: %{time_starttransfer}ntime_total: %{time_total}" "${site}")

site_access=$(curl -o /dev/null -s -w %{http_code} "${site}")

time_total=${site_load_time##*:}

printf "$(date '+%Y-%m-%d %H:%M:%S')n"

printf "site load timen${site_load_time}n"

printf "site access:${site_access}nn"

# not send

if [ "$REMARK" = "" ]; then

# check access

if [ "$time_total" = "0.000" ] || [ "$site_access" != "200" ]; then

echo "Subject: ${site} can access $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}

ISSEND=1

else

# check load time

if [ "${time_total%%.*}" -ge ${MAXLOADTIME} ]; then

echo "Subject: ${site} load time total:${time_total} $(date +%Y-%m-%d' '%H:%M:%S)" | sendmail ${NOTICE_EMAIL}

ISSEND=1

fi

fi

fi

done

# 发送电邮后记录发送时间

if [ "$ISSEND" = "1" ]; then

echo "$(date +%s)" > $REMARKFILE

fi

exit 0

您可能感兴趣的文章:Ubuntu中为Android增加硬件抽象层(HAL)模块访问Linux内核驱动程序

基于Linux系统中查看硬件等信息的方法详解

Linux下的硬件安装

Linux常用查看硬件设备信息命令大全(值得收藏)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。