Bash 语言 如何进行系统负载监控

Bash阿木 发布于 2025-06-13 11 次阅读


Bash脚本实现系统负载监控

系统负载监控是系统管理员日常工作中非常重要的一部分。通过监控系统的负载情况,管理员可以及时发现系统资源使用情况,预防系统过载,保证系统稳定运行。本文将介绍如何使用Bash语言编写脚本,实现系统负载的监控。

系统负载概述

系统负载是指系统在单位时间内处理请求的能力。在Linux系统中,系统负载通常包括以下三个指标:

1. CPU负载:表示CPU在单位时间内的工作负载情况,通常以1分钟、5分钟、15分钟的平均负载值表示。
2. 内存负载:表示系统内存的使用情况,包括已使用内存、可用内存、交换空间使用情况等。
3. 磁盘IO负载:表示磁盘的读写操作情况,包括读写速度、读写次数等。

Bash脚本编写

以下是一个简单的Bash脚本,用于监控系统负载:

bash
!/bin/bash

获取CPU负载
cpu_load=$(uptime | awk '{print $10}' | cut -d ',' -f 1)

获取内存使用情况
memory_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3100/$2 }')

获取磁盘IO负载
disk_io=$(iostat -dx 1 1 | awk 'NR==3{print $14}')

输出监控结果
echo "CPU Load: $cpu_load"
echo "Memory Usage: $memory_usage"
echo "Disk IO: $disk_io"

脚本解析

1. 获取CPU负载:使用`uptime`命令获取系统运行时间,然后通过`awk`命令提取CPU负载值。
2. 获取内存使用情况:使用`free -m`命令获取内存使用情况,然后通过`awk`命令计算内存使用百分比。
3. 获取磁盘IO负载:使用`iostat -dx 1 1`命令获取磁盘IO负载,然后通过`awk`命令提取磁盘IO负载值。

定时任务

为了实现实时监控,我们可以将上述脚本添加到定时任务中。以下是一个示例:

bash
编辑定时任务
crontab -e

添加以下行,每5分钟执行一次脚本
/5 /path/to/your/script.sh

高级功能

实时图形化监控

为了更直观地展示系统负载,我们可以使用`gnuplot`等工具将监控数据绘制成图形。以下是一个示例:

bash
!/bin/bash

获取CPU负载
cpu_load=$(uptime | awk '{print $10}' | cut -d ',' -f 1)

获取内存使用情况
memory_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3100/$2 }')

获取磁盘IO负载
disk_io=$(iostat -dx 1 1 | awk 'NR==3{print $14}')

将数据写入文件
echo "$cpu_load $memory_usage $disk_io" >> /path/to/your/data.txt

使用gnuplot绘制图形
gnuplot -e "set terminal png; set output '/path/to/your/image.png'; plot '/path/to/your/data.txt' using 1 with lines title 'CPU Load', '' using 2 with lines title 'Memory Usage', '' using 3 with lines title 'Disk IO'"

邮件报警

当系统负载超过某个阈值时,我们可以通过邮件发送报警信息。以下是一个示例:

bash
!/bin/bash

获取CPU负载
cpu_load=$(uptime | awk '{print $10}' | cut -d ',' -f 1)

获取内存使用情况
memory_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3100/$2 }')

获取磁盘IO负载
disk_io=$(iostat -dx 1 1 | awk 'NR==3{print $14}')

判断是否超过阈值
if (( $(echo "$cpu_load > 5" | bc -l) )) || (( $(echo "$memory_usage > 80" | bc -l) )) || (( $(echo "$disk_io > 100" | bc -l) )); then
发送邮件报警
echo "System load is too high: CPU Load: $cpu_load, Memory Usage: $memory_usage, Disk IO: $disk_io" | mail -s "System Load Alert" admin@example.com
fi

总结

本文介绍了使用Bash语言编写脚本实现系统负载监控的方法。通过编写简单的脚本,我们可以实时监控系统负载,并根据实际情况进行报警。在实际应用中,可以根据需求对脚本进行扩展,实现更丰富的功能。