一、配置Nginx日志:精准记录是监控的基础
要监控Nginx日志防止宕机,首先需要确保日志格式规范、内容完整,便于后续分析异常。需配置两类核心日志:
$request_time响应时间、$upstream_response_time上游响应时间、$status状态码等字段),便于后续筛选关键指标。warn或error(避免debug级别导致日志量过大),仅在排查问题时临时调整为info。二、日志轮转与存储:防止日志膨胀影响系统稳定性
当日志文件过大时,会占用大量磁盘空间,甚至导致系统无法写入日志或崩溃。需通过日志轮转定期压缩、归档旧日志:
logrotate工具(Linux系统自带),配置/etc/logrotate.d/nginx文件,设置每日轮转(daily)、保留14天日志(rotate 14)、压缩旧日志(compress)、创建新日志文件(create 0644 nginx adm),并在轮转后通知Nginx重新打开日志文件(postrotate脚本中发送kill -USR1信号)。三、实时监控日志:快速发现异常请求
通过实时监控日志,可及时发现高频错误、恶意请求、流量突增等异常,避免问题扩大导致宕机:
tail -F /var/log/nginx/access.log实时查看访问日志的最新记录;用grep " 500 " /var/log/nginx/access.log筛选500内部错误;用journalctl -u nginx -f(systemd系统)实时查看Nginx服务的系统日志。GoAccess(实时解析日志并生成HTML报告,支持访问量、状态码、请求时间等统计);或ELK Stack(Elasticsearch存储日志、Logstash解析日志、Kibana可视化,适合大规模日志分析);或Grafana+Loki(轻量级日志聚合,支持实时查询和 dashboard 展示)。四、关键指标监控与告警:提前预警宕机风险
除了日志内容,还需监控Nginx的运行状态指标,通过阈值设置提前预警宕机风险:
active connections(总连接数)、reading(读取中连接)、writing(写入中连接)、waiting(等待中连接),若active connections接近worker_connections(Nginx工作进程的最大连接数),说明服务器负载过高。5xx错误(服务器内部错误)、4xx错误(客户端错误)的比例,若5xx错误率突然升高(如超过1%),说明后端服务可能出现问题。Nginx Amplify(Nginx官方工具,支持自动预警,如QPS低于100、500错误超过10次/分钟时发送邮件);Prometheus+Nginx Exporter+Grafana(Nginx Exporter采集Nginx指标,Prometheus存储指标,Grafana设置告警规则,如“5xx错误率>5%”时触发邮件/Slack告警)。五、日志分析与优化:从根源上预防宕机
定期分析日志,识别高频错误、性能瓶颈、恶意攻击,采取针对性措施:
404 Not Found(检查请求路径是否存在)、502 Bad Gateway(检查后端服务是否存活)、503 Service Unavailable(检查Nginx worker进程是否足够)等错误,修复配置或后端服务问题。$request_time>2秒),找出耗时高的请求路径(如/api/bigdata),优化后端接口或增加缓存(如Redis)。POST /login尝试、扫描/admin路径),配置limit_req_zone(限制请求速率)、deny(IP黑名单)等规则,防止DDoS攻击。