Redhat linux 시스템 의 부하 와 CPU, 메모리, 하 드 디스크, 사용자 수 모니터링 셸 스 크 립 트
요 며칠 동안 셸 스 크 립 트 를 연구 하고 시스템 부하, CPU, 메모리, 하 드 디스크, 사용자 수 모니터링 스 크 립 트 프로그램 을 작 성 했 습 니 다.nagios 모니터링 없 이 서버 가 인터넷 에 접속 할 수만 있다 면 메 일 을 보 내 는 방식 으로 관리자 시스템 자원 의 사용 상황 을 알 릴 수 있 습 니 다.1. Liux 시스템 경고 메 일 스 크 립 트 작성
# vim/scripts/sys-warning.sh
- #!/bin/bash
- #监控系统负载与CPU、内存、硬盘、登录用户数,超出警戒值则发邮件告警。
-
- #提取本服务器的IP地址信息
- IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`
-
- # 1、监控系统负载的变化情况,超出时发邮件告警:
-
- #抓取cpu的总核数
- cpu_num=`grep -c 'model name' /proc/cpuinfo`
-
- #抓取当前系统15分钟的平均负载值
- #load_15=`uptime | awk '{print $12}'` (此处用 '{print $12}' 这个获取的不够准确,如果都用awk取第12个字段的话,结果有可能为空,而用$NF表输出最后一段的内容。感谢hpsfpcca网友的指正)
- load_15=`uptime | awk '{print $NF}'`
-
- #计算当前系统单个核心15分钟的平均负载值,结果小于1.0时前面个位数补0。
- average_load=`echo "scale=2;a=$load_15/$cpu_num;if(length(a)==scale(a)) print 0;print a" | bc`
-
- #取上面平均负载值的个位整数
- average_int=`echo $average_load | cut -f 1 -d "."`
-
- #设置系统单个核心15分钟的平均负载的告警值为0.70(即使用超过70%的时候告警)。
- load_warn=0.70
-
- #当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较
- if (($average_int > 0)); then
- echo "$IP服务器15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!" | mutt -s "$IP 服务器系统负载严重告警!!!" [email protected]
- else
-
- #当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )
- load_now=`expr $average_load \> $load_warn`
-
- #如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员
- if (($load_now == 1)); then
- echo "$IP服务器15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。" | mutt -s "$IP 服务器系统负载告警" [email protected]
- fi
-
- fi
-
-
- # 2、监控系统cpu的情况,当使用超过80%的时候发告警邮件:
-
- #取当前空闲cpu百份比值(只取整数部分)
- cpu_idle=`top -b -n 1 | grep Cpu | awk '{print $5}' | cut -f 1 -d "."`
-
- #设置空闲cpu的告警值为20%,如果当前cpu使用超过80%(即剩余小于20%),立即发邮件告警
- if (($cpu_idle < 20)); then
- echo "$IP服务器cpu剩余$cpu_idle%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器CPU告警" [email protected]
- fi
-
-
- # 3、监控系统交换分区swap的情况,当使用超过80%的时候发告警邮件:
-
- #系统分配的交换分区总量
- swap_total=`free -m | grep Swap | awk '{print $2}'`
-
- #当前剩余的交换分区free大小
- swap_free=`free -m | grep Swap | awk '{print $4}'`
-
- #当前已使用的交换分区used大小
- swap_used=`free -m | grep Swap | awk '{print $3}'`
-
- if (($swap_used != 0)); then
- #如果交换分区已被使用,则计算当前剩余交换分区free所占总量的百分比,用小数来表示,要在小数点前面补一个整数位0
- swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`
-
- #设置交换分区的告警值为20%(即使用超过80%的时候告警)。
- swap_warn=0.20
-
- #当前剩余交换分区百分比与告警值进行比较(当大于告警值(即剩余20%以上)时会返回1,小于(即剩余不足20%)时会返回0 )
- swap_now=`expr $swap_per \> $swap_warn`
-
- #如果当前交换分区使用超过80%(即剩余小于20%,上面的返回值等于0),立即发邮件告警
- if (($swap_now == 0)); then
- echo "$IP服务器swap交换分区只剩下 $swap_free M 未使用,剩余不足20%,使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器内存告警" [email protected]
- fi
-
- fi
-
-
- # 4、监控系统硬盘根分区使用的情况,当使用超过80%的时候发告警邮件:
-
- #取当前根分区(/dev/sda3)已用的百份比值(只取整数部分)
- disk_sda3=`df -h | grep /dev/sda3 | awk '{print $5}' | cut -f 1 -d "%"`
-
- #设置空闲硬盘容量的告警值为80%,如果当前硬盘使用超过80%,立即发邮件告警
- if (($disk_sda3 > 80)); then
- echo "$IP 服务器 /根分区 使用率已经超过80%,请及时处理。" | mutt -s "$IP 服务器硬盘告警" [email protected]
- fi
-
-
- # 5、监控系统用户登录的情况,当用户数超过3个的时候发告警邮件:
-
- #取当前用户登录数(只取数值部分)
- users=`uptime | awk '{print $6}'`
-
- #设置登录用户数的告警值为3个,如果当前用户数超过3个,立即发邮件告警
- if (($users >= 3)); then
- echo "$IP 服务器用户数已经达到$users个,请及时处理。" | mutt -s "$IP 服务器用户数告警" [email protected]
- fi
# chmod a+x/scripts/sys-warning.sh
2. 퀘 스 트 가입 계획: 10 분 마다 한 번 검 측 하고 경고 가 있 으 면 바로 메 일 (10 분 에 한 번 발송) 을 보 냅 니 다.
# crontab -e
- */10 * * * * /scripts/sys-warning.sh
# service crond restart
3. 서버 가 메 일 을 보 낼 수 있 도록 하려 면 sendmail 서 비 스 를 시작 하거나 Liux 아래 의 메 일 클 라 이언 트 msmtp 소프트웨어 (foxmail 과 유사 한 도구) 를 설치 해 야 합 니 다.
1. 다운로드 설치: http://downloads.sourceforge.net/msmtp/msmtp-1.4.16.tar.bz2?modtime=1217206451&big_mirror=0 # tar jxvf msmtp-1.4.16.tar.bz2 # cd msmtp-1.4.16 # ./configure --prefix=/usr/local/msmtp # make # make install
2. msmtp 설정 파일 과 로그 파일 만 들 기 (host 는 메 일 도 메 인 이름, 메 일 사용자 이름 test, 비밀번호 123456) # vim ~/.msmtprc
- account default
- host 126.com
- from [email protected]
- auth login
- user test
- password 123456
- logfile ~/.msmtp.log
# chmod 600 ~/.msmtprc # touch ~/.msmtp.log
3. mutt 설치 설정: (일반 Liux 에 서 는 기본 설치 mutt 가 있 습 니 다) # vim ~/.muttrc
- set sendmail="/usr/local/msmtp/bin/msmtp"
- set use_from=yes
- set realname="memory"
- set from=test@126.com
- set envelope_from=yes
- set rfc2047_parameters=yes
- set charset="utf-8"
4. 메 일 발송 테스트 (- s 메 일 제목) # echo "메 일 내용 123456"| mutt - s "메 일 제목 테스트 메 일" [email protected]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.