正如我们在《如何提高Kubernetes中的可观测性》中所述,应用开发和交付团队面临的一项主要挑战,是深入了解应用的性能、安全性和可用性。这些洞察有助于团队快速排查问题,并主动为流量激增做好准备。
流量管理工具(例如负载均衡器、反向代理、API网关和Ingress控制器)可生成大量有关应用和基础设施运行状况的信息。您可以在NGINX Plus仪表板上实时跟踪这些重要指标。NGINX Plus还可以将指标传送至第三方监控工具,通过性能随时间变化的可视化图表提供更多洞察。以下两款常用工具可协同生成这些时间序列图:
- Prometheus,Cloud Native Computing Foundation(CNCF)旗下用于监控和告警的开源项目
- Grafana,一种开源可视化和分析工具,可基于Prometheus等时序数据库生成图表及其他可视化内容
The Prometheus-njs模块可轻松将NGINX Plus指标传送到Prometheus和Grafana。该模块使用NGINX JavaScript模块(NJS)和NGINX Plus API将NGINX Plus中的指标导出到Prometheus服务器。
本视频演示将完整介绍如何设置NGINX Plus、Prometheus和Grafana,以及如何创建Grafana图表。
 
为帮助您设置自己的实施方案,以下各节按视频中的时间点汇总了相关步骤:
备注:
- 这些说明依赖NGINX Plus API,因此不适用于NGINX Open Source。
- 要将Prometheus和Grafana与NGINX Ingress Controller配合使用,请参阅我们的文档。
先决条件
开始演示前,我们已满足以下先决条件。
- 安装NGINX Plus到NGINX Plus服务器上。为便于演示,我们将执行全新初始安装。如果使用现有的NGINX Plus服务器,可能需要调整演示期间对配置文件所做的更改。
- 安装NGINX JavaScript (njs)模块到NGINX Plus服务器上。
- 安装最新版本的Docker,安装位置为Prometheus服务器。在演示中,我们遵循常见做法,在另一台独立于NGINX Plus的服务器上运行Prometheus。
- 在Grafana服务器(演示中的第3台服务器)上安装最新版本的Docker。
设置NGINX Plus服务器(1:20)
- 安装Prometheus-njs模块。本演示使用Ubuntu 20.04,以下命令适用于该系统。对于其他操作系统,请参阅文档。
$ sudo apt-get install nginx-plus-module-prometheus- 使用常用的文本编辑器打开/etc/nginx/nginx.conf,然后在顶层上下文中添加以下
load_module指令,并确保该指令位于http块之外。
load_module modules/ngx_http_js_module.so;
# existing top-level directives
http {
#...
}- (可选)增大用于存储子请求响应正文的缓冲区(默认大小为4 KB或8 KB,具体取决于平台)。这可避免出现
toobigsubrequestresponse错误。此类错误会显示在NGINX错误日志中。在subrequest_output_buffer_size块中添加以下http指令。
http { #...
subrequest_output_buffer_size 32k;
}- 保存nginx.conf,然后运行此命令,验证NGINX配置的语法是否正确。
$ sudo nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful- 切换到conf.d目录并列出其中的文件。
$ cd conf.d$ ls
default.conf- The default.conf文件定义了一个侦听端口 80 的虚拟服务器。Prometheus的虚拟服务器需要侦听该端口,因此请删除default.conf以释放该端口。
$ sudo rm default.conf- 使用常用的文本编辑器创建一个名为“prometheus.conf”的新文件,内容如下。
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
server {
location = /metrics {
js_content prometheus.metrics;
}
location /api {
api;
}
}- The
js_import指令用于指定NGINX JavaScript代码的位置,该代码会将NGINX Plus API生成的指标转换为Prometheus所需的格式。(无需再为Prometheus-njs添加load_module指令。)第一个location块用于访问Prometheus格式的指标。第二个location块用于启用NGINX Plus API。该API会生成原始指标,并将其提供给Prometheus。注意:在生产环境中,强烈建议按照文档中的说明限制对NGINX Plus API的访问。有关Prometheus-njs模块的更多信息,请参阅文档。 - 保存prometheus.conf,按照步骤 4检查语法是否正确,然后运行此命令以启动NGINX Plus。
$ sudo nginx设置Prometheus服务器(5:30)
- 新建一个YAML格式的Prometheus配置文件,命名为prometheus.yml,并将其放在/etc/prometheus目录中。文件内容如下(基于Prometheus网站提供的默认配置文件)。如图所示,只需进行一项更改:在targets字段中添加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文档。
- 保存prometheus.yml,然后运行以下命令。该命令会从Docker Hub拉取Prometheus,并通过端口9090对外提供服务。
$ sudo docker run --network="host" -d -p 9090:9090 -v ~/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus- 在浏览器中,访问新Prometheus服务器的IP地址和端口。出现如下所示的页面,即表示服务器正在运行。

