CentOS 上 LNMP 状态监控实操指南
一 系统与服务状态快速检查
sudo systemctl status nginxsudo systemctl status mysqld(或 mariadb)sudo systemctl status php-fpmss -tulnp | egrep ':(80|443|3306|9000)'ps aux | egrep 'nginx|mysqld|php-fpm'sudo nginx -ttail -f /var/log/nginx/error.log、tail -f /var/log/mysqld.log、tail -f /var/log/php-fpm/error.logtop/htop、free -h、df -h、iostat -x 1、vmstat 1二 组件级关键指标与常用命令
| 组件 | 关键指标 | 常用命令或路径 |
|---|---|---|
| Nginx | 连接数、请求数、请求耗时、状态码分布 | 启用模块:ngx_http_stub_status_module,配置 location /status { stub_status; } 后访问;日志:/var/log/nginx/access.log、/var/log/nginx/error.log |
| MySQL/MariaDB | 连接数、线程、查询吞吐、慢查询 | mysqladmin -u root -p status、SHOW STATUS;、SHOW PROCESSLIST;、SHOW VARIABLES LIKE 'slow_query_log%';,慢查询分析:pt-query-digest /var/log/mysql/slow.log |
| PHP-FPM | 进程池状态、排队、慢请求 | sudo systemctl status php-fpm、pm.status_path(如 /status)、slowlog、request_terminate_timeout,日志:/var/log/php-fpm/error.log |
| 系统 | CPU、内存、磁盘 IO、网络 | top/htop、free -h、iostat -x 1、vmstat 1、ss -s、df -h |
| 以上指标与方法可定位连接瓶颈、慢查询、进程异常与资源紧张等常见问题。 |
三 日志与慢查询分析
tail -f /var/log/nginx/error.logawk/goaccess 做状态码、URL、UA、耗时等分析SHOW VARIABLES LIKE 'slow_query_log%';pt-query-digest /var/log/mysql/slow.log,找出 Top SQL、扫描行数、执行计划问题www.conf 中配置 slowlog 与 request_slowlog_timeout),结合 tail -f 观察长耗时请求与异常堆栈四 第三方监控与告警方案
五 一键巡检脚本示例
#!/usr/bin/env bash
set -e
echo "=== 服务状态 ==="
systemctl is-active --quiet nginx && echo "Nginx: active" || echo "Nginx: inactive"
systemctl is-active --quiet mysqld && echo "MySQL: active" || echo "MySQL: inactive"
systemctl is-active --quiet php-fpm && echo "PHP-FPM: active" || echo "PHP-FPM: inactive"
echo -e "\n=== 端口监听 ==="
ss -tulnp | egrep ':(80|443|3306|9000)' || echo "未检测到关键端口监听"
echo -e "\n=== Nginx 配置与错误 ==="
sudo nginx -t && echo "Nginx 配置 OK" || echo "Nginx 配置 ERROR"
tail -n20 /var/log/nginx/error.log | sed 's/^/Nginx: /'
echo -e "\n=== MySQL 状态与慢查询 ==="
mysqladmin --connect-timeout=5 -u root -p status 2>/dev/null && echo "MySQL ping OK" || echo "MySQL ping FAILED"
mysql -u root -p -e "SHOW STATUS LIKE 'Threads_connected';" 2>/dev/null || echo "MySQL 查询失败"
[ -f /var/log/mysql/slow.log ] && echo "慢查询样例:" && tail -n20 /var/log/mysql/slow.log | sed 's/^/MySQL Slow: /' || echo "未找到慢查询日志"
echo -e "\n=== PHP-FPM 状态 ==="
sudo systemctl status php-fpm --no-pager | head -20
tail -n20 /var/log/php-fpm/error.log | sed 's/^/PHP-FPM: /'
echo -e "\n=== 系统资源 ==="
free -h | head -2
df -h | head -2
iostat -x 1 2 | tail -n +4 | head -10
将脚本加入 crontab(如每 5 分钟)并结合企业微信/钉钉 Webhook 或邮件网关实现自动告警,可显著提升故障发现速度。