NGINX.COM
Web Server Load Balancing with NGINX Plus

我们在《如何提高 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 API,不适用于 NGINX 开源版。
  • 如要使用 Prometheus、Grafana 和 NGINX Ingress Controller,请参阅我们的文档

前提条件

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

  1. 在 NGINX Plus 服务器上安装 NGINX Plus。出于演示目的,我们将进行干净的初始安装。如果您想要使用已有的 NGINX Plus 服务器,则可能需要在之后恢复在演示过程中对配置文件所做的更改。
  2. 在 NGINX Plus 服务器上安装 NGINX JavaScript (njs) 模块
  3. 在 Prometheus 服务器上安装最新版 Docker。在本演示中,我们按照常规做法,在第二台服务器上运行 Prometheus,与 NGINX Plus 分离开来。
  4. 在 Grafana 服务器(在本演示中为第三台服务器)上安装最新版 Docker。

设置 NGINX Plus 服务器 (1:20)

  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. 文件定义了一个监听端口 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

设置 Prometheus 服务器 (5:30)

  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) 4.按钮左侧的球体图标,将会出现一个指标列表,见下。

设置 Grafana 服务器 (9:15)

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

    $ 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 服务器。

在 Grafana 中创建 NGINX Plus 图形 (11:15)

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

Grafana 图形的构建方法:

  1. 点击页面(见前一节第 4 步中的截图)左侧导航栏中的加号 (+) 。在创建下拉菜单中选择仪表盘

  2. 点击 添加控面板框。

  3. 在打开的 New dashboard/Edit Panel 页面上,验证 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 Plus 部署的统一洞察和分析

您可能会问“如果我的 NGINX 部署规模非常大,包含了许多 NGINX Plus 实例怎么办?”或者“如何根据 Prometheus 和 Grafana 的洞察和分析结果更新实例的配置?”答案就是 NGINX Controller —— 这是一款面向 NGINX 部署的控制和管理平面解决方案,可让您的问题迎刃而解。

虽然 Prometheus 和 Grafana 是提供监控、告警和可视化的出色解决方案,但它们不提供更新配置和策略的方法。对于根据这些洞察所需采取的措施,您仍然需要登录到单个 NGINX Plus 实例进行更改,但这既耗时又容易出错,特别是对于复杂的大型 NGINX Plus 部署而言。

NGINX Controller 提供了对 200 多个 NGINX Plus 指标的深入洞察和分析,包括每秒请求数、CPU 使用率、4xx5xx 错误、健康检查失败等等,所有这些都在一个以应用为中心的直观、统一的平台上呈现。您可以深入研究数据,导出数据报告,并利用 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 的卓越性能。

Hero image
免费白皮书:
NGINX 企阅版全解析

助力企业用户规避开源治理风险,应对开源使用挑战

关于作者

Monica Thorne

Technical Marketing Engineer

关于 F5 NGINX

F5, Inc. 是备受欢迎的开源软件 NGINX 背后的商业公司。我们为现代应用的开发和交付提供一整套技术。我们的联合解决方案弥合了 NetOps 和 DevOps 之间的横沟,提供从代码到用户的多云应用服务。访问 nginx-cn.net 了解更多相关信息。