点赞
评论
收藏
分享
举报
如何借助 Prometheus 和 Grafana 实现 NGINX Plus 可视化
发表于2025-07-09 19:03

浏览 1.9k

原文作者:Monica Thorne - F5 技术营销工程师
原文链接:如何借助 Prometheus 和 Grafana 实现 NGINX Plus 可视化
原文来源:NGINX 中文官网


NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

 

导航

  • 流量管理工具(例如负载均衡器、反向代理、API 网关和 Ingress Controller)会生成大量有关应用和基础架构健康状况的信息。

您可以通过 NGINX Plus 的仪表盘实时跟踪这些重要指标,NGINX Plus 还可以将指标反馈给第三方监控工具,从而让您通过性能可视化获得更多洞察力。


  • 以下两个最热门的工具可协同为您提供这些时序图:
    • Prometheus —— 云原生计算基金会 (CNCF) 的一个开源项目,具有监控和告警功能
    • Grafana —— 一个开源的可视化和分析工具,可从时序数据库(例如 Prometheus)中生成图形及其他视图

Prometheus-njs 模块可轻松为 Prometheus 和 Grafana 提供 NGINX Plus 的指标。

它使用 NGINX JavaScript 模块 (NJS) 和 NGINX Plus API 将指标从 NGINX Plus 导出到 Prometheus 服务器。


本文的主要内容包括:

  • 前提条件
  • 设置 NGINX Plus 服务器
  • 设置 Prometheus 服务器
  • 设置 Grafana 服务器
  • 在 Grafana 中创建 NGINX Plus 图形


注:
这些指令需要使用 NGINX Plus API,不适用于 NGINX 开源版。
如要使用 Prometheus、Grafana 和 NGINX Ingress Controller,请点击文末“阅读原文”参阅我们的文档。


点击链接,观看完整课程视频。    


01 前提条件


在开始演示之前,我们要先满足以下前提条件:

  • 在 NGINX Plus 服务器上安装 NGINX Plus。出于演示目的,我们将进行干净的初始安装。

如果您想要使用已有的 NGINX Plus 服务器,则可能需要在之后恢复在演示过程中对配置文件所做的更改。

  • 在 NGINX Plus 服务器上安装 NGINX JavaScript (njs) 模块。
  • 在 Prometheus 服务器上安装最新版 Docker。在本演示中,我们按照常规做法,在第二台服务器上运行 Prometheus,与 NGINX Plus 分离开来。
  • 在 Grafana 服务器(在本演示中为第三台服务器)上安装最新版 Docker。

         

02  设置 NGINX Plus 服务器

 

1

安装 Prometheus-njs 模块。我们在演示中使用的是 Ubuntu 20.04,以下是相关命令。有关其他操作系统,请点击参阅我们的文档

$ sudo apt-get install nginx-plus-module-prometheus

   

2

使用您喜欢的文本编辑器,打开 /etc/nginx/nginx.conf,并在 http 块外部的顶层上下文中添加以下 load_module 指令。

load_module modules/ngx_http_js_module.so;

# existing top-level directives



http {

    #...

}

   

3(可选步骤)

增加用于存储子请求响应体的缓冲区大小(默认大小为 4KB 或 8KB,具体取决于平台)。这可以防止出现 too big subrequest response这一错误(NGINX 错误日志中可查)。


在 http 块中添加以下 subrequest_output_buffer_size 指令。

http {

    #...

    subrequest_output_buffer_size 32k;

}

   

4

保存 nginx.conf,并运行以下命令,验证 NGINX 配置的语法是否正确。

$ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful


5

将目录更改为 conf.d,并列出文件。

$ cd conf.d

$ ls

default.conf

   

6

default.conf 文件定义了一个监听端口 80 的虚拟服务器。Prometheus 的虚拟服务器需要监听该端口,因此请删除 default.conf 。

$ sudo rm default.conf

   

7

使用您想用的文本编辑器,创建一个名为 prometheus.conf 的新文件,其中包含以下内容。

js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;



server {

    location = /metrics {

        js_content prometheus.metrics;

    }



    location /api {

        api;

    }

}


js_import 指令指定了 NGINX JavaScript 代码的位置,该代码将 NGINX Plus API 生成的指标转换为 Prometheus 要求的格式。(无需为 Prometheus-njs 添加 load_module 指令。)


第一个 location 块支持访问 Prometheus 格式的指标。第二个 location 块启用了 NGINX Plus API,后者生成原始指标并将其暴露给 Prometheus。


注:

在生产环境中,我们强烈建议限制访问 NGINX Plus API(如我们的文档所述)。

有关 Prometheus-njs 模块的更多信息,请点击文末“阅读原文”参阅我们的文档。

   

8

保存 prometheus.conf,检查第 4 步中的语法是否正确,然后运行以下命令启动 NGINX Plus。

$ sudo nginx

   

03  设置 Prometheus 服务器

1

