ubuntu

ubuntu lnmp如何监控运行状态

小樊
35
2025-11-06 13:21:04
栏目: 智能运维

Ubuntu LNMP运行状态监控方法

一、基础命令行监控

1. 服务状态检查
使用systemctl(Ubuntu 16.04及以上版本)查看LNMP核心服务(Nginx、MySQL/MariaDB、PHP-FPM)的运行状态,是最直接的监控方式:

sudo systemctl status nginx    # 检查Nginx状态
sudo systemctl status mysql    # 检查MySQL状态(若使用MariaDB,命令为`sudo systemctl status mariadb`)
sudo systemctl status php-fpm  # 检查PHP-FPM状态(版本不同可能为`php7.4-fpm`、`php8.1-fpm`等)

若服务未运行,可通过sudo systemctl start <服务名>启动,sudo systemctl enable <服务名>设置开机自启。

2. 进程存在性检查
通过ps命令结合grep过滤,确认LNMP进程是否在运行:

ps aux | grep nginx    # 检查Nginx进程
ps aux | grep mysqld   # 检查MySQL主进程
ps aux | grep php-fpm  # 检查PHP-FPM进程

若无输出,说明进程可能崩溃,需手动重启或排查原因。

3. 端口监听检查
使用netstat(传统工具)或ss(更现代的工具)检查服务是否监听预期端口(Nginx:80/443、MySQL:3306、PHP-FPM:9000):

sudo netstat -tuln | grep -E '80|443|3306|9000'  # 查看端口监听情况
# 或使用ss命令(更高效)
sudo ss -tuln | grep -E '80|443|3306|9000'

若端口未监听,可能是配置错误或服务未启动。

4. 系统资源监控
通过以下命令实时查看系统资源占用,判断LNMP是否导致资源瓶颈:

top                    # 实时查看CPU、内存占用(按M按内存排序,按P按CPU排序)
htop                   # top的增强版(需安装:`sudo apt install htop`)
free -h                # 查看内存使用情况(人类可读格式)
df -h                  # 查看磁盘空间使用情况
iostat -x 1            # 查看磁盘I/O负载(需安装sysstat:`sudo apt install sysstat`)

高CPU、内存或磁盘占用可能导致服务响应变慢。

二、内置模块与日志分析

1. Nginx状态监控
启用Nginx的stub_status模块,查看连接数、请求数等指标:

2. MySQL状态监控

3. 日志分析
定期检查LNMP组件的错误日志,及时发现异常:

tail -f /var/log/nginx/error.log    # 实时查看Nginx错误日志
tail -f /var/log/mysql/error.log    # 实时查看MySQL错误日志
tail -f /var/log/php-fpm.log        # 查看PHP-FPM错误日志(路径可能为`/var/log/php7.x-fpm.log`)

日志中常见异常:Nginx的502 Bad Gateway(PHP-FPM未运行)、MySQL的Too many connections(连接数过多)。

三、第三方监控工具

1. Prometheus + Grafana
开源监控组合,适合大规模、可视化监控:

2. Zabbix
企业级开源监控系统,支持报警、自动化管理:

3. Netdata
实时监控工具,安装即用,适合快速查看系统状态:

四、自动化监控与重启脚本

编写Shell脚本,定期检查LNMP服务状态,异常时自动重启并记录日志:

#!/bin/bash
timestamp=$(date '+%Y-%m-%d %H:%M:%S')

# 检查PHP-FPM
if ! pgrep -x "php-fpm" > /dev/null; then
    systemctl restart php-fpm
    echo "$timestamp PHP-FPM down, restarted." >> /var/log/lnmp_monitor.log
fi

# 检查MySQL
if ! systemctl is-active --quiet mysql; then
    systemctl restart mysql
    echo "$timestamp MySQL down, restarted." >> /var/log/lnmp_monitor.log
fi

# 检查Nginx
if ! systemctl is-active --quiet nginx; then
    systemctl restart nginx
    echo "$timestamp Nginx down, restarted." >> /var/log/lnmp_monitor.log
fi

该脚本可有效应对服务意外崩溃的情况。

0
看了该问题的人还看了