温馨提示×

centos lnmp如何监控状态

小樊
35
2025-11-22 02:25:26
栏目: 智能运维

CentOS 上 LNMP 状态监控实操指南

一 系统与服务状态快速检查

  • 服务运行状态:使用 systemd 查看组件是否存活与开机自启
    • Nginx:sudo systemctl status nginx
    • MySQL/MariaDB:sudo systemctl status mysqld(或 mariadb
    • PHP-FPM:sudo systemctl status php-fpm
  • 端口与进程:确认监听端口与进程存在
    • 监听端口:ss -tulnp | egrep ':(80|443|3306|9000)'
    • 进程存活:ps aux | egrep 'nginx|mysqld|php-fpm'
  • 配置与日志:变更前后校验与实时排错
    • Nginx 配置语法:sudo nginx -t
    • 实时查看日志:tail -f /var/log/nginx/error.logtail -f /var/log/mysqld.logtail -f /var/log/php-fpm/error.log
  • 资源概况:快速了解负载与资源瓶颈
    • 资源使用:top/htopfree -hdf -hiostat -x 1vmstat 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 statusSHOW STATUS;SHOW PROCESSLIST;SHOW VARIABLES LIKE 'slow_query_log%';,慢查询分析:pt-query-digest /var/log/mysql/slow.log
PHP-FPM 进程池状态、排队、慢请求 sudo systemctl status php-fpmpm.status_path(如 /status)、slowlogrequest_terminate_timeout,日志:/var/log/php-fpm/error.log
系统 CPU、内存、磁盘 IO、网络 top/htopfree -hiostat -x 1vmstat 1ss -sdf -h
以上指标与方法可定位连接瓶颈、慢查询、进程异常与资源紧张等常见问题。

三 日志与慢查询分析

  • Nginx:实时观察错误与访问异常
    • 错误日志:tail -f /var/log/nginx/error.log
    • 访问日志:结合 awk/goaccess 做状态码、URL、UA、耗时等分析
  • MySQL:慢查询定位与优化
    • 确认慢查询日志开启:SHOW VARIABLES LIKE 'slow_query_log%';
    • 分析慢日志:pt-query-digest /var/log/mysql/slow.log,找出 Top SQL、扫描行数、执行计划问题
  • PHP-FPM:慢请求与进程异常
    • 开启并查看慢日志(在 www.conf 中配置 slowlogrequest_slowlog_timeout),结合 tail -f 观察长耗时请求与异常堆栈
      日志与慢查询分析是定位业务异常与性能瓶颈的关键环节。

四 第三方监控与告警方案

  • Zabbix:开箱即用的主机与服务监控,支持自定义监控项、触发器与告警媒介(邮件/短信/企业微信/钉钉等),适合中小团队统一纳管。
  • Prometheus + Grafana:以 Nginx Exporter、mysqld_exporter、node_exporter 采集指标,Grafana 做可视化与阈值告警,适合需要时序与可视化能力的团队。
  • Nagios / Datadog / New Relic:Nagios 做可用性与服务检查;Datadog/New Relic 提供 APM 与应用性能洞察,适合云上或需要 SaaS 告警与可视化的场景。
    建议优先选择具备“采集-存储-可视化-告警”完整链路的方案,并与现有告警通道(如企业微信/钉钉/短信网关)打通。

五 一键巡检脚本示例

#!/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 或邮件网关实现自动告警,可显著提升故障发现速度。

0