我们在《如何提高 Kubernetes 中的可视化》一文中探讨过,如何获取关于应用性能、安全性及可用性的洞察是应用开发和交付团队面临的一大难题。这些洞察可帮助他们快速解决问题,并主动为流量高峰做好准备。
流量管理工具(例如负载均衡器、反向代理、API 网关和 Ingress Controller)会生成大量有关应用和基础架构健康状况的信息。您可以通过 NGINX Plus 的仪表盘实时跟踪这些重要指标,NGINX Plus 还可以将指标反馈给第三方监控工具,从而让您通过性能可视化获得更多洞察力。以下两个最热门的工具可协同为您提供这些时序图:
- Prometheus —— 云原生计算基金会 (CNCF) 的一个开源项目,具有监控和告警功能
- Grafana —— 一个开源的可视化和分析工具,可从时序数据库(例如 Prometheus)中生成图形及其他视图
Prometheus-njs 模块可轻松为 Prometheus 和 Grafana 提供 NGINX Plus 的指标。它使用 NGINX JavaScript module (NJS) 和 NGINX Plus API 将指标从 NGINX Plus 导出到 Prometheus 服务器。
在下面的视频演示中,我们介绍了设置 NGINX Plus、Prometheus 和 Grafana 及构建 Grafana 图形的完整步骤。
为了方便您设置和实施,我们现将各节步骤总结如下,并标注了视频中相应的时间点:
- 前提条件
- 设置 NGINX Plus 服务器 (1:20)
- 设置 Prometheus 服务器 (5:30)
- 设置 Grafana 服务器 (9:15)
- 在 Grafana 中创建 NGINX Plus 图形 (11:15)
注:
- 这些指令需要使用 NGINX Plus API,不适用于 NGINX 开源版。
- 如要使用 Prometheus、Grafana 和 NGINX Ingress Controller,请参阅我们的文档。
前提条件
在开始演示之前,我们要先满足以下前提条件。
- 在 NGINX Plus 服务器上安装 NGINX Plus。出于演示目的,我们将进行干净的初始安装。如果您想要使用已有的 NGINX Plus 服务器,则可能需要在之后恢复在演示过程中对配置文件所做的更改。
- 在 NGINX Plus 服务器上安装 NGINX JavaScript (njs) 模块。
- 在 Prometheus 服务器上安装最新版 Docker。在本演示中,我们按照常规做法,在第二台服务器上运行 Prometheus,与 NGINX Plus 分离开来。
- 在 Grafana 服务器(在本演示中为第三台服务器)上安装最新版 Docker。
设置 NGINX Plus 服务器 (1:20)
-
安装 Prometheus-njs 模块。我们在演示中使用的是 Ubuntu 20.04,以下是相关命令。有关其他操作系统,请参阅文档。
$ sudo apt-get install nginx-plus-module-prometheus
-
使用您喜欢的文本编辑器,打开 /etc/nginx/nginx.conf 并在
http
块外部的顶层上下文中添加以下load_module
指令。load_module modules/ngx_http_js_module.so; # existing top-level directives http { #... }
-
(可选步骤)增加用于存储子请求响应体的缓冲区大小(默认大小为 4KB 或 8KB,具体取决于平台)。这可以防止出现
too
big
subrequest
response
这一错误(NGINX 错误日志中可查)。 在http
块中添加以下subrequest_output_buffer_size
指令。http { #... subrequest_output_buffer_size 32k; }
-
保存 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
-
将目录更改为 conf.d,并列出文件。
$ cd conf.d $ ls 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; } }
js_import
指令指定了 NGINX JavaScript 代码的位置,该代码将 NGINX Plus API 生成的指标转换为 Prometheus 要求的格式。(无需为 Prometheus-njs 添加load_module
指令。)第一个
location
块支持访问 Prometheus 格式的指标。第二个location
块启用了 NGINX Plus API,后者生成原始指标并将其暴露给 Prometheus。注:在生产环境中,我们强烈建议限制访问 NGINX Plus API(如我们的文档所述。)
有关 Prometheus-njs 模块的更多信息,请参阅我们的文档。
-
保存 prometheus.conf,检查第 4 步中的语法会否正确,然后运行以下命令启动 NGINX Plus。
$ sudo nginx
设置 Prometheus 服务器 (5:30)
-
在 /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 文档。
-
保存 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) 4.按钮左侧的球体图标,将会出现一个指标列表,见下。
设置 Grafana 服务器 (9:15)
-
运行以下命令,从 Docker Hub 中拉取 Grafana 并将其暴露在端口 3000 上:
$ sudo docker run -d -p 3000:3000 grafana/grafana
有关其他安装方法,请参阅 Grafana 文档。
-
在浏览器中,导航到新 Grafana 服务器的 IP 地址和端口。Grafana 登录页面确认服务器正在工作。
-
在电子邮件或用户名和密码字段中输入 admin 登录 Grafana。我们强烈建议按照提示设置新的安全密码,但出于时间关系,我们在演示中跳过了这一步。
-
在打开的 Grafana 主页上,按照 Grafana 文档中的说明将 Prometheus 注册为数据源。该视频演示了 Grafana GUI 中的步骤。
注: 在 Grafana 指令的第 5 步中,输入 Prometheus 服务器的 IP 地址(和端口 9090),而不是显示的 URL 示例 (http://localhost:9090) 。
在 Grafana 指令的第 7 步,点击 保存并测试(Save & test) 按钮,带有复选标记的绿色框和 Data source is working(数据源正在工作) 消息表明 Grafana 已成功连接到 Prometheus 服务器。
在 Grafana 中创建 NGINX Plus 图形 (11:15)
Prometheus 适用于只查看一个指标,而 Grafana 支持在一个图形上轻松查看一系列指标。
Grafana 图形的构建方法:
-
点击页面(见前一节第 4 步中的截图)左侧导航栏中的加号 (+) 。在创建下拉菜单中选择仪表盘。
-
点击 添加控面板框。
-
在打开的 New dashboard/Edit Panel 页面上,验证 Prometheus 是否出现在页面下半部分的查询选项卡的数据源字段中。如果没有,从下拉下拉菜单中选择 Prometheus。
-
在指标浏览器 (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 进程使用的内存
-
从列表中选择一个指标(在本演示中,我们选择的是
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 实例和配置对象(例如环境、网关和应用)。此外,您不必放弃您最常用的监控和告警解决方案;Controller 的 API 优先设计使得其与第三方解决方案的集成变得简单而直接。
开始试用 NGINX Plus 和 NGINX Controller
如果您还不是 NGINX Plus 用户,我们建议您立即申请试用 —— 它可充当负载均衡器、反向代理和 API 网关,或者具备增强的监控和管理 API 的 Web 服务器,并且 NGINX 团队将提供支持服务。立即下载 30 天免费试用版,或 与我们联系以讨论您的用例。
如果您认为 NGINX Controller 可帮助您实现 NGINX Plus 设备群可视化和监控,请开启 30 天免费试用,体验应用交付和 API 管理模块以及 Controller App Security 的卓越性能。