- 验证Prometheus是否正在访问NGINX Plus指标源。单击窗口右上角 Execute按钮左侧的地球图标。随后会显示类似以下内容的指标列表。

设置Grafana服务器(9:15)
- 运行以下命令,从Docker Hub拉取Grafana,并通过端口 3000 对外提供访问:
[terminal]$ sudo docker run -d -p 3000:3000 grafana/grafana- 有关其他安装方法,请参阅Grafana 文档。
- 在浏览器中,访问新Grafana服务器的IP地址和端口。显示Grafana登录页面即表示服务器运行正常。

- 在“admin”和“电子邮件或用户名”及“密码”字段中均输入admin以登录。强烈建议按照提示设置新的安全密码,但为节省时间,本演示将跳过此步骤。
- 在显示的Grafana主页上,按照数据源中的说明,将Prometheus注册为Grafana文档。视频演示了在Grafana GUI中的操作步骤。注意:在Grafana说明的第5步中,请勿使用示例URL(http://localhost:9090),而应输入Prometheus服务器的IP地址(以及端口9090)。按照Grafana说明完成第7步并点击保存并测试按钮后,带有勾号的绿色框和数据源运行正常消息表示Grafana已成功连接到Prometheus服务器。


在Grafana中创建NGINX Plus图表(11:15)
Prometheus适合查看单项指标,而Grafana则便于在一张图表中查看一组指标。
创建Grafana图表:
- 单击页面左侧导航栏中的加号(+)(请参阅上一节第 4 步中的屏幕截图)。在创建下拉菜单中选择仪表板。
- 点击“添加空面板”框。
- 在显示的“New dashboard/Edit Panel”页面中,确认页面下半部分“Data source”字段的“Query”选项卡中显示Prometheus。如果未显示,请从下拉菜单中选择“Prometheus”。
- 在
nginx中输入 Metrics browser >。此时会显示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工作进程使用的私有内存,不包括共享库nginxplus_workers_mem_rss,NGINX工作进程使用的内存
- 从列表中选择一个指标(演示中选择的是
nginxplus_connections_active)。如需选择其他指标,请点击 + Query按钮,然后在新的 Metrics browser >字段中选择其他指标(演示中选择的是nginxplus_connections_idle)。 - 单击页面上半部分图表上方的“刷新”图标(两个首尾相接的箭头),结果将开始显示在图表中。

额外功能:统一洞察和分析所有NGINX Plus部署
您可能会问:“如果我有一个大型NGINX部署,其中包括许多NGINX Plus实例,该怎么办?”或者“如何根据Prometheus和Grafana提供的洞察和分析来更新实例配置?”NGINX Controller是我们面向NGINX部署的控制平面和管理平面解决方案,可帮助您解决这些问题以及更多其他问题。
Prometheus和Grafana是出色的监控、告警和可视化解决方案,但无法用于更新配置和策略。要根据这些洞察采取行动,仍需登录各个NGINX Plus实例进行更改。这不仅耗时,还容易出错,对于大规模且复杂的NGINX Plus部署尤其如此。

NGINX Controller可深入洞察和分析200多项NGINX Plus指标,包括每秒请求数、CPU使用率、4xx和5xx错误、运行状况检查失败等。这些信息均通过以应用为中心、直观且统一的平台呈现。随后,您可以深入分析数据、将数据导出为报告,并利用NGINX专家设计的自动化角色专属工作流,简化复杂操作,完成必要的配置和策略更改。
借助NGINX Controller,您可以随时掌握应用部署的运行状况,并大规模管理NGINX Plus实例和配置对象(例如Environments、Gateways和Apps)。同时,无需放弃常用的监控和告警解决方案;Controller采用API优先设计,可轻松直接地与第三方解决方案集成。
 
开始使用NGINX Plus和NGINX Controller
如果您尚未体验过NGINX Plus,不妨立即试用。它既可用作负载均衡器、反向代理和API网关,也可用作获得全面支持的Web服务器,并提供增强的监控和管理API。立即开始30天免费试用,或联系我们,讨论您的用例。
如果您认为NGINX Controller或许适合用于可视化和监控NGINX Plus集群,不妨了解一下30天免费试用,其中包括Application Delivery和API Management模块以及Controller App Security。
相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
