Zabbix监控进程报警(Zabbix Monitoring Process Alarm)
zabbix监控进程占cpu、内存、磁盘RAID情况
1、cpu达到90%时报警
名称: cpu user percent gt 90%
表达式:{Template OS Linux:system.cpu.util[,idle].avg(1m)}<10
2、内存达到80%时报警
配置—主机(选择监控主机)—监控项—创建监控项
1、创建监控项
名称:内存使用率
类型:可计算的
键值:vm.memory.size[usedpercent]
公式:
100*(last("vm.memory.size[total]")-last("vm.memory.size[available]"))/last("vm.memory.size[total]")
信息类型:数字(无正负)
更新间隔:5s
2、创建触发器
配置—主机(选择监控主机)—触发器—创建触发器
名称: Memory used percent more than 80%
表达式: {192.168.88.16:vm.memory.size[usedpercent].avg(1,60)}>80
3、创建图形
3、内存达到80%时报警
1、增加硬盘使用量的监控项
名称:监控/磁盘空间
键值:vfs.fs.size[/,pfree]
2、增加硬盘使用量的触发器
名称: 空闲硬盘大小 小于20%
表达式:{192.168.88.16:vfs.fs.size[/,pfree].last(0)}<20
4、监控进程占cpu、内存情况
mkdir -p /usr/local/zabbix/scripts
cd /usr/local/zabbix/scripts
vi top.sh
#!/bin/sh
top -b -n 1 -d 1 > /tmp/top.txt
chmod +x top.sh
./top.sh
chown zabbix /tmp/top.txt
crontab -e
*/1 * * * * /usr/local/zabbix/scripts/top.sh > /dev/null 2>&1
vi discovery_process.sh
#!/bin/bash
#获取占用高的10个进程
#system process discovery script
proc_array=(`tail -n +8 /tmp/top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}'|sort -gr|head -10|cut -d" " -f2`)
length=${#proc_array[@]}
printf "{\n"
printf '\t'"\"data\":["
for ((i=0;i<$length;i++))
do
printf "\n\t\t{"
printf "\"{#PROCESS_NAME}\":\"${proc_array[$i]}\"}"
if [ $i -lt $[$length-1] ];then
printf ","
fi
done
printf "\n\t]\n"
printf "}\n"
chmod +x discovery_process.sh
测试获取的10个进程名
./discovery_process.sh json格式
vi process_check.sh
#!/bin/bash
#system process CPU&MEM use information
mode=$1
name=$2
process=$3
mem_total=$(cat /proc/meminfo | grep "MemTotal" | awk '{printf "%.f",$2/1024}')
cpu_total=$(( $(cat /proc/cpuinfo | grep "processor" | wc -l) * 100 ))
function mempre {
mem_pre=`tail -n +7 /tmp/top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`
echo "$mem_pre"
}
function memuse {
mem_use=`tail -n +7 /tmp/top.txt | awk '{a[$NF]+=$10}END{for(k in a)print a[k]/100*'''${mem_total}''',k}' | grep "\b${process}\b" | cut -d" " -f1`
echo "$mem_use" | awk '{printf "%.f",$1*1024*1024}'
}
function cpuuse {
cpu_use=`tail -n +7 /tmp/top.txt | awk '{a[$NF]+=$9}END{for(k in a)print a[k],k}' | grep "\b${process}\b" | cut -d" " -f1`
echo "$cpu_use"
}
function cpupre {
cpu_pre=`tail -n +7 /tmp/top.txt|awk '{a[$NF]+=$9}END{for(k in a)print a[k],k}'|grep "${process}"|cut -d" " -f1`
if [ "$cpu_pre" = "" ]
then
echo "0.0"
else
echo "$cpu_pre.0"
fi
}
case $name in
mem)
if [ "$mode" = "pre" ];then
mempre
elif [ "$mode" = "avg" ];then
memuse
fi
;;
cpu)
if [ "$mode" = "pre" ];then
cpupre
elif [ "$mode" = "avg" ];then
cpuuse
fi
;;
*)
echo -e "Usage: $0 [mode : pre|avg] [mem|cpu] [process]"
esac
chmod +x process_check.sh
zabbix agentd配置收集数据:
cat zabbix_agentd.conf
#monitor process
UserParameter=discovery.process,/usr/local/zabbix/scripts/discovery_process.sh
UserParameter=process.check[*],/usr/local/zabbix/scripts/process_check.sh $1 $2 $3
systemctl restart zabbix_agentd
在web界面导入模板:discovery-cpu&memory.xml
在主机添加整合图形:
内存使用率:
内存使用大小:
cpu使用率:
图形效果图:
内存使用率:
内存使用大小:
5、监控磁盘RAID的discover模板
通常,我们对硬盘当前的状态不太好确定,一般通过机房人员巡检来完成,有没有通过软件的方式来检查确定这个问题呢。MegaCli就可以做到,一般通过 MegaCli 的“Media Error Count”和“Other Error Count”这两个数值来确定阵列中磁盘是否有问题。
Medai Error Count 表示磁盘可能错误,可能是磁盘有坏道,这个值不为0值得注意,数值越大,危险系数越高;
Other Error Count 表示磁盘可能存在松动,可能需要重新再插入;
发现脚本:
#!/bin/bash
###raid_id_discover.sh
###wuhf###
num=0
RAID_stats(){
DISK=($(sudo /usr/local/MegaCli/MegaCli64 -pdlist -aALL |grep"Slot Number"|awk -F":"'{print $2}'))
printf'{\n\t"data":[\n'
for key in${DISK[@]};do
if[["${#DISK[@]}" -gt "$num"&&"$num" -ne "$((${#DISK[@]}-1))"]];then
printf"\t\t{\"{#RAID_ID}\":\"$key\"},\n"
let"num++"
elif[["$((${#DISK[@]}-1))" -eq "$num"]];then
printf"\t\t{\"{#RAID_ID}\":\"$key\"}\n"
fi
done
printf'\t]\n}\n'
}
RAID_stats
键值设置:
#raid.conf
UserParameter=raid_discover,bash /usr/local/zabbix/libexec/raid_id_discover.sh
UserParameter=raid_degraded,sudo /usr/local/MegaCli/MegaCli64 -AdpAllInfo -aALL -NoLog |grep"Degraded"|awk'{print $NF}'
UserParameter=raid_failed_disks,sudo /usr/local/MegaCli/MegaCli64 -AdpAllInfo -aALL -NoLog |grep"Failed Disks"|awk'{print $NF}'
UserParameter=raid_MEC[*],sudo /usr/local/MegaCli/MegaCli64 -PDList -aAll -NoLog |grep -A 8 "Slot Number: $1"|grep"Media Error Count"|awk'{print $NF}'
UserParameter=raid_OEC[*],sudo /usr/local/MegaCli/MegaCli64 -PDList -aAll -NoLog |grep -A 8 "Slot Number: $1"|grep"Other Error Count"|awk'{print $NF}'
权限设置:
chmod 755 /usr/local/zabbix/libexec/raid_id_discover.sh
chown zabbix.zabbix /usr/local/zabbix/libexec/raid_id_discover.sh
chown zabbix.zabbix /usr/local/zabbix/etc/zabbix_agentd.conf.d/raid.conf
echo"zabbix ALL=(root) NOPASSWD:ALL">> /etc/sudoers
sed -i 's/^Defaults.*.requiretty/#Defaults requiretty/' /etc/sudoers
模板导入:
说明:
要理解模板首先要了解MegaCLI命令的详情,这个百度教程有很多;我提供的模板是在zabbix-3.0的环境上运行的,低版本可能不兼容,只要理解了键值的意义自己可以自定义模板;