集群监控脚本

#########################################################################

# File Name: monitor.sh

# Author: wugj

# mail: [email protected]

# Created Time: 2015年11月16日 星期一 15时14分19秒

#########################################################################

#!/bin/bash

#监控系统负载、内存,超出则发出邮件警告

hostname=`hostname|sed ‘s/.local//g‘`

#ip=`ifconfig |awk ‘{print $1,$2}‘|egrep -e ‘inet addr‘ -e ‘Link‘|egrep -v ‘lo|127.0.0.1‘|cut -f 2 -d ":"|sed ‘s/Link/:/g‘`

ip=`ifconfig eth0|grep "inet addr"|cut -f 2 -d ":"|cut -f 1 -d " "`

echo ip:$ip

#cpu个数

cpu_num=`grep -c ‘model name‘ /proc/cpuinfo`

echo cpu_num:$cpu_num

#统计节点状态信息日志路径

stat_path=/share/nas1/wugj/script/shell/log

echo persent static path:$stat_path

cur_time=`date +%y%m%d`

#节点状态文件

stat_file="$hostname`date +%y%m%d`.xls"

err_log="`date +%y%m`.log"

if [[ ! -f $stat_path/$err_log ]];

then touch $stat_path/$err_log

echo user     pid          host         date              command  >$stat_path/$err_log

fi

echo $stat_file

#设置平均负载的警告值

load_warn=0.70

#提取本机的静态变量

watc_cpu_test(){

#系统15分钟的负载

load_15=`uptime |awk ‘{print $NF}‘`

echo load_15:  $load_15

#每个核心每15分钟负载

average_load=`echo "scale=3;a=$load_15/$cpu_num;if(length(a)==scale(a))print 0 ;print a"|bc`

echo $average_load

average_int=`echo $average_load|cut -f 1 -d "."`

echo average_int:$average_int

#当单个核心15分钟的平均负载值大于等于1.0(即个位整数大于0) ,直接发邮件告警;如果小于1.0则进行二次比较

if (( $average_int > 0)); then

echo "$hostname15分钟的系统平均负载为$average_load,超过警戒值1.0,请立即处理!!!"

else

#当前系统15分钟平均负载值与告警值进行比较(当大于告警值0.70时会返回1,小于时会返回0 )

load_now=`expr $average_load \> $load_warn`

#如果系统单个核心15分钟的平均负载值大于告警值0.70(返回值为1),则发邮件给管理员

if (($load_now == 1)); then

echo "$hostname15分钟的系统平均负载达到 $average_load,超过警戒值0.70,请及时处理。"

fi

fi

}

function timeout()

{

waitsec=5

($*) & pid=$!

(sleep $waitsec && kill -HUP $pid) 2>/dev/null & watchdog=$!

#if command is finish

if wait $pid  2>/dev/null;then

pkill -HUP -P  $watchdog

wait $watchdog

fi

}

mem_quota=90

function watch_mem()

{

memtotal=`cat /proc/meminfo |grep "MemTotal"|awk ‘{print $2}‘`

memfree=`cat /proc/meminfo |grep "MemFree"|awk ‘{print $2}‘`

cached=`cat /proc/meminfo |grep "^Cached"|awk ‘{print $2}‘`

buffers=`cat /proc/meminfo |grep "Buffers"|awk ‘{print $2}‘`

#echo "hahhahah"

mem_usage=$((100-memfree*100/memtotal-buffers*100/memtotal-cached*100/memtotal))

# echo mem_memssage:

if [ $mem_usage -gt $mem_quota ];then

mem_message="WARN! The Memory usage is over than $mem_usage%"

kill_proc

return 1

else

return 0

fi

}

function get_cpu_info()

{

head -1 /proc/stat|awk ‘{used+=$2+$3+$4;unused+=$5+$6+$7+$8} END{print used,unused}‘

}

function proc_cpu_ps5()

{

ps aux|sort -nk3r|head -n 5 >>$stat_path/$stat_file

}

function proc_cpu_top5()

{

top -n 1 -b |sed -n ‘7‘p >>$stat_path/$stat_file

top -n 1 -b | grep -v -E ‘^[[:alpha:]]|^$|COMMAND‘ |sort -k9nr|head -n 5 >>$stat_path/$stat_file

usr`=top -n 1 -b | grep -v -E ‘^[[:alpha:]]|^$|COMMAND‘ |sort -k9nr|head -n 1|awk -F " " ‘{print $2}‘`

mail -s "cpu load high"  -c [email protected]  [email protected]<$stat_paht/$stat_file

}

function kill_proc()

{

#pid=`top -n 1 -b | grep -v -E ‘^[[:alpha:]]|^$|COMMAND|root‘ |sort -k6nr -k 9|head -n 1|awk -F " " ‘{print $1}‘`

#mesg=`top -n 1 -b | grep -v -E ‘^[[:alpha:]]|^$|COMMAND|root‘ |sort -k6nr -k 9|head -n 1|awk -F " " ‘{print "\t"$6"\t"$12}‘`

#usr=`top -n 1 -b | grep -v -E ‘^[[:alpha:]]|^$|COMMAND|root‘ |sort -k6nr -k 9|head -n 1|awk -F " " ‘{print $2}‘`

#command=`top -n 1 -b -c | grep -v -E ‘^[[:alpha:]]|^$|COMMAND‘ |sort -k9nr|head -n 1|awk -F " " ‘{print $12}‘`

top -n 1 -b -c |awk -F " " ‘{

res=$6; pid=$1;user=$2; com=$12 ;

if(res ~/m/){

res=res*1024 ;

print  user"\t"res"\t"pid"\t"com;

}

else if (res ~/g/){

res=res*1024*1024;

print  user"\t"res"\t"pid"\t"com;

}

else if (res ~/*/){

res=res*1;

print  user"\t"res"\t"pid"\t"com;

}

}‘|sort -k2nr|head -n 1|awk -F " "  ‘{

system("kill -9 "$3"");

system("echo killed process "$3"");

system("echo "$0" "HOSTNAME" >> ‘"$stat_path/$err_log"‘");

system("echo Dear "$1" , you process "$3" has been killed of ‘"$hostname"‘ at `date`|mail -s "killed  pid warn"  [email protected] "$1"@biomarker.com.cn");

}‘

#echo $pid|xargs kill -9

#echo $usr  $pid has be killed in `date`

#echo " $usr   $pid   $hostname      `date`    $command"  >> $stat_path/$err_log

#echo "you process  $usr   $pid  $mesg  of   $hostname    at   `date`     has been killed "  |mail -s "killed pid" -c [email protected] [email protected]

}

cpu_quota=80

function watch_cpu()

{

time_point_1=`get_cpu_info`

sleep  10

time_point_2=`get_cpu_info`

cpu_usage=`echo $time_point_1 $time_point_2|awk ‘{used=$3-$1;total=$3+$4-$1-$2;print used*100/total}‘`

echo cpu_usage: $cpu_usage>>$stat_path/$stat_file

if [[ $cpu_usage > $cpu_quota ]]; then

cpu_message="WARN! The CPU Usage is over than $cpu_quota%"

echo cpu_message: $cpu_message >> $stat_path/$stat_file

#timeout proc_cpu_ps5

timeout proc_cpu_top5

#kill_proc

fi

#测试

# timeout proc_cpu_ps5

# timeout proc_cpu_top5

}

function update_file(){

if [[ ! -f  $stat_path/$stat_file ]];then

touch $stat_path/$stat_file

echo make new file successful

fi

awk ‘BEGIN{

print "ip: ‘"$ip"‘ "

print "host: ‘"$hostname"‘"

print "cpu_num: ‘"$cpu_num"‘"

print "mem_usage: ‘"$mem_usage"‘%"

print "mem_message: ‘"$mem_message"‘"

}‘>$stat_path/$stat_file

}

watch_mem

update_file

watch_cpu

kill_proc

时间: 2024-10-28 14:35:48

集群监控脚本的相关文章

Ganglia集群监控

简介 Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监控系统性能,如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整.分配系统资源,提高系统整体性能起到重要作用. 每台计算机都运行一个收集和发送度量数据的名为 gmond 的守护进程.接收所有度量数据的主机可以显示这些数据并且可以将这些数据的精简表单传递到层次结

完美集群监控组合ganglia和nagios

Ganglia是伯克利开发的一个集群监控软件.可以监视和显示集群中的节点的各种状态信息,比如如:cpu .mem.硬盘利用率, I/O负载.网络流量情况等,同时可以将历史数据以曲线方式通过php页面呈现. 而ganglia又依赖于一个web服务器用来显示集群状态,用rrdtool来存储数据和生成曲线图,需要xml解析因此需要expat,配置文件解析需要libconfuse.安装apche的httpd还需要支持php4以上,同时还有一些依赖软件. ganglia作为一款最常用的Linux环境中的监

flume-ng 集群搭脚本

#!/bin/bash # author: xirong # date : 2015-02-06 ##### 搭建 flume 集群的脚本 # 注意: # 1. 需要 jdk7 环境,如果没有 Java 环境,请配置 # 2. 有 /home/work 目录,否则无法安装 # #### # 压缩文件解压 tar -zxf apache-flume-1.5.2-bin.tar.gz -C /home/work/flume_cluster/ # 配置flume环境 echo '## flume co

集群监控

集群监控 大型互联网企业的背后,依靠的是成千上万台服务器日夜不停的运转,以支撑其业务的运转.宕机对于互联网企业来说,代价是沉重的,轻则影响用户体验,重则直接影响交易,导致交易下跌,并且给企业声誉造成不可挽回的损失.对于这些机器对应的开发和运维人员来说,即便是每台机器登陆一次,登陆那么多台机器也够呛,何况还需要进行系统指标的检查.因此,依靠人力是不可能完成24小时不间断监控服务器的任务的. 如今,互联网已经深入到人们生活的每个角落,可以想象一下,假如哪一天Google或者Baidu不能搜索,抑或是

Redis集群监控RedisClusterManager

RedisClusterManager监控Redis集群 环境要求:Java8+ jdk配置这里略过 RedisClusterManager 下载地址:  附件:systemMonitor-release.tar.gz 收集系统状态包  附件: RedisManager-Web-1.0.0-SNAPSHOT-beta.tar.gz redis集群管理包      1.安装systemMonitor    # tar -zxvf systemMonitor-release.tar.gz   # v

Zookeeper实现分布式集群监控

Zookeeepr实现分布式集群监控 Zookeeper中节点有两种:临时节点和永久节点 从类型上看节点又可以分为四种节点类型:PERSIST,PERSIST_SEQUENTIAL,EPHEMERAL,EPHEMERAL_SEQUENTIAL 临时节点有一个特点:当创建临时节点的程序停掉之后,这个临时节点就会消失. 监视器的特点:可以给zk中的节点注册监视器,见识这个节点的变化情况. 监视器注册一次,只能使用一次,多次使用就要多次注册. 我们利用这个Zookeeper的临时节点特性+监视器(Wa

Redis Sentinel(Redis集群监控管理软件)

Redis Sentinel(Redis集群监控管理软件) # Redis-Sentinel的官网地址:http://redis.io/topics/sentinel # 注意:Redis-Sentinel官网提供不是稳定版!个人感觉这个比keepalived+redis来切换好非常多. 配置环境: OS: CentOS6.1 x86  *  4 Software: redis-2.6.9 内存: 16G CPU: E5606  @ 2.13GHz *2 ------------------ I

Zookeeper Monitor集群监控开发

随着线上越来越多的系统依赖Zookeeper集群,以至于Zookeeper集群的运行状况越来越重要.但是目前还没有什么好用的Zookeeper集群监控系统(淘宝开源了一个Zookeeper监控系统,但是我觉得很不好用,里面主要有四个线程在跑,而且需要SSH登录到线上集群,这用起来很不方便.)于是我们开发了一套Zookeeper集群监控程序,可以监控Zookeeper集群. 从官方文档我们可以了解到,监控Zookeeper集群可以用两种方法: The ZooKeeper service can b

scrapydweb:实现 Scrapyd 服务器集群监控和交互,Scrapy 日志分析和可视化

功能特性 Scrapyd 服务器集群监控和交互 支持通过分组和过滤选中特定服务器节点 一次点击,批量执行 Scrapy 日志分析 统计信息展示 爬虫进度可视化 关键日志分类 支持所有 Scrapyd API Deploy project, Run Spider, Stop job List projects/versions/spiders/running_jobs Delete version/project GitHub scrapydweb 欢迎 Star 和提交 Issue 安装 通过