文章目录总体流程1.Prometheus监控收集Nginx数据2.Grafana展示一.Prometheus监控收集Nginx数据第一步让 Nginx 暴露内置指标第二步启动 Nginx Prometheus Exporter第三步配置 Prometheus 抓取指标并启动二.Grafana展示监控数据第一步在 Grafana 中添加 Prometheus 数据源第二步导入 Nginx 监控面板Prometheus 监控 Nginx核心思路是借助一个“中间人”——Nginx Prometheus Exporter。它的任务是读取 Nginx 内置的状态信息然后转换成 Prometheus 能看懂的格式。我的Nginx是运行在阿里云的ECS服务器宿主机上nginx-prometheus-exporterPrometheusGrafana均在ECS上使用Docker运行并且在同一个 Docker 网络下。总体流程1.Prometheus监控收集Nginx数据让 Nginx 暴露指标启动 Exporter 采集指标配置 Prometheus 抓取指标并启动2.Grafana展示Grafana 中添加 Prometheus 数据源导入现成的 Nginx 监控面板一.Prometheus监控收集Nginx数据第一步让 Nginx 暴露内置指标Nginx 自带了一个叫 stub_status 的模块这是指标的数据源。需要先确认并启用它。检查模块是否已启用在服务器上执行以下命令如果看到输出with-http_stub_status_module就说明模块已经在了。nginx-V21|grep-owith-http_stub_status_module配置 Nginx如果模块已启用接着配置 Nginx为 Exporter 提供一个可以抓取数据的 HTTP 接口。编辑 Nginx 配置文件通常是 /etc/nginx/nginx.conf在 server 块中添加如下配置然后重载 Nginx 使配置生效sudo systemctl restart nginxserver{listen8080;# 可自定义端口location /stub_status{stub_status on;access_log off;# 生产环境建议添加访问限制如 allow 127.0.0.1;}}验证指标配置好后通过 curl 测试一下看到类似下面的输出就说明成功了。curlhttp://127.0.0.1:8080/stub_status#输出Active connections:2server accepts handled requests34341018Reading:0Writing:1Waiting:1第二步启动 Nginx Prometheus ExporterExporter 会定期从上一步配置的地址如 http://127.0.0.1:8080/stub_status抓取数据并在自己的 9113 端口上暴露出来。通过 Docker 启动#创建一个 Docker 网络dockernetwork create monitor-net#运行Nginx Prometheus Exporterdockerrun-d\--namenginx-exporter\--networkmonitor-net\-p9113:9113\nginx/nginx-prometheus-exporter:latest\-nginx.scrape-urihttp://你的Nginx服务器IP:8080/stub_status注意请将 你的Nginx服务器IP 替换为实际 IP。我这里填的是ECS服务器的私网IP因为我的nginx是运行在ECS服务器宿主机上的。第三步配置 Prometheus 抓取指标并启动告诉Prometheus 服务器去 Exporter 那里“拉取”数据。编辑 Prometheus 的配置文件 prometheus.yml保证文件在你当前所在目录下添加nginx监控任务。global:scrape_interval:15s#抓取间隔scrape_configs:-job_name:nginxstatic_configs:-targets:[nginx-exporter:9113]#在同一个Docker网络下可以使用容器名访问启动Prometheusdockerrun-d\--nameprometheus\--networkmonitor-net\-p9090:9090\-v$(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml\prom/prometheus\--config.file/etc/prometheus/prometheus.yml\--web.enable-lifecycle–web.enable-lifecycle开启热加载功能这样可以用 curl -X POST http://localhost:9090/-/reload 重载配置而无需重启容器访问 Prometheus 的 Web 界面http://ECS公网IP:9090查看nginx的指标。ECS安全组入方向要放行9090端口才能访问访问http://ECS公网IP:9090/targets查看监控目标的状态。StateUP 表示监控目标活着绿色DOWN 表示监控目标挂了红色。二.Grafana展示监控数据Docker运行Grafanadockerrun-d\--namegrafana\--networkmonitor-net\-p3000:3000\grafana/grafana第一步在 Grafana 中添加 Prometheus 数据源首先需要告诉 Grafana 监控数据从哪里获取。登录 Grafana在浏览器访问http://ECS公网IP:3000用默认账号 admin 和密码 admin 登录首次登录会提示修改密码。ECS安全组入方向要放行3000端口才能访问进入数据源配置点击左侧菜单栏的齿轮图标Configuration / 配置然后选择Data Sources数据源。添加 Prometheus 数据源点击Add data source添加数据源在列表中找到并选择Prometheus。关键一步配置 URL在Prometheus server URL一栏填http://prometheus:9090因为Prometheus 和Grafana 在同一个Docker下所以可以通过容器名访问。保存并测试填好 URL 后点击页面底部的Save Test保存并测试。看到绿色的成功提示就说明数据源配置好了。第二步导入 Nginx 监控面板Grafana 社区提供了很多现成的、可直接导入的面板模板这是最快可视化 Nginx 数据的方法。推荐模板一个广泛使用的 Nginx 面板模板 ID 是 12708。操作步骤如下进入导入页面在 Grafana 左侧菜单将鼠标悬浮在“”图标上点击“Import”导入。输入模板 ID在“Import via grafana.com”输入框中填入12708然后点击旁边的“Load”加载按钮。完成导入Grafana 会识别这个模板。在接下来的页面中为这个面板取个名字并在“Prometheus”下拉菜单中选择你在第一步创建的数据源。最后点击“Import”即可。完成这些步骤后就会显示一个包含连接数、请求总数等关键指标的 Nginx 监控仪表盘。这样就成功搭建了一个基础的 Nginx 监控系统后续可以根据需要调整面板或设置告警。Nginx 监控仪表盘