本文目录导读:

我来为您提供几种常见的主机状态监控脚本,涵盖不同的监控需求:
基础系统资源监控脚本
#!/bin/bash
# 系统资源监控脚本
# 监控CPU、内存、磁盘、网络等基本信息
echo "========== 主机状态监控报告 =========="
echo "监控时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "主机名: $(hostname)"
echo "----------------------------------------"
# CPU使用率
echo "CPU使用率:"
top -bn1 | grep "Cpu(s)" | awk '{print " 用户态: "$2"% 系统态: "$4"% 空闲: "$8"%"}'
# 内存使用情况
echo -e "\n内存使用情况:"
free -h | grep -E "^Mem|^内存" | awk '{print " 总计: "$2" 已用: "$3" 可用: "$4" 使用率: "$3/$2}'
# 磁盘使用情况
echo -e "\n磁盘使用情况:"
df -h | grep -E "^/dev/" | awk '{print " "$1": 总计"$2" 已用"$3" 可用"$4" 使用率"$5}'
# 网络连接状态
echo -e "\n网络连接状态:"
echo " 活动连接数: $(ss -t | wc -l)"
echo " IP地址: $(ip addr show | grep 'inet ' | grep -v 127.0.0.1 | awk '{print $2}')"
# 系统负载
echo -e "\n系统负载:"
uptime | awk -F'load average:' '{print " "$2}'
# 进程数
echo -e "\n运行进程数:"
ps aux | wc -l
高级监控脚本(带报警功能)
#!/bin/bash
# 高级主机监控脚本
# 支持阈值告警,可配置监控项
# 配置阈值
CPU_THRESHOLD=80
MEM_THRESHOLD=80
DISK_THRESHOLD=90
UPTIME_THRESHOLD=30 # 天
# 日志文件
LOG_FILE="/var/log/host_monitor.log"
# 告警函数
alert() {
local level=$1
local message=$2
echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$level] $message" >> $LOG_FILE
# 可选:发送邮件或消息通知
# mail -s "主机告警" admin@example.com <<< "$message"
}
# CPU监控
check_cpu() {
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'.' -f1)
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
alert "WARNING" "CPU使用率过高: ${CPU_USAGE}% (阈值: ${CPU_THRESHOLD}%)"
return 1
fi
return 0
}
# 内存监控
check_memory() {
MEM_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
alert "WARNING" "内存使用率过高: ${MEM_USAGE}% (阈值: ${MEM_THRESHOLD}%)"
return 1
fi
return 0
}
# 磁盘监控
check_disk() {
df -h | grep -E "^/dev/" | while read line; do
DISK_USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
DISK_NAME=$(echo $line | awk '{print $1}')
if [ "$DISK_USAGE" -gt "$DISK_THRESHOLD" ]; then
alert "WARNING" "磁盘 ${DISK_NAME} 使用率过高: ${DISK_USAGE}% (阈值: ${DISK_THRESHOLD}%)"
fi
done
}
# 系统运行时间监控
check_uptime() {
UPTIME_DAYS=$(uptime | awk '{print $3}' | cut -d',' -f1)
if [ "$UPTIME_DAYS" -gt "$UPTIME_THRESHOLD" ]; then
alert "INFO" "系统已运行 ${UPTIME_DAYS} 天,建议重启"
fi
}
# 主函数
main() {
echo "开始监控主机状态..."
check_cpu
check_memory
check_disk
check_uptime
echo "监控完成,详细信息在 $LOG_FILE"
}
main
实时监控脚本(带图表输出)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import psutil
import time
import sys
from datetime import datetime
class HostMonitor:
def __init__(self):
self.cpu_history = []
self.mem_history = []
def get_cpu_usage(self):
return psutil.cpu_percent(interval=1)
def get_memory_usage(self):
mem = psutil.virtual_memory()
return mem.percent
def get_disk_usage(self):
"""返回磁盘使用率超过80%的分区"""
alerts = []
for partition in psutil.disk_partitions():
try:
usage = psutil.disk_usage(partition.mountpoint)
if usage.percent > 80:
alerts.append(f"{partition.device}: {usage.percent}%")
except:
continue
return alerts
def get_network_stats(self):
net = psutil.net_io_counters()
return {
'bytes_sent': net.bytes_sent,
'bytes_recv': net.bytes_recv,
'packets_sent': net.packets_sent,
'packets_recv': net.packets_recv
}
def get_process_count(self):
return len(psutil.pids())
def display_status(self):
cpu = self.get_cpu_usage()
mem = self.get_memory_usage()
disk_alerts = self.get_disk_usage()
processes = self.get_process_count()
# 清屏
print("\033[2J\033[H")
print(f"=== 主机监控面板 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} ===")
# CPU使用率显示
cpu_bar = '█' * int(cpu/10) + '░' * (10 - int(cpu/10))
print(f"\nCPU使用率: [{cpu_bar}] {cpu:.1f}%")
# 内存使用率显示
mem_bar = '█' * int(mem/10) + '░' * (10 - int(mem/10))
print(f"内存使用率: [{mem_bar}] {mem:.1f}%")
# 磁盘告警
if disk_alerts:
print("\n磁盘告警:")
for alert in disk_alerts:
print(f" ⚠ {alert}")
# 进程数
print(f"\n运行进程数: {processes}")
# 网络统计
net = self.get_network_stats()
print(f"网络流量: 发送 {self.format_bytes(net['bytes_sent'])} | 接收 {self.format_bytes(net['bytes_recv'])}")
def format_bytes(self, bytes):
for unit in ['B', 'KB', 'MB', 'GB']:
if bytes < 1024:
return f"{bytes:.2f}{unit}"
bytes /= 1024
return f"{bytes:.2f}TB"
def main():
# pip install psutil
monitor = HostMonitor()
try:
while True:
monitor.display_status()
time.sleep(2)
except KeyboardInterrupt:
print("\n监控已停止")
if __name__ == "__main__":
main()
使用方式
安装依赖
# Python版本需要安装psutil pip install psutil # 或使用pip3 pip3 install psutil
设置定时任务
# 每分钟运行一次监控 */1 * * * * /path/to/monitor.sh # 每5分钟运行一次 */5 * * * * /path/to/monitor.sh
赋予执行权限
chmod +x monitor.sh chmod +x monitor.py
监控指标说明
| 监控项 | 说明 | 告警阈值建议 |
|---|---|---|
| CPU使用率 | 当前CPU占用百分比 | >80% |
| 内存使用率 | 物理内存使用率 | >80% |
| 磁盘使用率 | 各分区使用情况 | >90% |
| 网络连接 | 活动连接数 | 根据业务确定 |
| 系统负载 | 过去1/5/15分钟负载 | 小于CPU核数 |
| 运行时间 | 系统已运行天数 | >30天 |
这些脚本可以根据您的具体需求进行修改和扩展,建议先在实际环境中测试,确认无误后再部署到生产环境。