实时掌握网站状态的Nginx日志监控方案
要实现有效监控,首先需要确保Nginx记录的日志包含足够的信息。通过log_format指令自定义日志格式,推荐包含以下关键字段:客户端IP、时间、请求方法/路径/协议、状态码、响应体大小、Referer、User-Agent等。例如:
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; # 访问日志
error_log /var/log/nginx/error.log; # 错误日志
}
重启Nginx后,日志将按此格式记录,为后续分析奠定基础。
使用tail -f命令可实时查看日志文件的新增内容,适合快速检查异常:
tail -f /var/log/nginx/access.log(实时显示每笔请求);tail -f /var/log/nginx/error.log(实时显示服务器错误)。GoAccess是一款轻量级、实时Web日志分析工具,支持Nginx日志格式,可生成交互式HTML报告,涵盖访问量、状态码分布、访客来源、请求时间等指标。
sudo apt install goaccess(Ubuntu/Debian)或sudo yum install goaccess(CentOS/RHEL);goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED(生成HTML报告,--log-format需匹配Nginx的log_format);ELK(Elasticsearch+Logstash+Kibana)适合大规模日志处理,可实现日志的集中存储、复杂查询和可视化。
logstash.conf配置文件,定义输入、过滤、输出规则);Fluentd是一款开源数据收集器,可将Nginx日志推送至Prometheus、Grafana等监控平台,适合需要集中收集日志的场景。
Nginx的stub_status模块可提供基础的运行状态信息,如活动连接数、请求数、处理时间等。
server块内):location /nginx_status {
stub_status on; # 启用状态页面
access_log off; # 禁用状态页面的访问日志
allow 127.0.0.1; # 允许本地访问(可根据需求调整)
deny all; # 禁止其他IP访问
}
http://服务器IP/nginx_status,即可看到类似以下的实时数据:Active connections: 10
server accepts handled requests
1000 1000 2000
Reading: 2 Writing: 5 Waiting: 3
其中,“Active connections”表示当前活动连接数,“accepts”表示总接受连接数,“handled”表示总处理连接数,“requests”表示总请求数,“Reading/Writing/Waiting”表示当前正在读取、写入、等待的连接数。通过工具(如Prometheus+Alertmanager、Zabbix)设置关键指标的阈值,当超过阈值时触发告警。例如:
4xx/5xx状态码占比);结合告警机制,实现自动化故障恢复。例如: