Nginx自带了一个状态模块ngx_http_stub_status_module
,可以实时显示基本的连接和请求信息。
确认Nginx编译时已包含该模块:
nginx -V 2>&1 | grep -o with-http_stub_status_module
在Nginx配置文件中添加状态监控位置(通常在server
块中):
server {
listen 80;
server_name yourdomain.com;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1; # 只允许本地访问
allow 192.168.1.0/24; # 或指定信任IP段
deny all;
}
}
重新加载Nginx配置:
nginx -s reload
访问http://yourdomain.com/nginx_status
,你将看到类似以下输出:
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
安装Nginx Prometheus exporter:
docker run -d -p 9113:9113 nginx/nginx-prometheus-exporter -nginx.scrape-uri=http://<nginx-ip>/nginx_status
配置Prometheus抓取指标:
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ['exporter-ip:9113']
在Grafana中导入Nginx仪表板(如ID 12708)
配置Nginx日志格式:
log_format json_combined escape=json
'{"@timestamp":"$time_iso8601",'
'"remote_addr":"$remote_addr",'
'"request":"$request",'
'"status":$status,'
'"body_bytes_sent":$body_bytes_sent,'
'"request_time":$request_time,'
'"http_referrer":"$http_referer",'
'"http_user_agent":"$http_user_agent"}';
配置Logstash管道处理Nginx日志
在Kibana中创建可视化仪表板
Netdata: 轻量级实时监控工具
# 安装Netdata
bash <(curl -Ss https://my-netdata.io/kickstart.sh)
GoAccess: 实时日志分析工具
goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html --log-format=COMBINED
Zabbix: 企业级监控方案,提供Nginx模板
指标 | 说明 | 健康阈值参考 |
---|---|---|
请求率 | 每秒请求数 | 根据服务器规格而定 |
错误率 | 4xx/5xx比例 | <1% |
响应时间 | 平均响应时间 | <500ms |
活跃连接数 | 当前连接数 | <worker_connections的80% |
请求排队 | 等待连接数 | 持续>0可能有性能问题 |
通过以上配置和工具,你可以全面监控Nginx的运行状态,及时发现并解决潜在问题,确保网站稳定运行。