首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Ubuntu服务器性能监控及邮件报警

Ubuntu服务器性能监控及邮件报警

作者头像
全栈开发日记
发布2024-11-23 09:55:44
发布2024-11-23 09:55:44
7033
举报
文章被收录于专栏:全栈开发日记全栈开发日记

搭建邮件发送服务

安装mailutils

代码语言:javascript
复制
apt update
apt install mailutils -y

在安装mailutils的过程中,同时会自动安装Postfix,在弹出的配置页面中选择No configuraiton

安装ssmtp并配置

代码语言:javascript
复制
apt install ssmtp
代码语言:javascript
复制
vim /etc/ssmtp/ssmtp.conf
----------------------------------
# 添加以下内容
root=username@163.com
mailhub=smtp.163.com:465
AuthUser=username@163.com
AuthPass=xxxxxxxx # 这个密码不是邮箱的密码,而是网易邮箱的授权码
UseTLS=Yes
----------------------------------

vim /etc/ssmtp/revaliases
----------------------------------
# 添加以下语句
root:username@163.com:smtp.163.com:465 # root是当前用户名
----------------------------------

测试邮件发送

代码语言:javascript
复制
echo "test" | mail -s "test" xxxxxxx@qq.com

编写监控脚本

CPU占用率监控

代码语言:javascript
复制
#!/bin/bash

# 设置CPU占用率阈值(如80%)
THRESHOLD=80
# 设置接收报警的多个邮箱地址(用逗号分隔)
EMAILS="xxxxxxx@163.com,xxxxxxx@qq.com"

# 获取当前时间
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')

# 获取CPU当前的总占用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
echo "$CURRENT_TIME - 当前CPU使用率:$CPU_USAGE%"

# 判断CPU使用率是否超过阈值
if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) )); then
    echo "$CURRENT_TIME - CPU 使用率超过阈值($THRESHOLD%),当前使用率:$CPU_USAGE%" | mail -s "CPU 使用率报警" $EMAILS
    echo "$CURRENT_TIME - 报警邮件已发送至 $EMAILS"
fi

添加执行权限

代码语言:javascript
复制
chmod +x cpu_monitor.sh

配置crontab,每分钟执行一次

代码语言:javascript
复制
* * * * * /path/cpu_monitor.sh >> /path/cpu_monitor.log 2>&1

内存使用率监控

代码语言:javascript
复制
#!/bin/bash

# 设置内存使用率阈值(如9%)
MEMORY_THRESHOLD=90
# 设置接收报警的多个邮箱地址(用逗号分隔)
EMAILS="xxxxxxx@163.com"

# 获取当前时间
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')

# 获取内存的总占用率
MEMORY_USAGE=$(free | grep Mem | awk '{printf("%.2f"), $3/$2 * 100.0}')
echo "$CURRENT_TIME - 当前内存使用率:$MEMORY_USAGE%"

# 判断内存使用率是否超过阈值
if (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )); then
    echo "$CURRENT_TIME - 内存使用率超过阈值($MEMORY_THRESHOLD%),当前使用率:$MEMORY_USAGE%" | mail -s "内存使用率报警" $EMAILS
    echo "$CURRENT_TIME - 内存报警邮件已发送至 $EMAILS"
fi

添加执行权限

代码语言:javascript
复制
chmod +x memory_monitor.sh

配置crontab,每5分钟执行一次

代码语言:javascript
复制
*/5 * * * * /path/memory_monitor.sh >> /path/memory_monitor.log 2>&1

磁盘空间使用率监控

代码语言:javascript
复制
#!/bin/bash

# 设置磁盘空间使用率阈值(如90%)
DISK_THRESHOLD=95
# 设置接收报警的多个邮箱地址(用逗号分隔)
EMAILS="xxxxxxxxxxxx@163.com"
# 设置需要监控的磁盘分区,例如"/"
DISK_PARTITION="/"

# 获取当前时间
CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S')

# 获取指定分区的磁盘使用率
DISK_USAGE=$(df -h "$DISK_PARTITION" | awk 'NR==2 {print $5}' | sed 's/%//')
echo "$CURRENT_TIME - $DISK_PARTITION 分区当前使用率:$DISK_USAGE%"

# 判断磁盘使用率是否超过阈值
if (( DISK_USAGE > DISK_THRESHOLD )); then
    echo "$CURRENT_TIME - $DISK_PARTITION 分区使用率超过阈值($DISK_THRESHOLD%),当前使用率:$DISK_USAGE%" | mail -s "磁盘空间使用率报警" $EMAILS
    echo "$CURRENT_TIME - 磁盘空间报警邮件已发送至 $EMAILS"
fi

添加执行权限

代码语言:javascript
复制
chmod +x disk_monitor.sh

配置crontab,每小时执行一次

代码语言:javascript
复制
0 * * * * /path/disk_monitor.sh >> /path/disk_monitor.log 2>&1
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-11,如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 搭建邮件发送服务
    • 安装mailutils
    • 安装ssmtp并配置
    • 测试邮件发送
  • 编写监控脚本
    • CPU占用率监控
    • 内存使用率监控
    • 磁盘空间使用率监控
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档