實時掌握網站狀態的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狀態碼占比);結合告警機制,實現自動化故障恢復。例如: