From fa8384ef797240ef930810d87b961e18e4e3532c Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Wed, 17 Jan 2024 15:22:52 -0700 Subject: [PATCH 1/4] Expose NGINX Plus dashboard Problem: As a user, I want observability into the NGINX Plus configuration and metrics. Solution: By exposing the NGINX Plus dashboard, a user can easily visualize real-time metrics and information about the configuration. --- .../mode/static/nginx/conf/nginx-plus.conf | 15 ++++++++ site/content/how-to/monitoring/dashboard.md | 32 ++++++++++++++++++ .../{monitoring.md => prometheus.md} | 4 +-- .../how-to/monitoring/troubleshooting.md | 2 +- site/static/img/nginx-plus-dashboard.png | Bin 0 -> 78194 bytes 5 files changed, 50 insertions(+), 3 deletions(-) create mode 100644 site/content/how-to/monitoring/dashboard.md rename site/content/how-to/monitoring/{monitoring.md => prometheus.md} (96%) create mode 100644 site/static/img/nginx-plus-dashboard.png diff --git a/internal/mode/static/nginx/conf/nginx-plus.conf b/internal/mode/static/nginx/conf/nginx-plus.conf index 0a35967d4e..f9e1b6bb37 100644 --- a/internal/mode/static/nginx/conf/nginx-plus.conf +++ b/internal/mode/static/nginx/conf/nginx-plus.conf @@ -26,6 +26,21 @@ http { sendfile on; tcp_nopush on; + server { + listen 8765; + root /usr/share/nginx/html; + access_log off; + + allow 127.0.0.1; + deny all; + + location = /dashboard.html {} + + location /api { + api write=off; + } + } + server { listen unix:/var/run/nginx/nginx-plus-api.sock; access_log off; diff --git a/site/content/how-to/monitoring/dashboard.md b/site/content/how-to/monitoring/dashboard.md new file mode 100644 index 0000000000..439a01035f --- /dev/null +++ b/site/content/how-to/monitoring/dashboard.md @@ -0,0 +1,32 @@ +--- +title: "NGINX Plus Dashboard" +description: "Learn how to view the NGINX Plus dashboard to see real-time metrics." +weight: 200 +toc: true +docs: "DOCS-000" +--- + +{{}} + +## Overview + +The NGINX Plus dashboard offers a real-time live activity monitoring interface that shows key load and performance metrics of your server infrastructure. The dashboard is enabled by default for NGINX Gateway Fabric deployments that use NGINX Plus as the data plane. The dashboard is available on port 8765. + +To access the dashboard: + +1. Use port-forwarding to forward connections to port 8080 on your local machine to port 8765 on the NGINX Gateway Fabric pod (replace `` with the actual name of the pod). + + {{< note >}}8080 is just an example local port. You can specify any unused port that you want.{{< /note >}} + + ```shell + kubectl port-forward 8080:8765 -n nginx-gateway + ``` + +1. Open your browser to [http://127.0.0.1:8080/dashboard.html](http://127.0.0.1:8080/dashboard.html) to access the dashboard. + +The dashboard will look like this: + +{{NGINX Plus dashboard}} + + +{{< note >}}The [API](https://nginx.org/en/docs/http/ngx_http_api_module.html), which the dashboard uses to get the metrics, is also accessible using the `/api` path.{{< /note >}} diff --git a/site/content/how-to/monitoring/monitoring.md b/site/content/how-to/monitoring/prometheus.md similarity index 96% rename from site/content/how-to/monitoring/monitoring.md rename to site/content/how-to/monitoring/prometheus.md index 137e55a511..662e06693f 100644 --- a/site/content/how-to/monitoring/monitoring.md +++ b/site/content/how-to/monitoring/prometheus.md @@ -1,6 +1,6 @@ --- -title: "Monitoring NGINX Gateway Fabric" -description: "Learn how to monitor your NGINX Gateway Fabric effectively. This guide provides easy steps for configuring monitoring settings and understanding key performance metrics." +title: "Prometheus Metrics" +description: "Learn how to monitor your NGINX Gateway Fabric effectively. This guide provides easy steps for configuring and understanding key performance metrics using Prometheus." weight: 100 toc: true docs: "DOCS-000" diff --git a/site/content/how-to/monitoring/troubleshooting.md b/site/content/how-to/monitoring/troubleshooting.md index ffce351540..10cd3606e3 100644 --- a/site/content/how-to/monitoring/troubleshooting.md +++ b/site/content/how-to/monitoring/troubleshooting.md @@ -1,7 +1,7 @@ --- title: "Troubleshooting" -weight: 200 +weight: 300 toc: true docs: "DOCS-000" --- diff --git a/site/static/img/nginx-plus-dashboard.png b/site/static/img/nginx-plus-dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..26f8726c225f5bc49d6d4a7e017050ced2c6224f GIT binary patch literal 78194 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 Date: Fri, 19 Jan 2024 14:44:10 -0700 Subject: [PATCH 2/4] Code review comments --- internal/mode/static/nginx/conf/nginx-plus.conf | 5 +---- site/content/how-to/monitoring/dashboard.md | 8 +++----- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/internal/mode/static/nginx/conf/nginx-plus.conf b/internal/mode/static/nginx/conf/nginx-plus.conf index f9e1b6bb37..07095e80cd 100644 --- a/internal/mode/static/nginx/conf/nginx-plus.conf +++ b/internal/mode/static/nginx/conf/nginx-plus.conf @@ -27,13 +27,10 @@ http { tcp_nopush on; server { - listen 8765; + listen 127.0.0.1:8765; root /usr/share/nginx/html; access_log off; - allow 127.0.0.1; - deny all; - location = /dashboard.html {} location /api { diff --git a/site/content/how-to/monitoring/dashboard.md b/site/content/how-to/monitoring/dashboard.md index 439a01035f..8f3a7b056f 100644 --- a/site/content/how-to/monitoring/dashboard.md +++ b/site/content/how-to/monitoring/dashboard.md @@ -14,15 +14,13 @@ The NGINX Plus dashboard offers a real-time live activity monitoring interface t To access the dashboard: -1. Use port-forwarding to forward connections to port 8080 on your local machine to port 8765 on the NGINX Gateway Fabric pod (replace `` with the actual name of the pod). - - {{< note >}}8080 is just an example local port. You can specify any unused port that you want.{{< /note >}} +1. Use port-forwarding to forward connections to port 8765 on your local machine to port 8765 on the NGINX Gateway Fabric pod (replace `` with the actual name of the pod). ```shell - kubectl port-forward 8080:8765 -n nginx-gateway + kubectl port-forward 8765:8765 -n nginx-gateway ``` -1. Open your browser to [http://127.0.0.1:8080/dashboard.html](http://127.0.0.1:8080/dashboard.html) to access the dashboard. +1. Open your browser to [http://127.0.0.1:8765/dashboard.html](http://127.0.0.1:8765/dashboard.html) to access the dashboard. The dashboard will look like this: From db4e6710f62cc103e25ea029e7b0e5df6ef07fc2 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Mon, 22 Jan 2024 09:59:22 -0700 Subject: [PATCH 3/4] Reapply allow/deny; fix image tag --- internal/mode/static/nginx/conf/nginx-plus.conf | 3 +++ site/content/how-to/monitoring/dashboard.md | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/internal/mode/static/nginx/conf/nginx-plus.conf b/internal/mode/static/nginx/conf/nginx-plus.conf index 07095e80cd..3ad03f2de6 100644 --- a/internal/mode/static/nginx/conf/nginx-plus.conf +++ b/internal/mode/static/nginx/conf/nginx-plus.conf @@ -31,6 +31,9 @@ http { root /usr/share/nginx/html; access_log off; + allow 127.0.0.1; + deny all; + location = /dashboard.html {} location /api { diff --git a/site/content/how-to/monitoring/dashboard.md b/site/content/how-to/monitoring/dashboard.md index 8f3a7b056f..f5a498a6d6 100644 --- a/site/content/how-to/monitoring/dashboard.md +++ b/site/content/how-to/monitoring/dashboard.md @@ -24,7 +24,7 @@ To access the dashboard: The dashboard will look like this: -{{NGINX Plus dashboard}} +{{}} {{< note >}}The [API](https://nginx.org/en/docs/http/ngx_http_api_module.html), which the dashboard uses to get the metrics, is also accessible using the `/api` path.{{< /note >}} From 2a8ba19c16354f3038de4abedaf5d6c97e9c2da8 Mon Sep 17 00:00:00 2001 From: Saylor Berman Date: Mon, 22 Jan 2024 11:26:13 -0700 Subject: [PATCH 4/4] Arch note --- site/content/overview/gateway-architecture.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/site/content/overview/gateway-architecture.md b/site/content/overview/gateway-architecture.md index cc44836d1c..d34e1c686a 100644 --- a/site/content/overview/gateway-architecture.md +++ b/site/content/overview/gateway-architecture.md @@ -92,6 +92,12 @@ The following list describes the connections, preceeded by their types in parent 1. (HTTP, HTTPS) A _client_ sends traffic to and receives traffic from any of the _NGINX workers_ on ports 80 and 443. 1. (HTTP, HTTPS) An _NGINX worker_ sends traffic to and receives traffic from the _backends_. +### Differences with NGINX Plus + +The previous diagram depicts NGINX Gateway Fabric using NGINX Open Source. NGINX Gateway Fabric with NGINX Plus has the following difference: + +- An _admin_ can connect to the NGINX Plus API using port 8765. NGINX only allows connections from localhost. + ## Pod readiness The `nginx-gateway` container includes a readiness endpoint available through the path `/readyz`. A [readiness probe](https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/#define-readiness-probes) periodically checks the endpoint on startup, returning a `200 OK` response when the pod can accept traffic for the data plane. Once the control plane successfully starts, the pod becomes ready.