Kubernetes에서 NGINX 메트릭 수집 및 OTel, Prometheus, Grafana 모니터링 구성 가이드
Kubernetes 환경에서 웹 트래픽을 처리하는 핵심 컴포넌트인 NGINX는 서비스의 안정성과 성능을 유지하기 위해 실시간 모니터링이 필수적입니다.
하지만 NGINX OSS는 기본적으로 메트릭 기능이 제한적이며, NGINX Plus는 별도의 Prometheus 모듈을 통해 풍부한 메트릭을 제공합니다.
이 문서에서는 NGINX의 메트릭을 수집하여 OpenTelemetry Collector → Prometheus → Grafana로 전달하고, 이를 시각화하는 엔드 투 엔드(end-to-end) 모니터링 구성 방법을 설명합니다.
또한 NGINX OSS와 NGINX Plus 각각의 배포 방식과 메트릭 처리 구조를 Kubernetes 환경 기준으로 실제 YAML 예제와 함께 다룹니다.
목차
1.환경 구성
2.NGINX 배포
2-1. NGINX Plus 이미지 생성
2-2. NGINX OSS 배포
2-3. NGINX Plus 배포
3. OpenTelemetry Collector 구성
4. Prometheus 구성
5. Grafana 구성 및 대시보드 설정
6. 결론
1. 환경 구성
- Kubernetes : v1.32.2
- Prometheus : 3.4.0
- NGINX Prometheus Exporter : 1.4
- NGINX Plus : R34
- NGINX OSS : 1.27.5
2. NGINX 배포
NGINX OSS의 경우는 자체적으로 Metrics을 제공하지 않기 때문에 NGINX Prometheus Exporter를 사용하여 Metrics을 노출할 수 있습니다. (제한적인 Metrics)
NGINX Plus의 경우 Prometheus 모듈을 제공하고 있기 때문에 Exporter를 사용하지 않고 Metrics을 노출할 수 있습니다. (많은 Metrics)
2-1. NGINX Plus 이미지 생성 (NGINX Plus)
NGINX 상업용 버전(Plus)을 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.
Docker Image를 빌드하여 Prometheus Module을 활성화 합니다.
ARG RELEASE=bookworm
FROM debian:${RELEASE}-slim
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
# Define NGINX versions for NGINX Plus and NGINX Plus modules
# Uncomment this block and the versioned nginxPackages block in the main RUN
# instruction to install a specific release
# ARG RELEASE
# ENV NGINX_VERSION=32
# ENV NGINX_PKG_RELEASE=1~${RELEASE}
# ENV NJS_VERSION=0.8.4
# ENV NJS_PKG_RELEASE=1~${RELEASE}
# ENV OTEL_VERSION=0.1.0
# ENV OTEL_PKG_RELEASE=1~${RELEASE}
# ENV PKG_RELEASE=1~${RELEASE}
# Download your NGINX license certificate and key from the F5 customer portal (https://account.f5.com) and copy to the build context
RUN --mount=type=secret,id=nginx-crt,dst=nginx-repo.crt \
--mount=type=secret,id=nginx-key,dst=nginx-repo.key \
set -x \
# Create nginx user/group first, to be consistent throughout Docker variants
&& groupadd --system --gid 101 nginx \
&& useradd --system --gid nginx --no-create-home --home /nonexistent --comment "nginx user" --shell /bin/false --uid 101 nginx \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y ca-certificates gnupg1 lsb-release \
&& \
NGINX_GPGKEYS="573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 8540A6F18833A80E9C1653A42FD21310B49F6B46 9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3"; \
NGINX_GPGKEY_PATH=/usr/share/keyrings/nginx-archive-keyring.gpg; \
export GNUPGHOME="$(mktemp -d)"; \
found=''; \
for NGINX_GPGKEY in $NGINX_GPGKEYS; do \
for server in \
hkp://keyserver.ubuntu.com:80 \
pgp.mit.edu \
; do \
echo "Fetching GPG key $NGINX_GPGKEY from $server"; \
gpg1 --keyserver "$server" --keyserver-options timeout=10 --recv-keys "$NGINX_GPGKEY" && found=yes && break; \
done; \
test -z "$found" && echo >&2 "error: failed to fetch GPG key $NGINX_GPGKEY" && exit 1; \
done; \
gpg1 --export "$NGINX_GPGKEYS" > "$NGINX_GPGKEY_PATH" ; \
rm -rf "$GNUPGHOME"; \
apt-get remove --purge --auto-remove -y gnupg1 && rm -rf /var/lib/apt/lists/* \
# Install the latest release of NGINX Plus and/or NGINX Plus modules (written and maintained by F5)
# Uncomment any desired module packages to install the latest release or use the versioned package format to specify a release
# For an exhaustive list of supported modules and how to install them, see https://docs.nginx.com/nginx/admin-guide/dynamic-modules/dynamic-modules/
&& nginxPackages=" \
nginx-plus \
nginx-plus-module-prometheus \ # NGINX Plus Prometheus 모듈 설치
# nginx-plus=${NGINX_VERSION}-${NGINX_PKG_RELEASE} \
# nginx-plus-module-geoip \
# nginx-plus-module-geoip=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-image-filter \
# nginx-plus-module-image-filter=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-njs \
# nginx-plus-module-njs=${NGINX_VERSION}+${NJS_VERSION}-${NJS_PKG_RELEASE} \
nginx-plus-module-otel \
# nginx-plus-module-otel=${NGINX_VERSION}+${OTEL_VERSION}-${OTEL_PKG_RELEASE} \
# nginx-plus-module-perl \
# nginx-plus-module-perl=${NGINX_VERSION}-${PKG_RELEASE} \
# nginx-plus-module-xslt \
# nginx-plus-module-xslt=${NGINX_VERSION}-${PKG_RELEASE} \
" \
&& echo "Acquire::https::pkgs.nginx.com::Verify-Peer \"true\";" > /etc/apt/apt.conf.d/90nginx \
&& echo "Acquire::https::pkgs.nginx.com::Verify-Host \"true\";" >> /etc/apt/apt.conf.d/90nginx \
&& echo "Acquire::https::pkgs.nginx.com::SslCert \"/etc/ssl/nginx/nginx-repo.crt\";" >> /etc/apt/apt.conf.d/90nginx \
&& echo "Acquire::https::pkgs.nginx.com::SslKey \"/etc/ssl/nginx/nginx-repo.key\";" >> /etc/apt/apt.conf.d/90nginx \
&& echo "deb [signed-by=$NGINX_GPGKEY_PATH] https://pkgs.nginx.com/plus/debian `lsb_release -cs` nginx-plus\n" > /etc/apt/sources.list.d/nginx-plus.list \
&& mkdir -p /etc/ssl/nginx \
&& cat nginx-repo.crt > /etc/ssl/nginx/nginx-repo.crt \
&& cat nginx-repo.key > /etc/ssl/nginx/nginx-repo.key \
&& apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y $nginxPackages curl gettext-base \
&& apt-get remove --purge -y lsb-release \
&& apt-get remove --purge --auto-remove -y && rm -rf /var/lib/apt/lists/* /etc/apt/sources.list.d/nginx-plus.list \
&& rm -rf /etc/apt/apt.conf.d/90nginx /etc/ssl/nginx \
# Forward request logs to Docker log collector
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80
STOPSIGNAL SIGQUIT
CMD ["nginx", "-g", "daemon off;"]
위의 Dockerfile을 저장한 후 빌드하여 이미지를 레지스트리에 배포합니다.

2-2. NGINX OSS 배포
NGINX OSS는 Prometheus 모듈을 사용할 수 없기 때문에 NGINX Prometheus Exporter를 Sidecar 형태로 붙여서 배포합니다.
apiVersion: v1
kind: Service
metadata:
name: nginx-svc
spec:
selector:
app: nginx
ports:
- name: pages
port: 80
targetPort: 80
- name: exporter
port: 9113
targetPort: 9113
type: NodePort # NodePort로 배포하여 확인합니다.
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-config
data:
default.conf: |
server {
listen 80;
access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 8080;
location /metrics {
stub_status; # NGINX 기본 상태를 확인할 수 있는 stub_status를 통해 Exporter에서 해당 정보를 가지고 Metrics 노출할 수 있도록 구성합니다.
}
}
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.27.5
ports:
- containerPort: 80
volumeMounts:
- name: config-volume # NGINX 기본 구성을 Configmap을 이용하여 변경합니다.
mountPath: /etc/nginx/conf.d/default.conf
subPath: default.conf
- name: nginx-exporter
image: nginx/nginx-prometheus-exporter:latest
args:
- "-nginx.scrape-uri=http://localhost:8080/metrics" # stub_status의 Endpoint를 지정합니다.
ports:
- containerPort: 9113 # nginx-exporter에서 사용하는 9113 포트를 지정합니다.
volumes:
- name: config-volume
configMap:
name: nginx-config
위의 구성을 배포합니다.
kubectl apply -f nginx-oss.yaml -n [namespace]
NGINX OSS의 배포 현황은 아래와 같습니다.

배포가 완료된 후 9113 포트의 /metrics 엔드포인트에 접속하게 되면 NGINX 기본 정보의 Metrics을 확인할 수 있습니다.

2-3. NGINX Plus 배포
NGINX 상업용 버전(Plus)을 직접 사용해 보시려면 30일 무료 평가판을 신청하거나 NGINX STORE에 연락하여 논의하십시오.
NGINX Plus는 구성 전 JWT 라이선스 파일을 Secret으로 지정하여 Deployment에서 가져올 수 있도록 지정해야합니다.

NGINX Plus의 Manifest를 구성합니다.
apiVersion: v1
kind: Service
metadata:
name: nginx-plus-svc
spec:
selector:
app: nginx-plus
ports:
- name: pages
port: 80
targetPort: 80
- name: metrics
port: 8080
targetPort: 8080
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-plus
spec:
replicas: 1
selector:
matchLabels:
app: nginx-plus
template:
metadata:
labels:
app: nginx-plus
spec:
containers:
- name: nginx-plus
image: [NGINX Plus Image]
ports:
- containerPort: 80
- containerPort: 8080
volumeMounts:
- name: config-volume
mountPath: /etc/nginx/nginx.conf
subPath: nginx.conf
- name: nginx-plus-license # NGINX Plus의 라이선스 인증용입니다.
mountPath: /etc/nginx/license.jwt
subPath: license.jwt
imagePullSecrets:
- name: regcred
volumes:
- name: config-volume
configMap:
name: nginx-conf
- name: nginx-plus-license
secret:
secretName: jwt-secret
---
apiVersion: v1
kind: ConfigMap
metadata:
name: nginx-conf
data:
nginx.conf: |
load_module modules/ngx_http_js_module.so; # javascript 모듈을 불러옵니다.
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
log_format main '$remote_addr - $server_name - $remote_user [$time_local] "$request" '
'$status response_body_size : $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$server_port"';
access_log /var/log/nginx/access.log main;
js_import /usr/share/nginx-plus-module-prometheus/prometheus.js; # prometheus 모듈을 사용하기 위해 prometheus.js을 가져옵니다.
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
server {
listen 8080;
location = /metrics {
js_content prometheus.metrics; # 해당 endpoint에 메트릭을 활성화합니다.
}
location /api {
api; # Prometheus 모듈을 사용하기 위해 NGINX Plus의 자체 API를 활성화합니다.
}
}
}
NGINX Plus를 배포합니다.
kubectl apply -f nginx-plus.yaml -n [namespace]
NGINX Plus 배포 현황은 아래와 같습니다.

NGINX OSS와 달리 NGINX Plus에서는 자체 API를 제공하고 있기 때문에 여러가지 메트릭을 확인할 수 있습니다.

3. OpenTelemetry 구성 및 배포
OpenTelemetry를 배포하여 NGINX의 메트릭을 수집합니다.
apiVersion: v1
kind: ConfigMap
metadata:
name: otel-collector-conf
labels:
app: opentelemetry
data:
otel-collector-config.yaml: |
receivers:
prometheus:
config:
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ['nginx-plus-svc.nginx-plus.svc.cluster.local:8080'] # NGINX Metrics Kube DNS URL (NGINX Plus)
# - targets: ['nginx-svc.nginx.svc.cluster.local:9113'] # NGINX Exporter Metrics KubeDNS URL (NGINX OSS)
exporters:
prometheus:
endpoint: "0.0.0.0:9110" # Prometheus에서 Metrics을 수집할 수 있도록 OpenTelemetry에서 9110 포트로 /metrics 엔드 포인트에서 NGINX 메트릭을 노출합니다.
processors: # processors를 이용하여 Metrics 데이터를 수정할 수 있습니다. 예제에서는 Metrics 데이터를 수정하지 않았습니다.
batch:
service:
pipelines: # 파이프 라인을 이용하여 NGINX 메트릭을 수집한 후 Prometheus로 전달합니다.
metrics:
receivers: [prometheus]
processors: [batch]
exporters: [prometheus]
---
apiVersion: v1
kind: Service
metadata:
name: otel-collector-svc
labels:
app: opentelemetry
spec:
selector:
app: opentelemetry
ports:
- name: export-prometheus # Prometheus에서 수집할 수 있도록 지정합니다.
port: 9110
targetPort: 9110
type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: otel-collector
labels:
app: opentelemetry
spec:
selector:
matchLabels:
app: opentelemetry
replicas:
template:
metadata:
labels:
app: opentelemetry
spec:
containers:
- command:
- "/otelcol"
- "--config=/conf/otel-collector-config.yaml"
image: otel/opentelemetry-collector:latest
name: otel-collector
ports:
- containerPort: 9110
volumeMounts:
- name: otel-collector-config
mountPath: /conf/otel-collector-config.yaml
subPath: otel-collector-config.yaml
volumes:
- name: otel-collector-config
configMap:
name: otel-collector-conf
OpenTelemetry를 배포합니다.
(NGINX Plus)

(NGINX OSS)

OpenTelemetry의 Port로 /metrics 엔드포인트로 접속하게 된다면 NGINX의 메트릭을 확인할 수 있습니다.
(NGINX Plus)

(NGINX OSS)

OpenTelemetry의 Metrics를 Prometheus가 전달 받아 Grafana로 전달할 수 있도록 Prometheus를 배포합니다.
4. Prometheus 구성 및 배포
Proemtheus를 배포하여 OpenTelemetry의 Metrics를 전달 받을 수 있도록 구성합니다.
apiVersion: v1
kind: Service
metadata:
name: prometheus-service
spec:
selector:
app: prometheus
ports:
- port: 9090
targetPort: 9090
type: NodePort
---
apiVersion: v1
kind: ConfigMap
metadata:
name: prometheus-conf
labels:
name: prometheus-conf
data:
prometheus.yml: |-
global:
scrape_interval: 1s # 1초 단위로 Metrics를 가져옵니다.
scrape_configs:
- job_name: 'nginx'
static_configs:
- targets: ["otel-collector-svc.nginx-plus.svc.cluster.local:9110"] # OpenTelemetry의 KubeDNS URL을 작성합니다. (NGINX Plus)
- targets: ["otel-collector-svc.nginx-plus.svc.cluster.local:9110"] # OpenTelemetry의 KubeDNS URL을 작성합니다. (NGINX OSS)
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: prometheus-deployment
labels:
app: prometheus
spec:
replicas: 1
selector:
matchLabels:
app: prometheus
template:
metadata:
labels:
app: prometheus
spec:
containers:
- name: prometheus
image: prom/prometheus
ports:
- containerPort: 9090
volumeMounts:
- name: prometheus-config
mountPath: /etc/prometheus/prometheus.yml
subPath: prometheus.yml
volumes:
- name: prometheus-config
configMap:
name: prometheus-conf
Promethues를 배포합니다.
(NGINX Plus)

(NGINX OSS)

Prometheus에서 NGINX Metrics을 확인할 수 있습니다.
(NGINX Plus)


(NGINX OSS)


아래와 같이 Prometheus의 쿼리를 통해 Metrics을 확인할 수 있습니다.
(NGINX Plus)

(NGINX OSS)

Grafana를 배포하고 NGINX의 공식 Grafana 대시보드를 이용하여 메트릭을 시각화합니다.
5. Grafana 배포 및 대시보드 추가
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: grafana
name: grafana
spec:
selector:
matchLabels:
app: grafana
template:
metadata:
labels:
app: grafana
spec:
containers:
- name: grafana
image: grafana/grafana:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 3000
name: http-grafana
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: grafana
spec:
selector:
app: grafana
ports:
- port: 3000
targetPort: 3000
type: NodePort
Grafana를 배포합니다.

Grafana에 접속하여 Prometheus Data Source를 연동합니다. (초기 ID, PW : ADMIN)
Connection -> Data Sources -> Prometheus 로 이동하여 배포했었던 Prometheus의 KubeDNS URL을 등록합니다.


등록완료 후 NGINX의 공식 Dashboard를 이용하여 Kubernetes 환경의 NGINX의 메트릭 시각화하여 확인할 수 있습니다
NGINX Plus의 대쉬보드가 안될경우 아래의 수정된 Dashboard를 사용합니다.
NGINX Plus Dashboard (수정)
{
"annotations": {
"list": [
{
"builtIn": 1,
"datasource": {
"type": "datasource",
"uid": "grafana"
},
"enable": true,
"hide": true,
"iconColor": "rgba(0, 211, 255, 1)",
"name": "Annotations & Alerts",
"target": {
"limit": 100,
"matchAny": false,
"tags": [],
"type": "dashboard"
},
"type": "dashboard"
}
]
},
"description": "Nginx plus native observability, through the dynamic module api output nginx plus real-time status data, including global statistics, ssl status, server / location / upstream status, upstream server active health check results. Enhance the reliability of nginx plus business operation, you can Inherit to any environment, including kubernetes.",
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 0,
"id": 3,
"links": [],
"panels": [
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 0
},
"id": 40,
"panels": [],
"title": "Global Performance",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"filterable": true,
"inspect": false
},
"decimals": 1,
"mappings": [
{
"options": {
"0": {
"index": 1,
"text": "Down"
},
"1": {
"index": 0,
"text": "Up"
}
},
"type": "value"
}
],
"max": 1,
"min": 0,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Status"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"mode": "gradient",
"type": "color-background"
}
},
{
"id": "custom.width",
"value": 100
}
]
},
{
"matcher": {
"id": "byName",
"options": "address"
},
"properties": [
{
"id": "custom.width",
"value": 150
}
]
},
{
"matcher": {
"id": "byName",
"options": "version"
},
"properties": [
{
"id": "custom.width",
"value": 150
}
]
},
{
"matcher": {
"id": "byName",
"options": "build"
},
"properties": [
{
"id": "custom.width",
"value": 150
}
]
}
]
},
"gridPos": {
"h": 9,
"w": 8,
"x": 0,
"y": 1
},
"id": 39,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"enablePagination": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"frameIndex": 1,
"showHeader": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(up{ job=\"$job\"}) by (instance) ",
"format": "table",
"instant": true,
"interval": "",
"legendFormat": "__auto",
"range": false,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "nginxplus_nginx_config_generation{ job=\"$job\"}",
"format": "table",
"hide": false,
"instant": true,
"interval": "",
"legendFormat": "__auto",
"range": false,
"refId": "B"
}
],
"title": "NGINX INSTANCE Status",
"transformations": [
{
"id": "merge",
"options": {}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"Value #B": true,
"__name__": true,
"job": true,
"ppid": true,
"version": false
},
"indexByName": {
"Time": 0,
"Value #A": 5,
"Value #B": 9,
"__name__": 6,
"address": 4,
"build": 2,
"instance": 1,
"job": 7,
"ppid": 8,
"version": 3
},
"renameByName": {
"Time": "",
"Value": "Status",
"Value #A": "Status",
"__name__": "",
"server": "Server",
"upstream": "Upstream"
}
}
}
],
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 8,
"x": 8,
"y": 1
},
"id": 47,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "nginxplus_http_requests_current",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Current {{instance}}",
"range": true,
"refId": "C"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_http_requests_total{job=\"$job\"}[$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Request/s {{instance}}",
"range": true,
"refId": "D"
}
],
"title": "NGINX INSTANCE HTTP Performance",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 8,
"x": 16,
"y": 1
},
"id": 43,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "nginxplus_connections_active{job=\"$job\"}",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "curConn - {{instance}}",
"range": true,
"refId": "G"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_connections_accepted{job=\"$job\"}[$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "CPS {{instance}}",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_connections_idle{job=\"$job\"}[$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Idle {{instance}}",
"range": true,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_connections_dropped{job=\"$job\"}[$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Drop - {{instance}}",
"range": true,
"refId": "C"
}
],
"title": "NGINX Plus Connections",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 0,
"y": 10
},
"id": 60,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_nginx_config_generation_total{job='$job'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "INSTANCE Counts",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 4,
"y": 10
},
"id": 62,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_server_zone_requests_total{job='$job'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Server Zone Counts",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 8,
"y": 10
},
"id": 61,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_location_zone_requests_total{job='$job'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Location Counts",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "percentunit"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 12,
"y": 10
},
"id": 54,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_upstream_server_state{job='$job', server=~\".+\", upstream=~\".+\" } == 1) / count(nginxplus_upstream_server_state{job='$job'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Availability",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 16,
"y": 10
},
"id": 55,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_upstream_server_state{job='$job'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Counts",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "semi-dark-red",
"mode": "fixed"
},
"mappings": [],
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 5,
"w": 4,
"x": 20,
"y": 10
},
"id": 59,
"options": {
"colorMode": "background_solid",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_upstream_server_state{job='$job'} != 1 )",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Unhealthy",
"type": "stat"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 15
},
"id": 48,
"panels": [],
"title": "Instance SSL Performance",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "TPS"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 8,
"x": 0,
"y": 16
},
"id": 45,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "rate(nginxplus_ssl_handshakes_total{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Handshakes",
"range": true,
"refId": "C"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_session_reuses{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Session Reuses",
"range": true,
"refId": "D"
}
],
"title": "SSL Handshake Successfully",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "TPS"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 8,
"x": 8,
"y": 16
},
"id": 46,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "rate(nginxplus_ssl_handshake_timeout_total{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Handshake Timeout",
"range": true,
"refId": "G"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_handshakes_failed{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Handshake Failed",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_no_common_cipher{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "No Common Cipher",
"range": true,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_no_common_protocol{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "No Common Prototocol",
"range": true,
"refId": "C"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_peer_rejected_cert{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Rejected Cert",
"range": true,
"refId": "D"
}
],
"title": "SSL Handshake Failed",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "TPS"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 8,
"x": 16,
"y": 16
},
"id": 49,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "rate(nginxplus_ssl_verify_failures_expired_cert_total{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"interval": "",
"legendFormat": "Expired Cert",
"range": true,
"refId": "E"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_verify_failures_no_cert{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "No Cert",
"range": true,
"refId": "F"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_verify_failures_other{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Other",
"range": true,
"refId": "H"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_verify_failures_revoked_cert{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Revoked Cert",
"range": true,
"refId": "I"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_ssl_verify_failures_hostname_mismatch{instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Hostname Mismatch",
"range": true,
"refId": "J"
}
],
"title": "SSL Verify Failures",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 25
},
"id": 36,
"panels": [],
"title": "Server Status",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "semi-dark-red",
"mode": "fixed"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"filterable": false,
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "4xx"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"mode": "gradient",
"type": "color-background"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "5xx"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"mode": "gradient",
"type": "color-background"
}
}
]
}
]
},
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 26
},
"id": 33,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"enablePagination": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"frameIndex": 0,
"showHeader": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_responses{server_zone=~\".+\", code=\"1xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_responses{server_zone=~\".+\", code=\"2xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_responses{server_zone=~\".+\", code=\"3xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "C"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_responses{server_zone=~\".+\", code=\"4xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "D"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_responses{server_zone=~\".+\", code=\"5xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "E"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_requests{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "F"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_server_zone_requests{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"} [$__rate_interval]) ",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "G"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "nginxplus_server_zone_processing{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"}",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "H"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_received{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "I"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_server_zone_sent{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"}[$__range])) by (server_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "J"
}
],
"title": "Server Requests / Responses",
"transformations": [
{
"id": "merge",
"options": {}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"__name__": true,
"instance": true,
"job": true
},
"indexByName": {
"Time": 0,
"Value #A": 5,
"Value #B": 6,
"Value #C": 7,
"Value #D": 8,
"Value #E": 9,
"Value #F": 2,
"Value #G": 3,
"Value #H": 4,
"__name__": 12,
"instance": 10,
"job": 11,
"server_zone": 1
},
"renameByName": {
"Value #A": "1xx",
"Value #B": "2xx",
"Value #C": "3xx",
"Value #D": "4xx",
"Value #E": "5xx",
"Value #F": "Total",
"Value #G": "Req/s",
"Value #H": "Current",
"Value #I": "Bytes Recvd",
"Value #J": "Bytes Send",
"instance": "",
"job": "",
"server_zone": ""
}
}
}
],
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "reqps"
},
"overrides": []
},
"gridPos": {
"h": 9,
"w": 24,
"x": 0,
"y": 33
},
"id": 34,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "rate(nginxplus_server_zone_requests_total{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "{{server_zone}}",
"range": true,
"refId": "G"
}
],
"title": "Server Zone - HTTP TPS",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 42
},
"id": 52,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "sum by (server_zone) (\r\n rate(nginxplus_server_zone_responses_codes_total{code=~\"1[0-9][0-9]\"}[$__rate_interval])\r\n)",
"hide": false,
"instant": false,
"legendFormat": "1xx - {{server_zone}}",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "sum by (server_zone) (\r\n rate(nginxplus_server_zone_responses_codes_total{code=~\"2[0-9][0-9]\"}[$__rate_interval])\r\n)",
"hide": false,
"instant": false,
"legendFormat": "2xx - {{server_zone}}",
"range": true,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "sum by (server_zone) (\r\n rate(nginxplus_server_zone_responses_codes_total{code=~\"3[0-9][0-9]\"}[$__rate_interval])\r\n)",
"hide": false,
"instant": false,
"legendFormat": "3xx - {{server_zone}}",
"range": true,
"refId": "C"
}
],
"title": "Server Zone - HTTP Response 1xx/2xx/3xx",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "light-red",
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 25,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "normal"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 42
},
"id": 53,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum by (server_zone) (\r\n rate(nginxplus_server_zone_responses_codes_total{code=~\"4[0-9][0-9]\"}[$__rate_interval])\r\n)",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "4xx - {{server_zone}}",
"range": true,
"refId": "D"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum by (server_zone) (\r\n rate(nginxplus_server_zone_responses_codes_total{code=~\"5[0-9][0-9]\"}[$__rate_interval])\r\n)",
"hide": false,
"instant": false,
"legendFormat": "5xx - {{server_zone}}",
"range": true,
"refId": "E"
}
],
"title": "Server Zone - HTTP Response 4xx/5xx",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "bytes"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 50
},
"id": 38,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "rate(nginxplus_server_zone_received_total{server_zone=~\".+\"}[$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Bytes recvd {{server_zone}}",
"range": true,
"refId": "A"
}
],
"title": "Server Zone - Traffic In",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "bytes"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 50
},
"id": 50,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "rate(nginxplus_server_zone_sent_total{server_zone=~\".+\", instance=\"$instance\", job=\"$job\"} [$__rate_interval])",
"format": "time_series",
"hide": false,
"instant": false,
"legendFormat": "Bytes send {{server_zone}}",
"range": true,
"refId": "G"
}
],
"title": "Server Zone - Traffic Out",
"type": "timeseries"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 58
},
"id": 35,
"panels": [],
"title": "Location Zone",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "red",
"mode": "fixed"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"filterable": false,
"inspect": false
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "4xx"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"mode": "gradient",
"type": "color-background"
}
}
]
},
{
"matcher": {
"id": "byName",
"options": "5xx"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"mode": "gradient",
"type": "color-background"
}
}
]
}
]
},
"gridPos": {
"h": 7,
"w": 24,
"x": 0,
"y": 59
},
"id": 51,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"enablePagination": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"frameIndex": 0,
"showHeader": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_responses_total{location_zone=~\".+\", code=\"1xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_responses_total{location_zone=~\".+\", code=\"2xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_responses_total{location_zone=~\".+\", code=\"3xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "C"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_responses_total{location_zone=~\".+\", code=\"4xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "D"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_responses_total{location_zone=~\".+\", code=\"5xx\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "E"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_requests_total{location_zone=~\".+\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "F"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "irate(nginxplus_location_zone_requests_total{location_zone=~\".+\", instance=\"$instance\", job=\"$job\"} [$__range]) ",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "G"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_received_total{location_zone=~\".+\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "I"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(increase(nginxplus_location_zone_sent_total{location_zone=~\".+\", instance=\"$instance\", job=\"$job\"}[$__range])) by (location_zone)",
"format": "table",
"hide": false,
"instant": true,
"legendFormat": "__auto",
"range": false,
"refId": "J"
}
],
"title": "Location Requests / Responses",
"transformations": [
{
"id": "merge",
"options": {}
},
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true,
"__name__": true,
"instance": true,
"job": true
},
"indexByName": {
"Time": 0,
"Value #A": 4,
"Value #B": 5,
"Value #C": 6,
"Value #D": 7,
"Value #E": 8,
"Value #F": 2,
"Value #G": 3,
"Value #I": 11,
"Value #J": 12,
"instance": 9,
"job": 10,
"location_zone": 1
},
"renameByName": {
"Value #A": "1xx",
"Value #B": "2xx",
"Value #C": "3xx",
"Value #D": "4xx",
"Value #E": "5xx",
"Value #F": "Total",
"Value #G": "Req/s",
"Value #H": "Current",
"Value #I": "Bytes Recvd",
"Value #J": "Bytes Send",
"instance": "",
"job": "",
"location_zone": "Location Zone",
"server_zone": ""
}
}
}
],
"type": "table"
},
{
"collapsed": false,
"gridPos": {
"h": 1,
"w": 24,
"x": 0,
"y": 66
},
"id": 37,
"panels": [],
"title": "Upstream Zone",
"type": "row"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-GrYlRd"
},
"custom": {
"align": "auto",
"cellOptions": {
"type": "auto"
},
"filterable": true,
"inspect": false
},
"decimals": 1,
"mappings": [
{
"options": {
"1": {
"index": 0,
"text": "Up"
},
"2": {
"index": 1,
"text": "Draining"
},
"3": {
"index": 2,
"text": "Down"
},
"4": {
"index": 3,
"text": "Unavail"
},
"5": {
"index": 4,
"text": "Checking"
},
"6": {
"index": 5,
"text": "Unhealthy"
}
},
"type": "value"
}
],
"max": 6,
"min": 1,
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
}
]
},
"unit": "short"
},
"overrides": [
{
"matcher": {
"id": "byName",
"options": "Status"
},
"properties": [
{
"id": "custom.cellOptions",
"value": {
"mode": "gradient",
"type": "color-background"
}
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 7,
"x": 0,
"y": 67
},
"id": 16,
"options": {
"cellHeight": "sm",
"footer": {
"countRows": false,
"enablePagination": false,
"fields": "",
"reducer": [
"sum"
],
"show": false
},
"frameIndex": 1,
"showHeader": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": false,
"expr": "sum(nginxplus_upstream_server_state{server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}) by (upstream,server) ",
"format": "table",
"instant": true,
"interval": "",
"legendFormat": "__auto",
"range": false,
"refId": "A"
}
],
"title": "Upstream Server State (De-duplication)",
"transformations": [
{
"id": "organize",
"options": {
"excludeByName": {
"Time": true
},
"indexByName": {
"Time": 0,
"Value": 3,
"server": 2,
"upstream": 1
},
"renameByName": {
"Time": "",
"Value": "Status",
"server": "Server",
"upstream": "Upstream"
}
}
}
],
"type": "table"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 7,
"y": 67
},
"id": 58,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_upstream_server_state{job='$job', instance='$instance'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Counts",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "continuous-RdYlGr"
},
"mappings": [],
"max": 1,
"min": 0,
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "percentunit"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 4,
"x": 11,
"y": 67
},
"id": 57,
"options": {
"colorMode": "value",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_upstream_server_state{job='$job', instance='$instance', server=~\".+\", upstream=~\".+\" } == 1) / count(nginxplus_upstream_server_state{job='$job', instance='$instance'})",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Availability",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 9,
"x": 15,
"y": 67
},
"id": 18,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "irate(nginxplus_upstream_server_requests_total{server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"interval": "",
"legendFormat": "{{upstream}} - {{server}}",
"range": true,
"refId": "A"
}
],
"title": "Upstream Server TPS",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"fixedColor": "semi-dark-red",
"mode": "fixed"
},
"mappings": [],
"thresholds": {
"mode": "percentage",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "short"
},
"overrides": []
},
"gridPos": {
"h": 4,
"w": 4,
"x": 7,
"y": 71
},
"id": 56,
"options": {
"colorMode": "background_solid",
"graphMode": "none",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"expr": "count(nginxplus_upstream_server_state{job='$job', instance='$instance'} != 1 )",
"instant": false,
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Unhealthy",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "reqps"
},
"overrides": [
{
"__systemRef": "hideSeriesFrom",
"matcher": {
"id": "byNames",
"options": {
"mode": "exclude",
"names": [
"2xx - index_8080 - 127.0.0.1:8080"
],
"prefix": "All except:",
"readOnly": true
}
},
"properties": [
{
"id": "custom.hideFrom",
"value": {
"legend": false,
"tooltip": false,
"viz": true
}
}
]
}
]
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 75
},
"id": 22,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "rate(nginxplus_upstream_server_responses_total{code=\"1xx\", server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"hide": false,
"interval": "",
"legendFormat": "1xx - {{upstream}} - {{server}}",
"range": true,
"refId": "B"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "rate(nginxplus_upstream_server_responses_total{code=\"2xx\", server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"interval": "",
"legendFormat": "2xx - {{upstream}} - {{server}}",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "rate(nginxplus_upstream_server_responses_total{code=\"3xx\", server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"hide": false,
"interval": "",
"legendFormat": "3xx - {{upstream}} - {{server}}",
"range": true,
"refId": "C"
}
],
"title": "Upstream Server Resp 1xx/2xx/3xx",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 10,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "never",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
},
"unit": "reqps"
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 75
},
"id": 20,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "multi",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "rate(nginxplus_upstream_server_responses_total{code=\"4xx\", server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"hide": false,
"interval": "",
"legendFormat": "4xx - {{upstream}} - {{server}}",
"range": true,
"refId": "A"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "rate(nginxplus_upstream_server_responses_total{code=\"5xx\", server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"hide": false,
"interval": "",
"legendFormat": "5xx - {{upstream}} - {{server}}",
"range": true,
"refId": "B"
}
],
"title": "Upstream Server Resp 4xx/5xx",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "miliseconds",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 83
},
"id": 28,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "nginxplus_upstream_server_response_time{server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}",
"interval": "",
"legendFormat": "{{upstream}} - {{server}}",
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Resp Time",
"type": "timeseries"
},
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"description": "",
"fieldConfig": {
"defaults": {
"color": {
"mode": "palette-classic"
},
"custom": {
"axisBorderShow": false,
"axisCenteredZero": false,
"axisColorMode": "text",
"axisLabel": "",
"axisPlacement": "auto",
"barAlignment": 0,
"barWidthFactor": 0.6,
"drawStyle": "line",
"fillOpacity": 0,
"gradientMode": "none",
"hideFrom": {
"legend": false,
"tooltip": false,
"viz": false
},
"insertNulls": false,
"lineInterpolation": "linear",
"lineWidth": 1,
"pointSize": 5,
"scaleDistribution": {
"type": "linear"
},
"showPoints": "auto",
"spanNulls": false,
"stacking": {
"group": "A",
"mode": "none"
},
"thresholdsStyle": {
"mode": "off"
}
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green"
},
{
"color": "red",
"value": 80
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 83
},
"id": 26,
"options": {
"legend": {
"calcs": [],
"displayMode": "list",
"placement": "right",
"showLegend": true
},
"tooltip": {
"hideZeros": false,
"mode": "single",
"sort": "none"
}
},
"pluginVersion": "12.0.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"editorMode": "code",
"exemplar": true,
"expr": "rate(nginxplus_upstream_server_fails_total{server=~\".+\", upstream=~\".+\", instance=\"$instance\", job=\"$job\"}[$__rate_interval])",
"interval": "",
"legendFormat": "{{upstream}} - {{server}}",
"range": true,
"refId": "A"
}
],
"title": "Upstream Server Fails",
"type": "timeseries"
}
],
"preload": false,
"refresh": "auto",
"schemaVersion": 41,
"tags": [],
"templating": {
"list": [
{
"baseFilters": [],
"datasource": {
"type": "prometheus",
"uid": "e200b1fb-5f1a-4c6e-999c-c661c8421158"
},
"filters": [],
"name": "Filters",
"type": "adhoc"
},
{
"current": {
"text": "nginx",
"value": "nginx"
},
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"definition": "label_values(up,job)",
"includeAll": false,
"label": "job",
"name": "job",
"options": [],
"query": {
"query": "label_values(up,job)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "nginxplus.*",
"type": "query"
},
{
"current": {
"text": "otel-collector-svc.nginx-plus.svc.cluster.local:9110",
"value": "otel-collector-svc.nginx-plus.svc.cluster.local:9110"
},
"datasource": {
"type": "prometheus",
"uid": "benbag1zngu80e"
},
"definition": "label_values(up{job='$job'},instance)",
"includeAll": false,
"label": "instance",
"name": "instance",
"options": [],
"query": {
"query": "label_values(up{job='$job'},instance)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "",
"type": "query"
}
]
},
"time": {
"from": "now-5m",
"to": "now"
},
"timepicker": {},
"timezone": "",
"title": "NGINX Plus Dashboard",
"uid": "RizyIIDnk",
"version": 6
}
NGINX OSS Dashboard
NGINX OSS 대시보드는 인스턴스 상태, 처리된 연결, 현재 연결 상태, 총 요청 수(nginx_http_requests_total)를 5분 기준으로 시각화합니다.

NGINX Plus Dashboard
Nginx Plus는 네이티브 관측 기능을 통해 동적 모듈 API를 사용하여 실시간 상태 데이터를 출력할 수 있습니다.
이 데이터에는 전역 통계, SSL 상태, 서버/로케이션/업스트림 상태, 업스트림 서버의 액티브 헬스 체크 결과 등이 포함됩니다. Kubernetes를 포함한 어떤 환경에서도 적용할 수 있습니다.

6. 결론
OpenTelemetry Collector, Prometheus, Grafana를 함께 사용하면 NGINX 또는 NGINX Plus에서 발생하는 메트릭 데이터를 실시간으로 수집하고, 이를 시각화하여 트래픽 현황, 상태 코드 분포, 연결 수, 업스트림 서버 상태 등을 한눈에 파악할 수 있습니다.
이러한 구성은 Kubernetes 환경에서도 유연하게 적용 가능하며, 서비스 운영의 가시성을 높이고 장애 대응을 보다 빠르게 수행할 수 있도록 도와줍니다.
Kubernetes Monitoring에 관련된 더 많은 정보를 알고싶으시다면 NGINX STORE Kubernetes를 방문해주세요.
댓글을 달려면 로그인해야 합니다.