Linux系统管理员的职责重大,需要实时的监控服务器、用户、日志、创建备份等,执行重复性的任务时会选择编写脚本来自动执行日常工作,今天和大家分享一个可用于提供关于系统、网络、用户、负载、RAM、主机、内部IP、外部IP、正常运行时间等信息的shell脚本。可以定期收集这些数据并将其输出到日志文件或显示在终端上。
示例:#!/bin/bash
# 日志文件路径
LOGFILE="/var/log/system_monitor.log"
# 创建或清空日志文件
: > $LOGFILE
# 定义监控函数
monitor() {
# 获取当前日期和时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# 获取系统运行时间和负载
UPTIME=$(uptime -p)
LOAD=$(uptime | awk -F'load average:' '{ print $2 }')
# 获取内存使用情况
MEM_TOTAL=$(free -m | awk '/^Mem:/{print $2}')
MEM_USED=$(free -m | awk '/^Mem:/{print $3}')
MEM_FREE=$(free -m | awk '/^Mem:/{print $4}')
# 获取磁盘使用情况
DISK_USAGE=$(df -h | grep '^/dev/' | awk '{ print $1 ": " $5 " used" }')
# 获取网络流量
NETWORK=$(ifconfig | awk '/RX packets/{print $1 " " $2 " " $3} /TX packets/{print $1 " " $2 " " $3}')
# 将收集到的数据写入日志文件
echo "[$TIMESTAMP]" >> $LOGFILE
echo "Uptime: $UPTIME" >> $LOGFILE
echo "Load Average: $LOAD" >> $LOGFILE
echo "Memory Usage: Total: ${MEM_TOTAL}MB, Used: ${MEM_USED}MB, Free: ${MEM_FREE}MB" >> $LOGFILE
echo "Disk Usage: $DISK_USAGE" >> $LOGFILE
echo "Network Traffic: $NETWORK" >> $LOGFILE
echo "----------------------------------------" >> $LOGFILE
}
# 循环监控并记录
while true; do
monitor
sleep 60
done
其中日志文件路径: LOGFILE 变量指定日志文件的位置,你可以根据需要更改。
monitor 函数: 收集系统指标并将其记录到日志文件中。
uptime 命令获取系统运行时间和负载。
free 命令获取内存使用情况。
df 命令获取磁盘使用情况。
ifconfig 命令获取网络流量(可以替换为 ip 命令以适应新的网络配置工具)。
循环监控并记录: while true 循环每隔 60 秒执行一次 monitor 函数。
可以直接把上述脚本存为一个文件,如system_monitor.sh。赋予可执行权限:
chmod +x system_monitor.sh
运行该脚本sudo ./system_monitor.sh
该脚本需要使用者具有root权限可以访问某些系统信息和网络流量统计信息。确保日志文件路径有写权限。可以修改sleep 60来调整监控间隔。以上脚本可以用于CentOS8上监控网络、磁盘、运行时间、负载和RAM,并且把这些信息都记录在日志文件中,便于后期分析。更多内容请关注华纳云!