LNMP(Linux+Nginx+MySQL+PHP)环境的系统监控可以通过多种工具和方法实现。以下是全面的监控方案:
top/htop
htop
提供更友好的界面和交互操作vmstat
vmstat 1
每秒显示一次系统状态iostat
iostat -x 1
监控磁盘I/O情况dstat
iftop
nload
netstat/ss
netstat -tulnp
查看端口监听情况ss -s
查看socket统计状态模块
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
http://server/nginx_status
获取基础状态日志分析
goaccess
实时分析访问日志awk '{print $1}' access.log | sort | uniq -c | sort -nr
统计IP访问mysqladmin
mysqladmin -u root -p extended-status
查看扩展状态mysqladmin -u root -p processlist
查看当前连接慢查询日志
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;
mysqldumpslow
分析慢查询php-fpm状态页
pm.status_path = /status
http://server/status?json
获取JSON格式状态opcache状态
opcache_get_status()
函数查看缓存状态Prometheus + Grafana
Zabbix
ELK Stack
#!/bin/bash
# 监控CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
# 监控内存使用
mem_usage=$(free -m | awk 'NR==2{printf "%.2f%%", $3*100/$2 }')
# 监控磁盘空间
disk_usage=$(df -h | awk '$NF=="/"{printf "%s", $5}')
# 监控MySQL状态
mysql_status=$(systemctl is-active mysql)
# 监控Nginx状态
nginx_status=$(systemctl is-active nginx)
# 输出结果
echo "CPU使用率: $cpu_usage%"
echo "内存使用率: $mem_usage"
echo "根分区使用率: $disk_usage"
echo "MySQL状态: $mysql_status"
echo "Nginx状态: $nginx_status"
crontab
定期执行监控脚本sendmail
或mutt
发送邮件telegram-send
发送到Telegram通过以上方案组合使用,可以全面监控LNMP系统的运行状态,及时发现并处理潜在问题。