您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Linux中用于监控的简易shell脚本怎么写
## 前言
在Linux系统管理中,监控系统资源是日常运维的重要工作。通过编写简易的shell脚本,我们可以自动化完成CPU、内存、磁盘等关键指标的监控。本文将详细介绍如何编写实用的监控脚本,并解释关键代码的实现原理。
## 一、基础监控脚本框架
### 1.1 脚本基本结构
每个shell脚本都应包含以下基本元素:
```bash
#!/bin/bash
# 脚本描述:基础系统监控脚本
# 作者:YourName
# 日期:$(date +%Y-%m-%d)
# 定义日志文件路径
LOG_FILE="/var/log/system_monitor.log"
创建脚本后需要赋予执行权限:
chmod +x monitor_script.sh
get_cpu_usage() {
local cpu_usage=$(top -bn1 | grep "Cpu(s)" | \
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
awk '{print 100 - $1}')
echo "CPU使用率: ${cpu_usage}%"
# 预警检查(阈值80%)
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo "[警告] CPU使用率超过80%!" >> $LOG_FILE
fi
}
对于多核系统,可以监控每个核心:
get_cpu_cores() {
local cores=$(grep -c ^processor /proc/cpuinfo)
echo "CPU核心数: $cores"
# 显示每个核心的负载
mpstat -P ALL 1 1 | awk '/Average:/ && $2 ~ /[0-9]/ {print "核心"$2": "$3"%"}'
}
get_mem_info() {
free -m | awk 'NR==2{printf "内存使用: %s/%sMB (%.2f%%)\n",
$3,$2,$3*100/$2 }'
# 缓存和缓冲区分显示
free -m | awk 'NR==3{printf "缓存/缓冲区: %sMB\n", $3}'
}
get_swap_info() {
local swap_usage=$(free -m | awk 'NR==4{print $3/$2*100}')
echo "Swap使用率: ${swap_usage}%"
if (( $(echo "$swap_usage > 30" | bc -l) )); then
echo "[警告] Swap使用过高!" >> $LOG_FILE
fi
}
get_disk_usage() {
df -h | awk '$NF=="/"{printf "根分区: %d/%dGB (%s)\n",
$3,$2,$5}'
}
监控所有挂载点:
check_all_disks() {
echo "===== 磁盘使用情况 ====="
df -h | grep -v tmpfs | \
awk 'NR>1{print $6" 已用: "$3" 可用: "$4" ("$5")"}'
# 检查超过90%的分区
df -h | awk 'NR>1 && $5 ~ /[0-9]/ {gsub(/%/,"",$5);
if($5>90) print "[紧急] "$6" 使用率"$5"%"}' >> $LOG_FILE
}
get_connections() {
local total_conn=$(netstat -ant | wc -l)
local established=$(netstat -ant | grep ESTABLISHED | wc -l)
echo "总连接数: $total_conn (ESTABLISHED: $established)"
}
check_listen_ports() {
echo "监听端口:"
ss -tulnp | awk 'NR>1{print $5}' | cut -d':' -f2 | sort -nu
}
log_to_file() {
local timestamp=$(date "+%Y-%m-%d %H:%M:%S")
echo "[$timestamp] $1" >> $LOG_FILE
}
需要先安装mailutils:
send_alert() {
local subject="[ALERT] $1"
local body="$2"
echo "$body" | mail -s "$subject" admin@example.com
}
#!/bin/bash
# 系统综合监控脚本
LOG_FILE="/var/log/system_monitor_$(date +%Y%m%d).log"
THRESHOLD_CPU=80
THRESHOLD_MEM=85
THRESHOLD_DISK=90
# 初始化日志
init_log() {
echo "=== 系统监控开始 $(date) ===" > $LOG_FILE
}
# 主监控函数
main_monitor() {
echo -e "\n===== $(date) ====="
# 调用各监控函数
get_cpu_usage
get_cpu_cores
get_mem_info
get_swap_info
check_all_disks
get_connections
# 记录到日志
log_to_file "监控周期完成"
}
# 执行监控
init_log
while true; do
main_monitor
sleep 300 # 5分钟间隔
done
check_process() {
if ! pgrep -x "$1" >/dev/null; then
echo "[错误] 进程 $1 未运行!" >> $LOG_FILE
fi
}
# 每10分钟运行一次
*/10 * * * * /path/to/monitor_script.sh
可视化展示:将日志数据导入Prometheus+Grafana
添加HTML报告:使用awk生成HTML格式报告
通过本文介绍的shell脚本编写方法,您可以构建一个轻量级的Linux系统监控方案。实际应用中,建议根据具体需求调整监控阈值和检查频率。对于更复杂的监控需求,可以考虑使用专业的监控工具如Zabbix或Nagios。
提示:所有脚本应在测试环境验证后再投入生产环境使用 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。