Simple server that scrapes Nginx vts stats and exports them via HTTP for Prometheus consumption
Binary can be downloaded from Releases page.
make
make docker
docker pull sophos/nginx-vts-exporter:latest
It can be used directly instead of having to build the image yourself. (Docker Hub sophos/nginx-vts-exporter)
nohup /bin/nginx-vts-exporter -nginx.scrape_uri=http://localhost/status/format/json
docker run -ti --rm --env NGINX_STATUS="http://localhost/status/format/json" sophos/nginx-vts-exporter
This image is configurable using different env variables
Variable name | Default | Description |
---|---|---|
NGINX_STATUS | http://localhost/status/format/json | Nginx JSON format status page |
METRICS_ENDPOINT | /metrics | Metrics endpoint exportation URI |
METRICS_ADDR | :9913 | Metrics exportation address:port |
METRICS_NS | nginx | Prometheus metrics Namespaces |
Documents about exposed Prometheus metrics.
For details on the underlying metrics please see nginx-module-vts
For grafana dashboard please see nginx-vts-exporter dashboard
Metrics details
Nginx data | Name | Exposed informations |
---|---|---|
Connections | {NAMESPACE}_server_connections |
status [active, reading, writing, waiting, accepted, handled] |
Metrics output example
# Server Connections
nginx_server_connections{status="accepted"} 70606
Metrics details
Nginx data | Name | Exposed informations |
---|---|---|
Requests | {NAMESPACE}_server_requests |
code [2xx, 3xx, 4xx, 5xx, total], host (or domain name) |
Bytes | {NAMESPACE}_server_bytes |
direction [in, out], host (or domain name) |
Cache | {NAMESPACE}_server_cache |
status [bypass, expired, hit, miss, revalidated, scarce, stale, updating], host (or domain name) |
Metrics output example
# Server Requests
nginx_server_requests{code="1xx",host="test.domain.com"} 0
# Server Bytes
nginx_server_bytes{direction="in",host="test.domain.com"} 21
# Server Cache
nginx_server_cache{host="test.domain.com",status="bypass"} 2
Metrics details
Nginx data | Name | Exposed informations |
---|---|---|
Requests | {NAMESPACE}_filter_requests |
code [2xx, 3xx, 4xx, 5xx and total], filter, filter name |
Bytes | {NAMESPACE}_filter_bytes |
direction [in, out], filter, filter name |
Response time | {NAMESPACE}_filter_responseMsec |
filter, filter name |
Metrics output example
# Filter Requests
nginx_upstream_requests{code="1xx", filter="country", filterName="BY"} 0
# Filter Bytes
nginx_upstream_bytes{direction="in", filter="country", filterName="BY"} 0
# Filter Response time
nginx_upstream_responseMsec{filter="country", filterName="BY"} 99
Metrics details
Nginx data | Name | Exposed informations |
---|---|---|
Requests | {NAMESPACE}_upstream_requests |
code [2xx, 3xx, 4xx, 5xx and total], upstream (or upstream name) |
Bytes | {NAMESPACE}_upstream_bytes |
direction [in, out], upstream (or upstream name) |
Response time | {NAMESPACE}_upstream_responseMsec |
backend (or server), in_bytes, out_bytes, upstream (or upstream name) |
Metrics output example
# Upstream Requests
nginx_upstream_requests{code="1xx",upstream="XXX-XXXXX-3000"} 0
# Upstream Bytes
nginx_upstream_bytes{direction="in",upstream="XXX-XXXXX-3000"} 0
# Upstream Response time
nginx_upstream_responseMsec{backend="10.2.15.10:3000",upstream="XXX-XXXXX-3000"} 99