一、背景
服务部署在异地三方机房,机房内没有服务器监控告警(磁盘、CPU、内存);
尝试通过zabbix进行监控,离线环境,安装依赖包复杂,而且必须申请root权限安装;
二、通过简单的shell脚本统计服务器基本情况
shell脚本如下:
#!/bin/bash
##############################################
#Filename: jiankong.sh
#Description: 监控cpu、磁盘、内存使用率
##############################################
logFile=/app/test/jiankong.log
#获取报警时间
now_time=`date '+%F %T'`
#获取cpu使用率
cpuUsage=`top -b -n5 | fgrep "Cpu(s)" | tail -1 | awk -F'id,' '{split($1, vs, ","); v=vs[length(vs)]; sub(/\s+/, "", v);sub(/\s+/, "", v); printf "%d", 100-v;}'`
#统计内存使用率
mem_used_persent=`free -m | awk -F '[ :]+' 'NR==2{printf "%d", ($3)/$2*100}'`
#获取磁盘使用率
data_name="/dev/sdb1"
diskUsage=`df -h | grep $data_name | awk -F '[ %]+' '{print $5}'`
function check(){
email_text="<h2><strong>【XX服务器告警】</strong></h2> <p><br></p><p><br></p>CPU使用率:${cpuUsage}% 磁盘使用率:${diskUsage}% 内存使用率:${mem_used_persent}%"
echo $email_text
echo "报警时间:${now_time}" > $logFile
if [ $cpuUsage -gt 80 ] || [ $diskUsage -gt 90 ] || [ $mem_used_persent -gt 80 ];then
email_body="{\"receivers\":[\"test1@qq.com\",\"test2@qq.com\",\"test3@qq.cn\"],\"subject\":\"服务器监控\",\"text\":\"${email_text}\"}"
echo $email_text >> $logFile
curl -X POST --data "${email_body}" https://****/email/simpleSend -H 'Content-Type: application/json'
fi
}
function main(){
check
}
main
注意点:
1、判定使用上限
正确的写法: if [ $cpuUsage -gt 80 ] || [ $diskUsage -gt 90 ] || [ $mem_used_persent -gt 80 ];then
错误的写法: if [[ "$cpuUsage" > 80 ]] || [[ "$diskUsage" > 40 ]] || [[ "$mem_used_persent" > 80 ]];then
这种变成了字符串判定
2、告警方法
我这里实现的通过http方式告警,这里可以根据具体情况选择。比如选择企业微信告警。 我这里是选择了自己的业务接口,去触发邮箱告警
3、告警JSON变量替换
(1)邮件正文
email_text="<h2><strong>【XX服务器告警】</strong></h2> <p><br></p><p><br></p>CPU使用率:${cpuUsage}% 磁盘使用率:${diskUsage}% 内存使用率:${mem_used_persent}%"
(2)完整调用JSON拼装
email_body="{\"receivers\":[\"test1@qq.com\",\"test2@qq.com\",\"test3@qq.cn\"],\"subject\":\"服务器监控\",\"text\":\"${email_text}\"}"
(3)发起POST调用,传入json报文
curl -X POST --data "${email_body}" https://****/email/simpleSend -H 'Content-Type: application/json'
三、配置定时任务
crontab -e 编辑
crontab -l 查看定时任务
配置5分钟调用一次:
0 0/5 * * * ? /test/jiankong.sh
注意: jiankong.sh脚本,需要改为可执行权限
chmod +x jiankong.sh