在 /etc/prometheus 目录中创建一个名为 prometheus.yml 的 YAML 格式的新配置文件,其中包含以下内容(基于 Prometheus 网站的默认配置文件)。


如图所示,需要更改的是在目标字段中添加 NGINX Plus 服务器的 IP 地址和端口。

global:

  scrape_interval: 15s



  external_labels:

    monitor: 'codelab-monitor'



scrape_configs: 

  - job_name: 'prometheus'

   

    scrape_interval: 5s



    static_configs:

      - targets: ['NGINX_Plus_IP_address:80']


有关 Prometheus 配置的详细信息(包括可以在配置文件中添加的更多选项),请参阅 Prometheus 文档。

   

2

保存 prometheus.yml,然后运行以下命令。它从 Docker Hub 中拉取 Prometheus 并将其暴露在端口 9090 上。

$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus

 

3

在浏览器中,导航到新 Prometheus 服务器的 IP 地址和端口。通过一个类似以下截图的页面可以确认服务器正在工作。

   

4

验证 Prometheus 是否正在访问 NGINX Plus 指标信息流。点击窗口右上角执行 (Execute) 按钮左侧的球体图标,将会出现一个指标列表,见下。

     

04 设置 Grafana 服务器

1

运行以下命令,从 Docker Hub 中拉取 Grafana 并将其暴露在端口 3000 上:

[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana


有关其他安装方法,请参阅 Grafana 文档。

   

2

在浏览器中,导航到新 Grafana 服务器的 IP 地址和端口。Grafana 登录页面确认服务器正在工作。

   

3

电子邮件或用户名和密码字段中输入 admin 登录 Grafana。我们强烈建议按照提示设置新的安全密码,但出于时间关系,我们在演示中跳过了这一步。

   

4

在打开的 Grafana 主页上,按照 Grafana 文档中的说明将 Prometheus 注册为数据源。该视频演示了 Grafana GUI 中的步骤。


注:
在 Grafana 指令的第 5 步中,输入 Prometheus 服务器的 IP 地址(和端口 9090),而不是显示的 URL 示例 (http://localhost:9090)。


 

在 Grafana 指令的第 7 步,点击 Save & test(保存并测试)按钮,带有复选标记的绿色框和 Data source is working(数据源正在工作)消息表明 Grafana 已成功连接到 Prometheus 服务器。

 

05 在 Grafana 中创建 NGINX Plus 图形


Prometheus 适用于只查看一个指标,而 Grafana 支持在一个图形上轻松查看一系列指标。


Grafana 图形的构建方法


  1. 点击页面(见前一节第 4 步中的截图)左侧导航栏中的加号 (+)。在创建下拉菜单中选择仪表盘。
  2. 点击添加空面板框。
  3. 在打开的新仪表盘/编辑面板页面上,验证 Prometheus 是否出现在页面下半部分的查询选项卡的数据源字段中。如果没有,从下拉下拉菜单中选择 Prometheus。
  4. 在指标浏览器 (Metrics browser)      > 字段中输入 nginx,将出现 NGINX Plus 指标列表。


 

以下信息简要描述了各项指标的意义:


  • nginxplus_connections_accepted —— 接受的客户端连接
  • nginxplus_connections_active —— 活跃的客户端连接
  • nginxplus_connections_dropped —— 断开的客户端连接
  • nginxplus_connections_idle —— 空闲的客户端连接
  • nginxplus_http_requests_current —— 当前的 HTTP 请求
  • nginxplus_http_requests_total —— HTTP 请求总数
  • nginxplus_nginx_meta —— NGINX 元信息
  • nginxplus_processes_respawned —— 异常终止和重新生成的子进程的总数
  • nginxplus_ssl_handshakes —— SSL 握手成功
  • nginxplus_ssl_handshakes_failed —— SSL 握手失败
  • nginxplus_ssl_session_reuses —— SSL 握手期间会话重用
  • nginxplus_workers_mem_private —— NGINX worker 使用的专有内存,不包括共享库
  • nginxplus_workers_mem_rss —— NGINX worker 进程使用的内存


5. 从列表中选择一个指标(在本演示中,我们选择的是 nginxplus_connections_active)。

要选择另一个指标,点击 + 查询 (+ Query) 按钮并在新的指标浏览器 (Metrics browser)  >字段中选择另一个指标(在本演示中,我们选择的是 nginxplus_connections_idle)。


6. 点击页面上半部分图形上方的“刷新”(两个箭头形成的一个圆圈)图标,结果将开始出现在图形上。

         



NGINX 唯一中文官方社区 ,尽在 nginx.org.cn

更多 NGINX 相关的技术干货、互动问答、系列课程、活动资源: 开源社区官网 | 微信公众号

已修改于2025-07-09 19:08
本作品系原创
创作不易,留下一份鼓励
NGINX官方账号

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
NGINX官方账号
这家伙很懒还未留下介绍~
331
文章
21
问答
201
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 23.4k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 16.8k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 19.3k