正如我们在如何提高 Kubernetes 的可见性中所讨论的,应用程序开发和交付团队面临的最大挑战之一是深入了解应用程序的性能、安全性和可用性。 这些见解可帮助团队快速解决问题并主动为流量高峰做好准备。
流量管理工具(例如负载均衡器、反向代理、API 网关和 Ingress 控制器)会生成大量有关您的应用和基础设施健康状况的信息。 您可以在NGINX Plus 仪表板上实时跟踪这些宝贵的指标,并且 NGINX Plus 还可以将指标提供给第三方监控工具,以便您从一段时间内的性能可视化中获得额外的洞察。 两种最流行的工具协同工作,为您提供以下时间序列图:
Prometheus-njs模块可以轻松地将 NGINX Plus 指标提供给 Prometheus 和 Grafana。 它使用NGINX JavaScript 模块(NJS) 和NGINX Plus API将指标从 NGINX Plus 导出到 Prometheus 服务器。
在此视频演示中,我们介绍了设置 NGINX Plus、Prometheus 和 Grafana 以及构建 Grafana 图表的完整步骤。
为了帮助您建立自己的实施方案,我们总结了以下部分中的步骤,并映射到视频中的时间点:
笔记:
在开始演示之前,我们满足了以下先决条件。
安装Prometheus-njs模块。 我们在演示中使用 Ubuntu 20.04,这是适当的命令。 对于其他操作系统,请参阅文档。
$ sudo apt-get 安装 nginx-plus-module-prometheus
使用您喜欢的文本编辑器,打开/etc/nginx/nginx.conf并在http
块之外的顶级上下文中添加以下load_module
指令。
load_module modules/ngx_http_js_module.so;
# 现有的顶级指令
http {
#...
}
(可选)增加用于存储子请求的响应主体的缓冲区的大小(默认大小为 4 KB或 8 KB ,取决于平台)。 这可以防止在NGINX 错误日志中出现过
大的子
请求
响应
错误。 在http
块中添加以下subrequest_output_buffer_size
指令。
http { #...
子请求输出缓冲区大小 32k;
}
保存nginx.conf并运行此命令以验证 NGINX 配置在语法上是否正确。
$ sudo nginx -t nginx:配置文件 /etc/nginx/nginx.conf 语法正确 nginx:配置文件 /etc/nginx/nginx.conf 测试成功
将目录更改为conf.d并列出文件。
$ cd conf.d $ ls default.conf
default.conf文件定义了一个监听端口 80 的虚拟服务器。 Prometheus 的虚拟服务器需要监听该端口,因此请删除default.conf以释放它。
$ sudo rm default.conf
使用您喜欢的文本编辑器,创建一个名为prometheus.conf的新文件,其中包含以下内容。
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js;
服务器 {
位置 = /metrics {
js_content prometheus.metrics;
}
位置 /api {
api;
}
}
js_import
指令指定 NGINX JavaScript 代码的位置,该代码将NGINX Plus API生成的指标转换为 Prometheus 所需的格式。 (您也不需要为Prometheus-njs添加load_module
指令。)
第一个位置
块提供对 Prometheus 格式的指标的访问。 第二个位置
块启用NGINX Plus API ,它生成原始指标并将其公开给 Prometheus。
笔记: 在生产环境中,我们强烈建议限制对NGINX Plus API 的访问,如我们的文档中所述。
有关Prometheus-njs模块的更多信息,请参阅我们的文档。
保存prometheus.conf ,按照步骤 4检查语法是否正确,然后运行此命令来启动 NGINX Plus。
$ sudo nginx
在/etc/prometheus目录中创建一个名为prometheus.yml的新 YAML 格式的 Prometheus 配置文件,其中包含这些内容(基于 Prometheus 网站的默认配置文件)。 如图所示,要做的一项更改是在目标字段中添加 NGINX Plus 服务器的 IP 地址和端口。
全局:scrape_interval: 15s external_labels:监视器:'codelab-monitor' scrape_configs:-job_name:'prometheus' scrape_interval: 5s 静态配置:-目标:[' 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 指标的提要。 单击窗口右上角执行按钮左侧的地球图标。 出现如下的指标列表。
运行此命令从 Docker Hub 拉取 Grafana 并将其公开在端口 3000 上:
[终端]$ sudo docker run -d -p 3000:3000 grafana/grafana
有关其他安装方法,请参阅Grafana 文档。
在浏览器中,导航到新 Grafana 服务器的 IP 地址和端口。 Grafana 登录页面确认服务器正在运行。
通过在电子邮件或用户名和密码字段中输入admin来登录。 我们强烈建议您按照提示设置新的安全密码,但为了节省时间,我们在演示中跳过了该步骤。
在出现的 Grafana 主页上,按照Grafana 文档中的说明将 Prometheus 注册为数据源。 视频展示了 Grafana GUI 中的步骤。
笔记: 在 Grafana 说明的第 5 步中,不要输入显示的 URL 示例( http://localhost:9090 ),而是输入您的 Prometheus 服务器的 IP 地址(和端口 9090)。
单击 Grafana 说明第 7 步中的“保存并测试”按钮后,出现带勾号的绿色框和“数据源正在工作”消息,表明 Grafana 已成功连接到 Prometheus 服务器。
Prometheus 仅适用于查看一项指标,而 Grafana 可以轻松在单个图表上查看一组指标。
要构建 Grafana 图表:
单击页面左侧导航栏中的加号( + )(参见上一节步骤4的屏幕截图)。 在创建下拉菜单中选择仪表板。
单击添加空面板框。
在出现的新仪表板/编辑面板页面上,验证 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 工作者使用的私有内存,不包括共享库nginxplus_workers_mem_rss
– NGINX 工作进程使用的内存从列表中选择一个指标(在演示中我们选择nginxplus_connections_active
)。 要选择另一个指标,请单击+ 查询按钮,然后在新的指标浏览器 >字段中选择另一个指标(在演示中,我们选择nginxplus_connections_idle
)。
单击页面上半部分图表上方的“刷新”(两个箭头形成一个圆圈)图标,结果就会开始出现在图表上。
您可能会问“如果我有一个大型 NGINX 部署,包括许多 NGINX Plus 实例,该怎么办?”或“如何根据 Prometheus 和 Grafana 的洞察和分析来更新实例的配置?” NGINX Controller是我们针对 NGINX 部署的控制和管理平面解决方案,可帮助您解决这些问题以及更多问题。
虽然 Prometheus 和 Grafana 是监控、警报和可视化的出色解决方案,但它们没有提供更新配置和策略的方法。 基于这些见解采取行动仍然需要登录单个 NGINX Plus 实例进行更改,这可能非常耗时且容易出错——尤其是对于大型和复杂的 NGINX Plus 部署而言。
NGINX 控制器提供对 200 多个 NGINX Plus 指标的深入洞察和分析,包括每秒请求数、CPU 使用率、 4xx
和5xx
错误、健康检查失败等等——所有这些都呈现在以应用程序为中心、直观且统一的平台上。 然后,您可以深入研究数据,将其导出到报告中,并利用由 NGINX 专家设计的自动化、角色特定的工作流程进行必要的配置和策略更改,以消除复杂性。
使用 NGINX Controller,您可以随时掌握应用部署情况,并大规模控制 NGINX Plus 实例和配置对象(例如环境、网关和应用)。 而且您不必牺牲您最喜欢的监控和警报解决方案的使用;Controller 的 API 优先设计使得与第三方解决方案的集成变得非常简单和直接。
如果您还没有尝试过 NGINX Plus,我们鼓励您尝试一下——作为负载均衡器、反向代理和 API 网关,或者作为具有增强监控和管理 API 的完全支持的 Web 服务器。 立即开始30 天免费试用,或联系我们讨论您的用例。
如果您认为 NGINX Controller 可能是可视化和监控 NGINX Plus 集群的方式,请查看30 天免费试用版,其中包括带有 Controller App Security 的application交付和 API 管理模块。
“这篇博文可能引用了不再可用和/或不再支持的产品。 有关 F5 NGINX 产品和解决方案的最新信息,请探索我们的NGINX 产品系列。 NGINX 现在是 F5 的一部分。 所有之前的 NGINX.com 链接都将重定向至 F5.com 上的类似 NGINX 内容。”