Linux内存监控脚本并企微通知

1. 设置通知企业微信机器人

首先,确保你有企业微信机器人的 Webhook URL。以下是一个示例脚本,用于检查磁盘使用情况,并在超过阈值时发送通知。

脚本内容

创建一个新的脚本文件 /root/check_memory.sh:

监控单一目录(下面有提供监控所有目录的脚本)

#!/bin/bash

# 设置环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

maxUse=90    # 磁盘最大使用率,超过90%报警
wxWorkKey=*** # 企业微信机器人key

# 获取主机名和IP地址
hostname=$(hostname)
ip_address=$(hostname -I | awk '{print $1}')

# 获取Docker overlay2目录的使用情况(此处可以根据自己需要变更目录)
disk="/var/lib/docker/overlay2"
usage=$(df -h "$disk" | awk 'NR==2{print $5}' | cut -d'%' -f1)

# 使用正则表达式提取整数部分
usage=$(echo "$usage" | grep -o '[0-9]\+')

echo "Docker overlay2 目录使用率: $usage%" >> /var/log/check_memory.log 2>&1

# 检查磁盘使用率是否超过阈值
if [ "$usage" -gt "$maxUse" ]; then
    # 磁盘空间满时,自动发送通知到企业微信
    curl -sS "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$wxWorkKey" \
        -H "Content-Type: application/json; charset=UTF-8" \
        -d "{\"msgtype\": \"text\",\"text\": {\"content\": \"主机 ${hostname} (${ip_address}) 的 Docker overlay2 目录使用率已达到 ${usage}%\"}}" >> /var/log/check_memory.log 2>&1 || echo "Failed to send message to WeCom." >> /var/log/check_memory.log 2>&1
fi

监控所有目录(可选)

#!/bin/bash

# 设置环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# 设置磁盘使用率阈值
maxUse=90
wxWorkKey="***" # 企业微信机器人key

# 获取主机名和IP地址
hostname=$(hostname)
ip_address=$(hostname -I | awk '{print $1}')

# 获取所有挂载点的使用情况
disk_usage=$(df -h | awk 'NR>1{print $6, $5}' | sed 's/%//')

# 初始化通知内容
notification="主机 ${hostname} (${ip_address}) 的以下挂载点使用率超过 ${maxUse}%:\n"

# 检查每个挂载点的使用情况
alert_triggered=0
while read -r line; do
    mount_point=$(echo $line | awk '{print $1}')
    usage=$(echo $line | awk '{print $2}')
    
    if [ "$usage" -gt "$maxUse" ]; then
        alert_triggered=1
        notification="${notification}${mount_point} 使用率: ${usage}%\n"
    fi
done <<< "$disk_usage"

# 记录并发送通知
echo -e "$notification" >> /var/log/check_memory.log 2>&1

if [ "$alert_triggered" -eq 1 ]; then
    curl -sS "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$wxWorkKey" \
        -H "Content-Type: application/json; charset=UTF-8" \
        -d "{\"msgtype\": \"text\",\"text\": {\"content\": \"$notification\"}}" >> /var/log/check_memory.log 2>&1 || echo "Failed to send message to WeCom." >> /var/log/check_memory.log 2>&1
fi

" >> /var/log/check_memory.log 2>&1 " 可去除,只是为了记录执行错误日志

2.设置脚本权限

确保脚本具有可执行权限:

sudo chmod +x /root/check_memory.sh

3.测试脚本

手动运行脚本,确保它能正常工作并写入日志:

sudo /root/check_memory.sh

检查日志文件 /var/log/check_memory.log,确认脚本输出正确(如果那段脚本已去除,这步可以不看):

cat /var/log/check_memory.log

4.设置定时任务

编辑 root 用户的 crontab 文件,以定期运行该脚本:

sudo crontab -e

添加以下行,以每天上午 9 点和下午 6 点运行脚本:

0 9,18 * * * /root/check_memory.sh

Cron表达式的格式如下:

┌───────────── 分 (0 - 59)
│ ┌───────────── 时 (0 - 23)
│ │ ┌───────────── 日 (1 - 31)
│ │ │ ┌───────────── 月 (1 - 12)
│ │ │ │ ┌───────────── 星期几 (0 - 7) (星期天为 0 或 7)
│ │ │ │ │
│ │ │ │ │
* * * * *

你也可以通过查看crontab文件来确认设置是否成功:

sudo crontab -l

4.1 检查并启动Cron服务(可选)

首先确认你的系统是使用 cron 还是 crond:

  1. 对于大多数基于Debian的系统(如Ubuntu),cron守护进程通常叫做 cron
  2. 对于基于RedHat的系统(如CentOS、Fedora),cron守护进程通常叫做 crond。

对于Debian/Ubuntu系统:
检查cron服务状态:

 sudo systemctl status cron

你应该看到类似以下的输出,表示 cron 正在运行:

● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since ...

启动cron服务:

sudo systemctl start cron

对于RedHat/CentOS系统: 就是把上面的cron 改成 crond

5.执行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值