ubuntu

Ubuntu Nginx如何监控报警

小樊
54
2025-10-06 13:44:25
栏目: 智能运维

Ubuntu+Nginx监控报警实现指南
监控报警是保障Ubuntu服务器上Nginx稳定运行的关键环节,需覆盖服务状态、性能指标、日志异常三大维度。以下是具体实现方法,结合开源工具与自定义脚本,兼顾易用性与灵活性。

一、基础服务状态监控(快速检测服务可用性)

1. 使用systemctl命令手动检查

通过systemctl命令可快速查看Nginx服务的运行状态、启动时间及最近活动记录,适合日常运维手动验证:

sudo systemctl status nginx  # 查看服务状态(active/radio/faulty)
ps aux | grep nginx          # 列出所有Nginx进程(确认主进程与子进程存在)

2. 自定义Shell脚本+定时任务(自动报警)

编写脚本定期检查Nginx服务状态,若异常则通过邮件或短信发送报警(需提前配置邮件客户端如postfix或第三方API):

#!/bin/bash
# 检查Nginx服务状态
if ! systemctl is-active --quiet nginx; then
    echo "$(date '+%Y-%m-%d %H:%M:%S') - Nginx服务异常,正在尝试重启..." >> /var/log/nginx_monitor.log
    systemctl restart nginx
    # 发送邮件报警(需替换为实际邮件命令,如mailx或sendmail)
    echo "Nginx服务异常,已自动重启" | mail -s "Nginx报警" your-email@example.com
fi

将脚本保存为/usr/local/bin/check_nginx.sh,添加执行权限后,通过crontab -e设置每5分钟运行一次:

*/5 * * * * /usr/local/bin/check_nginx.sh

二、性能指标监控(全面掌握资源与请求情况)

1. Prometheus+Grafana(可视化监控方案)

步骤1:安装Nginx Exporter
Nginx Exporter是Prometheus的适配器,用于暴露Nginx的性能指标(如QPS、响应时间、错误率)。下载并运行:

wget https://github.com/nginxinc/nginx-prometheus-exporter/releases/download/v0.10.0/nginx-prometheus-exporter_0.10.0_linux_amd64.tar.gz
tar xvf nginx-prometheus-exporter_0.10.0_linux_amd64.tar.gz
cd nginx-prometheus-exporter_0.10.0_linux_amd64
./nginx-prometheus-exporter  # 默认监听9113端口

步骤2:配置Prometheus抓取指标
编辑Prometheus配置文件/etc/prometheus/prometheus.yml,添加Nginx抓取任务:

scrape_configs:
  - job_name: 'nginx'
    static_configs:
      - targets: ['localhost:9113']  # Nginx Exporter的地址

重启Prometheus使配置生效:sudo systemctl restart prometheus

步骤3:配置Grafana仪表盘

2. Systemd内置监控(简单查看服务资源占用)

通过systemctl命令可直接查看Nginx服务的资源使用情况:

systemctl status nginx  # 查看CPU、内存占用的简要信息

若需更详细的资源监控,可结合htopglances工具(sudo apt install htop/glances),实时查看系统整体资源使用情况。

三、日志异常监控(精准定位问题根源)

1. 实时日志分析与报警(命令行工具)

通过grepawk等命令实时过滤Nginx日志中的错误信息(如404、500、503),并触发报警:

# 监控错误日志(实时显示4xx/5xx错误)
sudo tail -f /var/log/nginx/error.log | grep -E '4[0-9]{2}|5[0-9]{2}'

# 统计单位时间内的500错误数(示例:每分钟统计一次)
awk '$9 >= 500 {count++} END {if(count > 5) print "500错误数:" count}' /var/log/nginx/access.log

2. ELK Stack(集中化日志管理与可视化)

步骤1:部署ELK组件

步骤2:设置日志报警
通过Kibana的Alerting功能,设置错误码阈值报警(如500错误数超过10次/分钟时,发送邮件或Slack通知)。

3. 自定义脚本+日志解析(灵活定制报警规则)

编写Python脚本解析Nginx日志,提取错误信息并发送报警(示例:监控404错误):

import re
from datetime import datetime
import smtplib
from email.mime.text import MIMEText

LOG_FILE = '/var/log/nginx/access.log'
ERROR_THRESHOLD = 200  # 404错误阈值(单位:分钟)

def send_alert(error_msg):
    # 配置邮件报警(需替换为实际邮件服务器信息)
    msg = MIMEText(error_msg)
    msg['Subject'] = 'Nginx 404错误报警'
    msg['From'] = 'your-email@example.com'
    msg['To'] = 'admin@example.com'
    with smtplib.SMTP('smtp.example.com', 587) as server:
        server.starttls()
        server.login('your-email@example.com', 'your-password')
        server.send_message(msg)

def check_404_errors():
    with open(LOG_FILE, 'r') as f:
        # 读取最近1000行日志(避免全量读取)
        lines = f.readlines()[-1000:]
        error_count = sum(1 for line in lines if ' 404 ' in line)
        if error_count > ERROR_THRESHOLD:
            error_msg = f"时间段内404错误数:{error_count}(超过阈值{ERROR_THRESHOLD})"
            send_alert(error_msg)

if __name__ == "__main__":
    check_404_errors()

将脚本保存为/usr/local/bin/check_404.py,通过crontab -e设置每分钟运行一次:

* * * * * /usr/bin/python3 /usr/local/bin/check_404.py

四、常用工具推荐

工具类型 推荐工具 特点
服务状态监控 systemctlmonit 简单易用,适合快速检查服务是否运行
性能监控 Prometheus+Grafana、Netdata Prometheus+Grafana适合长期存储与可视化;Netdata适合实时监控
日志监控 ELK Stack、Fluentd、GoAccess ELK适合大规模日志管理;GoAccess适合实时分析访问日志
报警通知 Mailx、Sendmail、Slack、PagerDuty Mailx/Sendmail适合邮件报警;Slack/PagerDuty适合团队协作报警

通过以上方法,可实现Ubuntu+Nginx的全维度监控及时报警,帮助运维人员快速定位并解决问题,保障服务稳定性。需根据实际需求选择合适的工具组合(如小型项目可用systemctl+自定义脚本,大型项目推荐Prometheus+Grafana+ELK)。

0
看了该问题的人还看了