CentOS LNMP环境监控报警方案设计
通过Linux系统自带的命令可快速查看LNMP核心组件的实时运行状态,适合临时排查问题:
systemctl status nginx查看Nginx服务是否运行;通过netstat -tulnp | grep nginx或ss -tulnp | grep nginx确认Nginx监听端口(默认80/443)。systemctl status mysqld查看MySQL服务状态;mysqladmin -uroot -p status获取MySQL运行统计(如连接数、查询数);show processlist;查看当前数据库连接及执行的SQL语句。systemctl status php-fpm查看PHP-FPM服务状态;netstat -tulnp | grep php-fpm确认PHP-FPM监听端口(默认9000);查看/var/log/php-fpm/error.log获取PHP错误日志。top/htop实时查看CPU、内存占用;vmstat 1 5每1秒采样1次,共5次,查看系统整体资源使用情况;iostat -x 1查看磁盘I/O负载;df -h查看磁盘空间使用情况。Zabbix是企业级开源监控解决方案,支持LNMP全栈监控(服务器、Nginx、MySQL、PHP-FPM),并提供可视化与报警功能。
Prometheus是开源时间序列数据库,Grafana是可视化工具,组合可实现高性能监控与美观的仪表盘。
prometheus.yml文件,添加上述exporter作为抓取目标;通过Grafana导入Nginx、MySQL、PHP-FPM的预置仪表盘,可视化展示指标(如Nginx的请求速率、MySQL的慢查询数)。alertmanager组件,配置报警规则(如Nginx 5xx错误率超过5%、MySQL慢查询超过10条/分钟),触发后通过邮件、Slack或PagerDuty发送通知。Nagios是经典开源监控系统,适合传统环境,通过插件扩展监控能力。
check_http、检查MySQL状态的check_mysql),将命令添加到主机配置中,实现定期检查。ELK是开源日志管理平台,可集中收集、分析LNMP日志(Nginx、MySQL、PHP),并通过Kibana设置日志报警。
input插件(如file插件读取Nginx的access.log、error.log),filter插件(如grok解析日志格式),output插件(存储到Elasticsearch)。nginx-*、mysql-*),查看日志趋势(如Nginx请求量、MySQL慢查询数)。通过Shell脚本定期检查LNMP服务状态与日志,结合邮件工具发送报警,适合简单场景。
/usr/local/bin/check_nginx.sh):#!/bin/bash
if ! systemctl is-active --quiet nginx; then
echo "Nginx service is down!" | mailx -s "Nginx Alert" admin@example.com
fi
/usr/local/bin/check_nginx_error.sh):#!/bin/bash
ERROR_COUNT=$(grep -i "error" /var/log/nginx/error.log | wc -l)
if [ $ERROR_COUNT -gt 10 ]; then
echo "Nginx error log count exceeds threshold: $ERROR_COUNT" | mailx -s "Nginx Error Alert" admin@example.com
fi
crontab -e添加定时任务,每5分钟运行一次检查脚本:*/5 * * * * /usr/local/bin/check_nginx.sh
*/5 * * * * /usr/local/bin/check_nginx_error.sh
mailx,编辑/etc/mail.rc添加SMTP服务器信息(如QQ邮箱):set smtp=smtp.qq.com
set smtp-auth=login
set smtp-auth-user=your_email@qq.com
set smtp-auth-password=your_password
set from=your_email@qq.com
通过rsyslog收集系统与LNMP日志,结合脚本实现实时报警。
/etc/rsyslog.conf,开启UDP/TCP接收日志(如module(load="imudp") input(type="imudp" port="514")),将日志存储到/var/log/lnmp.log。/usr/local/bin/rsyslog_alert.sh):#!/bin/bash
LOG_FILE="/var/log/lnmp.log"
ALERT_EMAIL="admin@example.com"
if grep -q "ERROR" "$LOG_FILE"; then
echo "Error detected in LNMP logs!" | mailx -s "LNMP Log Alert" "$ALERT_EMAIL"
fi
* * * * * /usr/local/bin/rsyslog_alert.sh