要实现实时监控,首先需要确保Nginx记录全面的日志并开启内置状态模块,这是获取服务器状态数据的基础。
log_format自定义日志字段(如客户端IP、请求时间、状态码、响应时间、upstream信息等),并通过access_log指定日志文件路径。例如:http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $upstream_addr $upstream_response_time';
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log;
}
这样能记录请求的完整信息,便于后续分析请求量、错误率、响应时间等指标。nginx.conf中添加:server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
allow 127.0.0.1; # 仅允许本地访问(生产环境可限制为运维IP)
deny all;
}
}
重启Nginx后,通过http://server_ip/nginx_status可查看状态数据(如Active connections: 3表示当前活跃连接数)。tail -f /var/log/nginx/access.log # 实时查看访问日志
tail -f /var/log/nginx/error.log # 实时查看错误日志(如5xx、4xx错误)
grep " 5.." /var/log/nginx/access.log | wc -l;awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -10;awk '{print $6}' /var/log/nginx/access.log | cut -d' ' -f1 | awk -F':' '{sum += $1; count++} END {print "Average response time: " sum/count " ms"}'。goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED
打开report.html即可查看实时访问统计(如请求量、状态码分布、访客地域等)。grok过滤器),导入Elasticsearch,再用Kibana创建实时仪表板(如请求量趋势、错误率热力图、响应时间分布等)。nginx-prometheus-exporter将Nginx状态指标(如活跃连接数、请求率、错误率)暴露给Prometheus,再用Grafana创建仪表板(如Active connections实时曲线、5xx error rate告警面板)。部署步骤:
docker run -d -p 9113:9113 nginx/nginx-prometheus-exporter -nginx.scrape-uri=http://nginx_server/nginx_status;scrape_configs抓取exporter数据;设置告警规则,当服务器状态超过阈值时触发通知(如邮件、短信、企业微信),避免问题扩大。
worker_connections):#!/bin/bash
MAX_CONN=1024 # 最大连接数(需与nginx.conf中的worker_connections一致)
CURRENT_CONN=$(curl -s http://localhost/nginx_status | awk '/Active/ {print $3}')
if [ "$CURRENT_CONN" -gt $((MAX_CONN * 80 / 100)) ]; then
echo "High connections alert: $CURRENT_CONN > $((MAX_CONN * 80 / 100))" | mail -s "Nginx High Connections Alert" admin@example.com
fi
添加到crontab中每分钟运行一次。alertmanager组件,设置更复杂的告警规则(如5xx错误率超过1%、请求延迟超过500ms)。例如,告警规则配置:groups:
- name: nginx_alerts
rules:
- alert: High5xxErrorRate
expr: rate(http_requests_total{status=~"5.."}[5m]) / rate(http_requests_total[5m]) > 0.01
for: 5m
labels:
severity: critical
annotations:
summary: "High 5xx error rate on {{ $labels.instance }}"
description: "{{ $labels.instance }} has a 5xx error rate of {{ $value }} (threshold: 1%)"
当触发告警时,Alertmanager会通过配置的渠道(如邮件、Slack)发送通知。upstream_addr(上游服务器地址)与upstream模块的server配置关联,分析后端服务器的性能差异(如某台服务器的响应时间过长),为负载均衡调整提供依据。upstream策略。例如,使用least_conn指令让请求分发到当前连接数最少的服务器,或通过ip_hash实现会话保持。通过以上步骤,可实现从基础日志收集到实时监控、告警响应、优化调整的全链路服务器状态管理,确保Nginx服务器的稳定运行。