温馨提示×

centos lnmp如何监控报警

小樊
51
2025-09-18 00:58:40
栏目: 智能运维

CentOS LNMP环境监控报警方案设计

一、基础监控工具:系统自带命令

通过Linux系统自带的命令可快速查看LNMP核心组件的实时运行状态,适合临时排查问题:

  • Nginx状态检查:使用systemctl status nginx查看Nginx服务是否运行;通过netstat -tulnp | grep nginxss -tulnp | grep nginx确认Nginx监听端口(默认80/443)。
  • MySQL状态检查systemctl status mysqld查看MySQL服务状态;mysqladmin -uroot -p status获取MySQL运行统计(如连接数、查询数);show processlist;查看当前数据库连接及执行的SQL语句。
  • PHP-FPM状态检查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查看磁盘空间使用情况。

二、第三方监控工具:全栈化监控与报警

1. Zabbix

Zabbix是企业级开源监控解决方案,支持LNMP全栈监控(服务器、Nginx、MySQL、PHP-FPM),并提供可视化与报警功能。

  • 安装部署:在CentOS上安装Zabbix服务器与代理,配置数据库(MySQL/PostgreSQL)存储监控数据,通过Web界面完成初始化配置。
  • 监控配置:添加LNMP主机,导入Zabbix官方提供的Nginx、MySQL、PHP-FPM监控模板,自动采集关键指标(如Nginx的请求数、响应时间;MySQL的QPS、连接数;PHP-FPM的进程数、执行时间)。
  • 报警设置:通过Zabbix的“触发器”功能设置报警规则(如Nginx服务宕机、MySQL连接数超过阈值、PHP-FPM进程数超过80%),触发后通过邮件、短信或企业微信发送通知。

2. Prometheus + Grafana

Prometheus是开源时间序列数据库,Grafana是可视化工具,组合可实现高性能监控与美观的仪表盘。

  • 组件部署:在CentOS上安装Prometheus服务器,部署Node Exporter(采集服务器指标)、Nginx Exporter(采集Nginx指标)、MySQL Exporter(采集MySQL指标)、Blackbox Exporter(探测服务可用性)。
  • 监控配置:配置Prometheus的prometheus.yml文件,添加上述exporter作为抓取目标;通过Grafana导入Nginx、MySQL、PHP-FPM的预置仪表盘,可视化展示指标(如Nginx的请求速率、MySQL的慢查询数)。
  • 报警设置:使用Prometheus的alertmanager组件,配置报警规则(如Nginx 5xx错误率超过5%、MySQL慢查询超过10条/分钟),触发后通过邮件、Slack或PagerDuty发送通知。

3. Nagios

Nagios是经典开源监控系统,适合传统环境,通过插件扩展监控能力。

  • 安装部署:在CentOS上安装Nagios Core服务器,配置Apache与PHP环境;安装NRPE插件(用于监控远程主机)。
  • 监控配置:添加LNMP主机,配置Nagios命令(如检查Nginx状态的check_http、检查MySQL状态的check_mysql),将命令添加到主机配置中,实现定期检查。
  • 报警设置:通过Nagios的“联系人”与“联系人组”功能,设置报警通知方式(邮件、短信),当服务异常时触发通知。

三、日志监控与报警:精准定位问题

1. ELK Stack(Elasticsearch + Logstash + Kibana)

ELK是开源日志管理平台,可集中收集、分析LNMP日志(Nginx、MySQL、PHP),并通过Kibana设置日志报警。

  • 部署流程:在CentOS上安装Elasticsearch(存储日志)、Logstash(收集与解析日志)、Kibana(可视化)。配置Logstash的input插件(如file插件读取Nginx的access.logerror.log),filter插件(如grok解析日志格式),output插件(存储到Elasticsearch)。
  • 日志分析:通过Kibana创建索引模式(如nginx-*mysql-*),查看日志趋势(如Nginx请求量、MySQL慢查询数)。
  • 报警设置:使用Kibana的“Alerting”功能,设置日志匹配规则(如Nginx日志中出现“502 Bad Gateway”、MySQL日志中出现“Too many connections”),触发后发送邮件或Webhook通知。

2. 自定义脚本+定时任务

通过Shell脚本定期检查LNMP服务状态与日志,结合邮件工具发送报警,适合简单场景。

  • 脚本示例
    • Nginx状态检查脚本/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
      
    • Nginx错误日志检查脚本/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
    

3. rsyslog+脚本报警

通过rsyslog收集系统与LNMP日志,结合脚本实现实时报警。

  • 配置rsyslog:编辑/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
    

0