BLOG | NGINX

如何借助 Prometheus 和 Grafana 实现 NGINX Plus 可视化

NGINX-Part-of-F5-horiz-black-type-RGB
Monica Thorne 缩略图
Monica Thorne
Published September 23, 2021

我们在《如何提高 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 -tnginx: 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 的卓越性能。


"This blog post may reference products that are no longer available and/or no longer supported. For the most current information about available F5 NGINX products and solutions, explore our NGINX product family. NGINX is now part of F5. All previous NGINX.com links will redirect to similar NGINX content on F5.com."