• 检测docker内存状态脚本


    国庆长假来临,IT们都在祈祷服务器和程序正常,安安心心过个假期吧。

    在这里插入图片描述
    首先配置mailx发送邮箱

    vim /etc/mail.rc
    
    • 1

    编辑mail.rc,在最底下加入几行配置(这里用的是腾讯企业邮箱)

    #邮箱地址
    set from=monster@sz-ysxd.com
    #发送服务器
    set smtp=smtps://smtp.exmail.qq.com:465
    #发送邮箱
    set smtp-auth-user=monster@sz-ysxd.com
    #邮箱认证码
    set smtp-auth-password=xxxx
    #忽略证书警告
    set ssl-verify=ignore
    #证书存放位置
    set nss-config-dir=/etc/pki/nssdb
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    发送邮件格式

    echo “我是内容” | mail -s “我是标题” monster@sz-ysxd.com
    
    • 1

    下面脚本思路:
    1.定时任务里面定时每十分钟执行一次此脚本,脚本后面跟随一条生成docker 容器状态并写入指定日志用来比较
    2.此脚本每10分钟运行的时候,获取当前的容器状态信息写入ram2.log
    3.loop用来判断是第几行的数据,循环读取docker 容器信息第7列也就是内存的数值
    4.拿现在的容器内吃数值和10分钟之前的数值比较,如果大于或等于之前的数值并且大于或等于70%就触发告警(如果10分钟之前内存使用率大于70%现在却降下去了便不告警,反之10分钟之前没有大于70%使用率,现在大于了也不告警等待10分钟后的对比。如果符合现在比10分钟之前大于或等于内存使用率,还得判断是否高于或等于70%,低于70%即可无视,高于便要考虑是否给容器加大资源了。)

    #!/bin/bash
    #内存使用率超过70%重启容器发送邮件告警
    Time=$(date +"%Y-%m-%d %T")
    #显示所有信息用来有邮箱告警查看
    docker stats --no-stream > /data/ram2.log
    loop=0
    #循环读取每个容器的百分值
    for line in `cat /data/ram.log | awk '{print (100*$7)}'`
    do
    loop=$(( $loop + 1 ))
    #断大于等于7000(70%)
    if [ `sed -n $loop'p' /data/ram2.log  | awk '{print (100*$7)}'` -ge "$line" -a "$line" -ge 7000 ]; then
    #如果大于70%发送邮件告警
            echo -e "【47.119.195.139:9529】有容器内存使用率达到70%,使用情况如下:\n-------------------------------------------------------------------------------------------------------------------------------------\n 【10分钟前的状态】\n  `sed -n $loop'p' /data/ram.log` \n 【现在的状态信息】 \n  `sed -n $loop'p' /data/ram2.log` \n-------------------------------------------------------------------------------------------------------------------------------------\n `docker ps | awk '{print $1,$2,$3}'`" | mail -s "S3监测告警[$Time]" it@sz-ysxd.com 2>/dev/null
    #exit
    fi
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    效果:
    S1
    在这里插入图片描述
    S2
    在这里插入图片描述
    S3
    在这里插入图片描述

    上面这种模式几乎每10分钟都会发送邮件告警,太频繁了,现在直接改成每秒都查询大于等于80%就告警
    改良版:
    1.使用nohub bash /data/miao1.sh &后台运行miao1.sh脚本,脚本会每秒都查询容器信息并写入miao1.log里面
    2.写入日志后,立马查询当前是否有容器内存使用率是否有到达80%
    3.需要注意查到有大于等于80%的容器需要把后台进程kill掉,不然大于80%后每秒都在发送邮件告警!!!

    在 /data 下面新建个miao1.sh 脚本

    while true; do docker stats --no-stream > /data/miao1.log ;bash /data/miao1mx.sh; sleep 1; done
    
    • 1

    miao1mx.sh脚本

    #!/bin/bash
    #每秒查询内存有无超过80%
    Time=$(date +"%Y-%m-%d %T")
    loop=0
    #循环读取每个容器的百分值
    for line in `cat /data/miao1.log | awk '{print (100*$7)}'`
    do
    loop=$(( $loop + 1 ))
    #判断大于等于8000(80%)
    if [ "$line" -ge 8000 ]; then
    #如果大于80%发送邮件告警
            echo -e "【47.119.195.139:9529】有容器内存使用率达到80%,使用情况如下:\n-------------------------------------------------------------------------------------------------------------------------------------\n  `sed -n $loop'p' /data/miao1.log` \n " | mail -s "S3监测告警[$Time]" it@sz-ysxd.com 2>/dev/null
    kill 23505
    fi
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
  • 相关阅读:
    JSP校园二手图书交易系统bbs用myeclipse定制开发mysql数据库BS模式java编程jdbc
    自动驾驶系(四)——环境感知之可行驶区域检测技术
    JMeter的详细使用及相关问题
    反射机制(草稿)
    卷麻了,00后测试用例写的比我还好,简直无地自容......
    高等数学(第七版)同济大学 习题9-5 个人解答
    【vue】使用computed时ts报错:Unexpected side effect in computed function.
    LLM基础
    树结构的模糊查询
    中国户外休闲家具及用品市场发展规划趋势及运营状况研究报告2022年版
  • 原文地址:https://blog.csdn.net/qq_42259469/article/details/127135614