NGINX Metrics
HTTP Connections and Requests
-
nginx.http.conn.accepted
-
nginx.http.conn.dropped
Type: counter, integer Description: NGINX-wide statistics describing HTTP connections. Source: stub_status (or NGINX Plus status API)
-
nginx.http.conn.active
-
nginx.http.conn.current
-
nginx.http.conn.idle
Type: gauge, integer Description: NGINX-wide statistics describing HTTP connections. Source: stub_status (or NGINX Plus status API)
-
nginx.http.request.count
Type: counter, integer Description: Total number of client requests. Source: stub_status (or NGINX Plus status API)
-
nginx.http.request.current
-
nginx.http.request.reading
-
nginx.http.request.writing
Type: gauge, integer Description: Number of currently active requests (reading and writing). Number of requests reading headers or writing responses to clients. Source: stub_status (or NGINX Plus status API)
-
nginx.http.request.malformed
Type: counter, integer Description: Number of malformed requests. Source: access.log
-
nginx.http.request.body_bytes_sent
Type: counter, integer Description: Number of bytes sent to clients, not counting response headers. Source: access.log
HTTP Methods
-
nginx.http.method.get
-
nginx.http.method.head
-
nginx.http.method.post
-
nginx.http.method.put
-
nginx.http.method.delete
-
nginx.http.method.options
Type: counter, integer Description: Statistics about observed request methods. Source: access.log
HTTP Status Codes
-
nginx.http.status.1xx
-
nginx.http.status.2xx
-
nginx.http.status.3xx
-
nginx.http.status.4xx
-
nginx.http.status.5xx
Type: counter, integer Description: Number of requests with HTTP status codes per class. Source: access.log
-
nginx.http.status.403
-
nginx.http.status.404
-
nginx.http.status.500
-
nginx.http.status.502
-
nginx.http.status.503
-
nginx.http.status.504
Type: counter, integer Description: Number of requests with specific HTTP status codes above. Source: access.log
-
nginx.http.status.discarded
Type: counter, integer Description: Number of requests finalized with status code 499 which is logged when the client closes the connection. Source: access.log
HTTP Protocol Versions
-
nginx.http.v0_9
-
nginx.http.v1_0
-
nginx.http.v1_1
-
nginx.http.v2
Type: counter, integer Description: Number of requests using a specific version of the HTTP protocol. Source: access.log
NGINX Process Metrics
-
nginx.workers.count
Type: gauge, integer Description: Number of NGINX worker processes observed.
-
nginx.workers.cpu.system
-
nginx.workers.cpu.total
-
nginx.workers.cpu.user
Type: gauge, percent Description: CPU utilization percentage observed for NGINX worker processes.
-
nginx.workers.fds_count
Type: gauge, integer Description: Number of file descriptors utilized by NGINX worker processes.
-
nginx.workers.io.kbs_r
-
nginx.workers.io.kbs_w
Type: counter, integer Description: Number of kilobytes read from or written to disk by NGINX worker processes.
-
nginx.workers.mem.rss
-
nginx.workers.mem.vms
Type: gauge, bytes Description: Memory utilized by NGINX worker processes.
-
nginx.workers.mem.rss_pct
Type: gauge, percent Description: Memory utilization percentage for NGINX worker processes.
-
nginx.workers.rlimit_nofile
Type: gauge, integer Description: Hard limit on the number of file descriptors as seen by NGINX worker processes.
Additional NGINX Metrics
NGINX Amplify Agent can collect many useful metrics, as described below. To enable these metrics, make the following configuration changes. More predefined graphs will be added to the Graphs page if NGINX Amplify Agent finds additional metrics. With the required log format configuration, you can build more specific custom graphs.
The access.log log format should include an extended set of NGINX variables. Please add a new log format or modify the existing one — and use it with the access_log
directives in your NGINX configuration.
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$host" sn="$server_name" '
'rt=$request_time '
'ua="$upstream_addr" us="$upstream_status" '
'ut="$upstream_response_time" ul="$upstream_response_length" '
'cs=$upstream_cache_status' ;
To use the extended log format with your access log configuration:
access_log /var/log/nginx/access.log main_ext;
Note:
Please keep in mind that by default, NGINX Amplify Agent will process all access logs that are found in your log directory. If you define a new log file with the extended log format that will contain the entries being already logged to another access log, your metrics might be counted twice. Please refer to the NGINX Amplify Agent configuration section above to learn how to exclude specific log files from processing.
The error.log log level should be set to warn
.
error_log /var/log/nginx/error.log warn;
Note. Don’t forget to reload your NGINX configuration with either kill -HUP
or service nginx reload
.
List of additional metrics that can be collected from the NGINX log files:
-
nginx.http.request.bytes_sent
Type: counter, integer Description: Number of bytes sent to clients. Source: access.log (requires custom log format) Variable: $bytes_sent
-
nginx.http.request.length
Type: gauge, integer Description: Request length, including request line, header, and body. Source: access.log (requires custom log format) Variable: $request_length
-
nginx.http.request.time
-
nginx.http.request.time.count
-
nginx.http.request.time.max
-
nginx.http.request.time.median
-
nginx.http.request.time.pctl95
Type: gauge, seconds.milliseconds Description: Request processing time — time elapsed between reading the first bytes from the client and writing a log entry after the last bytes were sent. Source: access.log (requires custom log format) Variable: $request_time
-
nginx.http.request.buffered
Type: counter, integer Description: Number of requests that were buffered to disk. Source: error.log (requires 'warn' log level)
-
nginx.http.gzip.ratio
Type: gauge, float Description: Achieved compression ratio, calculated as the ratio between the original and compressed response sizes. Source: access.log (requires custom log format) Variable: $gzip_ratio
Upstream Metrics
-
nginx.upstream.connect.time
-
nginx.upstream.connect.time.count
-
nginx.upstream.connect.time.max
-
nginx.upstream.connect.time.median
-
nginx.upstream.connect.time.pctl95
Type: gauge, seconds.milliseconds Description: Time spent on establishing connections with upstream servers. With SSL, it also includes time spent on the handshake. Source: access.log (requires custom log format) Variable: $upstream_connect_time
-
nginx.upstream.header.time
-
nginx.upstream.header.time.count
-
nginx.upstream.header.time.max
-
nginx.upstream.header.time.median
-
nginx.upstream.header.time.pctl95
Type: gauge, seconds.milliseconds Description: Time spent on receiving response headers from upstream servers. Source: access.log (requires custom log format) Variable: $upstream_header_time
-
nginx.upstream.response.buffered
Type: counter, integer Description: Number of upstream responses buffered to disk. Source: error.log (requires 'warn' log level)
-
nginx.upstream.request.count
-
nginx.upstream.next.count
Type: counter, integer Description: Number of requests that were sent to upstream servers. Source: access.log (requires custom log format) Variable: $upstream_*
-
nginx.upstream.request.failed
-
nginx.upstream.response.failed
Type: counter, integer Description: Number of requests and responses that failed while proxying. Source: error.log (requires 'error' log level)
-
nginx.upstream.response.length
Type: gauge, bytes Description: Average length of the responses obtained from the upstream servers. Source: access.log (requires custom log format) Variable: $upstream_response_length
-
nginx.upstream.response.time
-
nginx.upstream.response.time.count
-
nginx.upstream.response.time.max
-
nginx.upstream.response.time.median
-
nginx.upstream.response.time.pctl95
Type: gauge, seconds.milliseconds Description: Time spent on receiving responses from upstream servers. Source: access.log (requires custom log format) Variable: $upstream_response_time
-
nginx.upstream.status.1xx
-
nginx.upstream.status.2xx
-
nginx.upstream.status.3xx
-
nginx.upstream.status.4xx
-
nginx.upstream.status.5xx
Type: counter, integer Description: Number of responses from upstream servers with specific HTTP status codes. Source: access.log (requires custom log format) Variable: $upstream_status
Cache Metrics
-
nginx.cache.bypass
-
nginx.cache.expired
-
nginx.cache.hit
-
nginx.cache.miss
-
nginx.cache.revalidated
-
nginx.cache.stale
-
nginx.cache.updating
Type: counter, integer Description: Various statistics about NGINX cache usage. Source: access.log (requires custom log format) Variable: $upstream_cache_status
NGINX Plus Metrics
In NGINX Plus several additional metrics describing various aspects of NGINX performance are available. The API module in NGINX Plus is responsible for collecting and exposing all of the additional counters and gauges.
The NGINX Plus metrics currently supported by NGINX Amplify Agent are described below. The NGINX Plus metrics have the “plus” prefix in their names.
Some of the NGINX Plus metrics extracted from the connections
and the requests
datasets are used to generate the following server-wide metrics (instead of using the stub_status metrics):
nginx.http.conn.accepted = connections.accepted
nginx.http.conn.active = connections.active
nginx.http.conn.current = connections.active + connections.idle
nginx.http.conn.dropped = connections.dropped
nginx.http.conn.idle = connections.idle
nginx.http.request.count = requests.total
nginx.http.request.current = requests.current
The NGINX Plus metrics below are collected per zone. When configuring a graph using these metrics, please make sure to pick the correct server, upstream, or cache zone. A more granular peer-specific breakdown of the metrics below is currently not supported in NGINX Amplify.
Note:
NGINX Amplify Agent does not support reporting the following metrics per zone but it can be used to display a cumulative sum of values from each zone.
A cumulative metric set is also maintained internally by summing up the per-zone metrics. If you don’t configure a specific zone when building graphs, this will result in an “all zones” visualization. E.g., for something like plus.http.status.2xx omitting zone will display the instance-wide sum of the successful requests across all zones.
Server Zone Metrics
-
plus.http.request.count
-
plus.http.response.count
Type: counter, integer Description: Number of client requests received, and responses sent to clients. Source: NGINX Plus status API
-
plus.http.request.bytes_rcvd
-
plus.http.request.bytes_sent
Type: counter, bytes Description: Number of bytes received from clients, and bytes sent to clients. Source: NGINX Plus status API
-
plus.http.status.1xx
-
plus.http.status.2xx
-
plus.http.status.3xx
-
plus.http.status.4xx
-
plus.http.status.5xx
Type: counter, integer Description: Number of responses with status codes 1xx, 2xx, 3xx, 4xx, and 5xx. Source: NGINX Plus status API
-
plus.http.status.discarded
Type: counter, integer Description: Number of requests completed without sending a response. Source: NGINX Plus status API
-
plus.http.ssl.handshakes
Type: counter, integer Description: Total number of successful SSL handshakes. Source: NGINX Plus status API
-
plus.http.ssl.failed
Type: counter, integer Description: Total number of failed SSL handshakes. Source: NGINX Plus status API
-
plus.http.ssl.reuses
Type: counter, integer Description: Total number of session reuses during SSL handshake. Source: NGINX Plus status API
Upstream Zone Metrics
-
plus.upstream.peer.count
Type: gauge, integer Description: Current number of live ("up") upstream servers in an upstream group. If graphed/monitored without specifying an upstream, it's the current number of all live upstream servers in all upstream groups. Source: NGINX Plus status API
-
plus.upstream.request.count
-
plus.upstream.response.count
Type: counter, integer Description: Number of client requests forwarded to the upstream servers, and responses obtained. Source: NGINX Plus status API
-
plus.upstream.conn.active
Type: gauge, integer Description: Current number of active connections to the upstream servers. Source: NGINX Plus status API
-
plus.upstream.conn.keepalive
Type: gauge, integer Description: Сurrent number of idle keepalive connections. Source: NGINX Plus status API
-
plus.upstream.zombies
Type: gauge, integer Description: Current number of servers removed from the group but still processing active client requests. Source: NGINX Plus status API
-
plus.upstream.bytes_rcvd
-
plus.upstream.bytes_sent
Type: counter, integer Description: Number of bytes received from the upstream servers, and bytes sent. Source: NGINX Plus status API
-
plus.upstream.status.1xx
-
plus.upstream.status.2xx
-
plus.upstream.status.3xx
-
plus.upstream.status.4xx
-
plus.upstream.status.5xx
Type: counter, integer Description: Number of responses from the upstream servers with status codes 1xx, 2xx, 3xx, 4xx, and 5xx. Source: NGINX Plus status API
-
plus.upstream.header.time
-
plus.upstream.header.time.count
-
plus.upstream.header.time.max
-
plus.upstream.header.time.median
-
plus.upstream.header.time.pctl95
Type: gauge, seconds.milliseconds Description: Average time to get the response header from the upstream servers. Source: NGINX Plus status API
-
plus.upstream.response.time
-
plus.upstream.response.time.count
-
plus.upstream.response.time.max
-
plus.upstream.response.time.median
-
plus.upstream.response.time.pctl95
Type: gauge, seconds.milliseconds Description: Average time to get the full response from the upstream servers. Source: NGINX Plus status API
-
plus.upstream.fails.count
-
plus.upstream.unavail.count
Type: counter, integer Description: Number of unsuccessful attempts to communicate with upstream servers, and how many times upstream servers became unavailable for client requests. Source: NGINX Plus status API
-
plus.upstream.health.checks
-
plus.upstream.health.fails
-
plus.upstream.health.unhealthy
Type: counter, integer Description: Number of performed health check requests, failed health checks, and how many times the upstream servers became unhealthy. Source: NGINX Plus status API
-
plus.upstream.queue.size
Type: gauge, integer Description: Current number of queued requests. Source: NGINX Plus status API
-
plus.upstream.queue.overflows
Type: counter, integer Description: Number of requests rejected due to queue overflows. Source: NGINX Plus status API
Cache Zone Metrics
-
plus.cache.bypass
-
plus.cache.bypass.bytes
-
plus.cache.expired
-
plus.cache.expired.bytes
-
plus.cache.hit
-
plus.cache.hit.bytes
-
plus.cache.miss
-
plus.cache.miss.bytes
-
plus.cache.revalidated
-
plus.cache.revalidated.bytes
-
plus.cache.size
-
plus.cache.stale
-
plus.cache.stale.bytes
-
plus.cache.updating
-
plus.cache.updating.bytes
Type: counter, integer; counter, bytes Description: Various statistics about NGINX Plus cache usage. Source: NGINX Plus status API
Stream Zone Metrics
-
plus.stream.conn.active
Type: gauge, integer Description: Current number of client connections that are currently being processed. Source: NGINX Plus status API
-
plus.stream.conn.accepted
Type: counter, integer Description: Total number of connections accepted from clients. Source: NGINX Plus status API
-
plus.stream.status.2xx
-
plus.stream.status.4xx
-
plus.stream.status.5xx
Type: counter, integer Description: Number of sessions completed with status codes 2xx, 4xx, or 5xx. Source: NGINX Plus status API
-
plus.stream.discarded
Type: counter, integer Description: Total number of connections completed without creating a session. Source: NGINX Plus status API
-
plus.stream.bytes_rcvd
-
plus.stream.bytes_sent
Type: counter, integer Description: Number of bytes received from clients, and bytes sent. Source: NGINX Plus status API
-
plus.stream.upstream.peers
Type: gauge, integer Description: Current number of live ("up") upstream servers in an upstream group. Source: NGINX Plus status API
-
plus.stream.upstream.conn.active
Type: gauge, integer Description: Current number of connections. Source: NGINX Plus status API
-
plus.stream.upstream.conn.count
Type: counter, integer Description: Total number of client connections forwarded to this server. Source: NGINX Plus status API
-
plus.stream.upstream.conn.time
-
plus.stream.upstream.conn.time.count
-
plus.stream.upstream.conn.time.max
-
plus.stream.upstream.conn.time.median
-
plus.stream.upstream.conn.time.pctl95
Type: timer, integer Description: Average time to connect to an upstream server. Source: NGINX Plus status API
-
plus.stream.upstream.conn.ttfb
Type: timer, integer Description: Average time to receive the first byte of data. Source: NGINX Plus status API
-
plus.stream.upstream.response.time
Type: timer, integer Description: Average time to receive the last byte of data. Source: NGINX Plus status API
-
plus.stream.upstream.bytes_sent
-
plus.stream.upstream.bytes_rcvd
Type: counter, integer Description: Number of bytes received from upstream servers, and bytes sent. Source: NGINX Plus status API
-
plus.stream.upstream.fails.count
-
plus.stream.upstream.unavail.count
Type: counter, integer Description: Number of unsuccessful attempts to communicate with upstream servers, and how many times upstream servers became unavailable for client requests. Source: NGINX Plus status API
-
plus.stream.upstream.health.checks
-
plus.stream.upstream.health.fails
-
plus.stream.upstream.health.unhealthy
Type: counter, integer Description: Number of performed health check requests, failed health checks, and how many times the upstream servers became unhealthy. Source: NGINX Plus status API
-
plus.stream.upstream.zombies
Type: gauge, integer Description: Current number of servers removed from the group but still processing active client connections. Source: NGINX Plus status API
Slab Zone Metrics
-
plus.slab.pages.used
Type: gauge, integer Description: Сurrent number of used memory pages. Source: NGINX Plus status API
-
plus.slab.pages.free
Type: gauge, integer Description: Сurrent number of free memory pages. Source: NGINX Plus status API
-
plus.slab.pages.total
Type: gauge, integer Description: Sum of free and used memory pages above.
-
plus.slab.pages.pct_used
Type: gauge, percentage Description: Percentage of free pages.