在Ubuntu LNMP(Linux, Nginx, MySQL, PHP)环境中监控服务器状态是确保系统稳定性和性能优化的关键步骤。以下是一些常用的监控工具和方法,可以帮助你有效地监控服务器状态:
常用监控工具
- top 和 htop:实时查看系统的资源占用情况,top是Linux默认安装的命令行工具,htop是其增强版本,提供更友好的交互界面。
- vmstat 和 free:用于查看系统虚拟内存、进程、I/O、CPU等性能的统计信息。free主要用于查看内存使用情况。
- iostat:监控CPU的使用率和磁盘I/O性能,帮助诊断磁盘性能问题。
- df 和 du:显示文件系统的磁盘空间使用情况,du用于显示指定目录的磁盘使用情况。
- netstat 和 ss:网络监控工具,分别用于查看网络连接、监听端口等信息。
- systemd 日志监控:使用journalctl命令查看系统日志,检查系统异常。
- nmon:一个综合性能监控工具,可以同时查看CPU、内存、磁盘和网络的性能指标。
- Prometheus 和 Grafana:用于收集和存储时间序列数据,并进行可视化监控。
- Netdata:一个开源的实时系统监控工具,提供直观的图表展示。
- Nagios 和 Zabbix:广泛使用的开源监控系统,支持自定义报警规则等功能。
- Munin:一个轻量级的监控系统,提供图表展示。
监控脚本示例
- CPU占用率监控:
#!/bin/bash THRESHOLD=80 EMAILS="xxxxxxx@163.com,xxxxxxx@qq.com" CURRENT_TIME=$(date '+%Y-%m-%d %H:%M:%S') CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}') echo "$CURRENT_TIME - 当前CPU使用率:$CPU_USAGE%" if (( $(echo "$CPU_USAGE > $THRESHOLD" | bc -l) ));then echo "$CURRENT_TIME - CPU 使用率超过阈值($THRESHOLD%),当前使用率:$CPU_USAGE%" | mail -s "CPU 使用率报警" $EMAILS echo "$CURRENT_TIME - 报警邮件已发送至 $EMAILS" fi
- 内存使用率监控:
#!/bin/bash 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
- 磁盘空间使用率监控:
#!/bin/bash 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_USAGE%" if (( $(echo "$DISK_USAGE > $DISK_THRESHOLD" | bc -l) ));then echo "$CURRENT_TIME - 磁盘空间使用率超过阈值($DISK_THRESHOLD%),当前使用率:$DISK_USAGE%" | mail -s "磁盘空间使用率报警" $EMAILS echo "$CURRENT_TIME - 报警邮件已发送至 $EMAILS" fi
通过上述工具和方法,你可以有效地监控Ubuntu LNMP服务器的状态,确保服务器的正常运行并及时发现潜在问题。