怎样通过Nginx配置性能监控
Nginx性能监控方案主要包括:NginxPlus内置实时监控面板;Prometheus与Grafana可构建专业可视化看板;日志分析能统计请求量及错误状态;stub_status模块可获取基础连接数。运维人员需根据监控实时性、资源成本等实际场景选择合适方案,以实现高效运维。
先说说核心观点:对Nginx做性能监控其实并没有一个“万能药方”,关键看你手头的资源和具体的运维场景。社区版有社区版的门路,商业版有商业版的手段,甚至连日志文件都能帮你摸清部分状况。下面就把主流的几种方案撸一遍,方便你按需选择。

1. 用Nginx Plus,一步到位
如果预算不是问题,Nginx Plus绝对是省心的选择。它内置了完整的监控和管理面板,不需要额外拼凑组件。
启用方法也很直接
- 先搞定安装(以Ubuntu为例):
sudo apt-get update sudo apt-get install nginx-extras - 接着编辑配置文件,通常在
/etc/nginx/nginx.conf,加上这样一个location块:http { # 其他配置... server { listen 80; server_name example.com; location /nginx_status { stub_status on; access_log off; allow 127.0.0.1; # 为了安全,限制本地访问 deny all; } # 其他location配置... } } - 重启Nginx让配置生效:
sudo systemctl restart nginx - 最后打开浏览器,访问
http://你的服务器IP/nginx_status,就能直接看到实时的连接数和请求处理情况了。
2. 用Prometheus + Grafana,构建专业看板
这是目前社区里最流行的方案,特别适合那些希望把Nginx的指标纳入统一监控体系(比如和服务器、数据库放在一块儿看)的场景。效果很酷,但需要稍微折腾一下。
搭建步骤大致如下
部署Prometheus,用来拉取和存储指标数据:
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz tar xvfz prometheus-2.30.3.linux-amd64.tar.gz cd prometheus-2.30.3配置Prometheus,告诉它去哪个端口采集Nginx的数据。在
prometheus.yml的scrape_configs里加上:scrape_configs: - job_name: 'nginx' static_configs: - targets: ['你的服务器IP:9113']启动Prometheus:
./prometheus --config.file=prometheus.yml部署Grafana,用来做可视化展示:
wget https://dl.grafana.com/oss/release/grafana-8.2.0.linux-amd64.tar.gz tar xvfz grafana-8.2.0.linux-amd64.tar.gz cd grafana-8.2.0启动Grafana:
./bin/grafana-server配置数据源:打开浏览器访问
http://你的服务器IP:3000,登录后把刚才跑起来的Prometheus添加为数据源。导入现成的Dashboard:在Grafana的官方仪表盘库中搜索“Nginx”,找一个下载量高的直接导入,一个漂亮的实时监控面板就出来了。
3. 最朴素的方法:啃日志
不想装额外组件?没关系,Nginx的访问日志和错误日志本身就是一座金矿。通过分析日志,你可以拿到最真实的请求量、状态码分布、响应时间等信息。
先定制日志格式
为了让日志更“有货”,可以给日志定义一个更详细的格式:
http {
log_format custom '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
access_log /var/log/nginx/access.log custom;
error_log /var/log/nginx/error.log;
# 其他配置...
}然后上命令行
配合awk、grep这些传统工具,你可以快速统计出某段时间的PV、UV、404错误数量等关键指标。
4. 轻量级方案:stub_status模块
如果你只需要知道“现在有多少连接”“已经处理了多少请求”这几个基础指标,那么Nginx自带的ngx_http_stub_status_module模块就够用了。配置方法和Nginx Plus类似:
server {
listen 80;
server_name example.com;
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
# 其他location配置...
}重启Nginx后,访问http://你的服务器IP/nginx_status,信息一目了然。
总的来说,这几种方案各有侧重:追求省心就选Nginx Plus;想要专业可视化就用Prometheus+Grafana;临时排查问题就翻日志或直接看stub_status。根据你的实际场景挑一个最趁手的,肯定比什么都不看要强得多。


































