linux自动化内存监控与告警

发布于:2024-07-11 ⋅ 阅读:(26) ⋅ 点赞:(0)


前言

在当今数字化与网络化日益普及的时代,系统管理与维护成为了确保业务连续性和数据安全的关键环节。其中,监控系统的健康状况与性能表现是必不可少的一环。本文档旨在介绍一个实用的bash脚本,该脚本能够实时监控系统的内存使用情况,并在内存使用率超过预设阈值时,自动发送警告邮件给系统管理员。通过这种自动化监控机制,可以及时发现内存使用问题,避免系统性能的下降或崩溃,从而保障业务的平稳运行。


一、脚本实现

1. shell脚本实现

#!/bin/bash

# 配置
THRESHOLD=85        # 内存使用率阈值(%)
MAIL_TO="your-email@example.com"   # 接收邮件的地址

# 检查内存使用率是否超过了阈值
MEMORY_USAGE=$(free | awk 'NR==2{printf "%.2f\n", $3*100/$2 }')
if (( $(echo "$MEMORY_USAGE > $THRESHOLD" | bc -l) )); then
    # 找出占用空间较大的目录
    LARGE_DIRS=$(du -ah --exclude='/proc' / | sort -hr | head -n 10)
    # 获取主机的ip地址
    ip_addr=$(ip addr | grep 'inet ' | awk '{print $2}'| tail -n 1 | grep -oP '\d+\.\d+\.\d+\.\d+')
    # 构建邮件内容
    MESSAGE="主机名:$(hostname)\n主机IP:$ip_addr\n\n目前内存使用已经超过:$THRESHOLD%\n目前内存使用率为:$MEMORY_USAGE%\n\n占用内存最多的前10条数据是:\n$LARGE_DIRS"
    # 发送邮件
    echo -e "$MESSAGE" | mail -s "内存使用阈值警告" $MAIL_TO
    echo '邮件发送成功'
fi

exit 0

把这个脚本保存为/opt/monitor/memory_monitor.sh文件,并添加执行权限。

chmod a+x /opt/monitor/memory_monitor.sh

2. 脚本功能概览

  • 内存使用率监控:脚本通过/proc/meminfo文件获取系统内存的总使用情况,计算当前内存使用率,并与预先设定的阈值(例如85%)进行比较。
  • 发送警告邮件:当内存使用率超过阈值时,脚本会自动查找系统中占用空间较大的目录,并获取主机的IP地址。然后,构建包含主机名、IP地址、当前内存使用率以及占用内存最多的前10个目录的邮件内容,通过mail命令发送给指定的邮箱地址。
  • 自动化与便捷性:通过将此脚本集成到系统任务调度中(如通过cron任务),可以实现定期监控与即时响应,极大地提高了系统管理的效率与响应速度。

二、设置定时执行

1. 编辑cron任务表

crontab -e

2. 设置定时任务

设置每天9点执行/opt/monitor/memory_monitor.sh脚本

0 9 * * * /opt/monitor/memory_monitor.sh

这样设置后每天9点都会执行/opt/monitor/memory_monitor.sh脚本,如果检测到内存使用超过设置阈值就会发邮件通知。


三、通知结果示例

通知结果示例如下。

在这里插入图片描述


总结

通过上述步骤,你可以轻松地在自己的服务器上设置内存监控和告警。这将帮助你在系统面临压力时迅速采取行动,防止潜在的问题升级为严重的故障。