# NGINX Plus by HTTP ## Overview This template is designed for the effortless deployment of Nginx Plus monitoring by Zabbix via HTTP and doesn't require any external scripts. > The monitoring data of the live activity is generated by the [NGINX Plus API](http://nginx.org/en/docs/http/ngx_http_api_module.html). ## Requirements Zabbix version: 7.0 and higher. ## Tested versions This template has been tested on: - NGINX Plus 1.19.10 ## Configuration > Zabbix should be configured according to the instructions in the [Templates out of the box](https://www.zabbix.com/documentation/7.0/manual/config/templates_out_of_the_box) section. ## Setup 1. Enable the NGINX Plus API. > Refer to the [vendor documentation](https://www.nginx.com/products/nginx/live-activity-monitoring/). 2. Set the {$NGINX.API.ENDPOINT} such as `://://`. **Note** that depending on the number of zones and upstreams discovery operation may be expensive. Therefore, use the following filters with these macros: - {$NGINX.LLD.FILTER.HTTP.ZONE.MATCHES} - {$NGINX.LLD.FILTER.HTTP.ZONE.NOT_MATCHES} - {$NGINX.LLD.FILTER.HTTP.LOCATION.ZONE.MATCHES} - {$NGINX.LLD.FILTER.HTTP.LOCATION.ZONE.NOT_MATCHES} - {$NGINX.LLD.FILTER.HTTP.UPSTREAM.MATCHES} - {$NGINX.LLD.FILTER.HTTP.UPSTREAM.NOT_MATCHES} - {$NGINX.LLD.FILTER.STREAM.ZONE.MATCHES} - {$NGINX.LLD.FILTER.STREAM.ZONE.NOT_MATCHES} - {$NGINX.LLD.FILTER.STREAM.UPSTREAM.MATCHES} - {$NGINX.LLD.FILTER.STREAM.UPSTREAM.NOT_MATCHES} - {$NGINX.LLD.FILTER.RESOLVER.MATCHES} - {$NGINX.LLD.FILTER.RESOLVER.NOT_MATCHES} ### Macros used |Name|Description|Default| |----|-----------|-------| |{$NGINX.API.ENDPOINT}|

NGINX Plus API URL in the format `://://`.

|| |{$NGINX.LLD.FILTER.HTTP.ZONE.MATCHES}|

The filter to include the necessary discovered HTTP server zones.

|`.*`| |{$NGINX.LLD.FILTER.HTTP.ZONE.NOT_MATCHES}|

The filter to exclude discovered HTTP server zones.

|`CHANGE_IF_NEEDED`| |{$NGINX.LLD.FILTER.HTTP.LOCATION.ZONE.MATCHES}|

The filter to include the necessary discovered HTTP location zones.

|`.*`| |{$NGINX.LLD.FILTER.HTTP.LOCATION.ZONE.NOT_MATCHES}|

The filter to exclude discovered HTTP location zones.

|`CHANGE_IF_NEEDED`| |{$NGINX.LLD.FILTER.HTTP.UPSTREAM.MATCHES}|

The filter to include the necessary discovered HTTP upstreams.

|`.*`| |{$NGINX.LLD.FILTER.HTTP.UPSTREAM.NOT_MATCHES}|

The filter to exclude discovered HTTP upstreams.

|`CHANGE_IF_NEEDED`| |{$NGINX.LLD.FILTER.STREAM.ZONE.MATCHES}|

The filter to include discovered server zones of the "stream" directive.

|`.*`| |{$NGINX.LLD.FILTER.STREAM.ZONE.NOT_MATCHES}|

The filter to exclude discovered server zones of the "stream" directive.

|`CHANGE_IF_NEEDED`| |{$NGINX.LLD.FILTER.STREAM.UPSTREAM.MATCHES}|

The filter to include the necessary discovered upstreams of the "stream" directive.

|`.*`| |{$NGINX.LLD.FILTER.STREAM.UPSTREAM.NOT_MATCHES}|

The filter to exclude discovered upstreams of the "stream" directive

|`CHANGE_IF_NEEDED`| |{$NGINX.LLD.FILTER.RESOLVER.MATCHES}|

The filter to include the necessary discovered `Resolvers`.

|`.*`| |{$NGINX.LLD.FILTER.RESOLVER.NOT_MATCHES}|

The filter to exclude discovered `Resolvers`.

|`CHANGE_IF_NEEDED`| |{$NGINX.DROP_RATE.MAX.WARN}|

The critical rate of the dropped connections for a trigger expression.

|`1`| |{$NGINX.HTTP.UPSTREAM.4XX.MAX.WARN}|

The maximum percentage of errors with the status code `4xx` (for a trigger expression).

|`5`| |{$NGINX.HTTP.UPSTREAM.5XX.MAX.WARN}|

The maximum percentage of errors with the status code `5xx` (for a trigger expression).

|`5`| ### Items |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: Get info|

Return status of the NGINX running instance.

|HTTP agent|nginx.info| |Nginx: Get connections|

Returns the statistics of client connections.

|HTTP agent|nginx.connections| |Nginx: Get SSL|

Returns the SSL statistics.

|HTTP agent|nginx.ssl| |Nginx: Get requests|

Returns the status of the client's HTTP requests.

|HTTP agent|nginx.requests| |Nginx: Get HTTP zones|

Returns the status information for each HTTP server zone.

|HTTP agent|nginx.http.server_zones| |Nginx: Get HTTP location zones|

Returns the status information for each HTTP location zone.

|HTTP agent|nginx.http.location_zones| |Nginx: Get HTTP upstreams|

Returns the status of each HTTP upstream server group and its servers.

|HTTP agent|nginx.http.upstreams| |Nginx: Get Stream server zones|

Returns the status information for each server zone configured in the "stream" directive.

|HTTP agent|nginx.stream.server_zones| |Nginx: Get Stream upstreams|

Returns status of each stream upstream server group and its servers.

|HTTP agent|nginx.stream.upstreams| |Nginx: Get resolvers|

Returns the status information for each Resolver zone.

|HTTP agent|nginx.resolvers| |Nginx: Get info error|

The description of NGINX errors.

|Dependent item|nginx.info.error

**Preprocessing**

  • JSON Path: `$.error.text`

    ⛔️Custom on fail: Set value to: ``

  • Discard unchanged with heartbeat: `1h`

| |Nginx: Version|

A version number of NGINX.

|Dependent item|nginx.info.version

**Preprocessing**

  • JSON Path: `$.version`

  • Discard unchanged with heartbeat: `3h`

| |Nginx: Address|

The address of the server that accepted status request.

|Dependent item|nginx.info.address

**Preprocessing**

  • JSON Path: `$.address`

  • Discard unchanged with heartbeat: `3h`

| |Nginx: Generation|

The total number of configuration reloads.

|Dependent item|nginx.info.generation

**Preprocessing**

  • JSON Path: `$.generation`

  • Discard unchanged with heartbeat: `30m`

| |Nginx: Uptime|

The server uptime.

|Dependent item|nginx.info.uptime

**Preprocessing**

  • JSON Path: `$.load_timestamp`

    ⛔️Custom on fail: Discard value

  • JavaScript: `The text is too long. Please see the template.`

| |Nginx: Connections accepted, rate|

The total number of accepted client connections per second.

|Dependent item|nginx.connections.accepted.rate

**Preprocessing**

  • JSON Path: `$.accepted`

  • Change per second
| |Nginx: Connections dropped|

The total number of dropped client connections.

|Dependent item|nginx.connections.dropped

**Preprocessing**

  • JSON Path: `$.dropped`

| |Nginx: Connections active|

The current number of active client connections.

|Dependent item|nginx.connections.active

**Preprocessing**

  • JSON Path: `$.active`

| |Nginx: Connections idle|

The current number of idle client connections.

|Dependent item|nginx.connections.idle

**Preprocessing**

  • JSON Path: `$.idle`

| |Nginx: SSL handshakes, rate|

The total number of successful SSL handshakes per second.

|Dependent item|nginx.ssl.handshakes.rate

**Preprocessing**

  • JSON Path: `$.handshakes`

  • Change per second
| |Nginx: SSL handshakes failed, rate|

The total number of failed SSL handshakes per second.

|Dependent item|nginx.ssl.handshakes_failed.rate

**Preprocessing**

  • JSON Path: `$.handshakes_failed`

  • Change per second
| |Nginx: SSL session reuses, rate|

The total number of session reuses during SSL handshake per second.

|Dependent item|nginx.ssl.session_reuses.rate

**Preprocessing**

  • JSON Path: `$.session_reuses`

  • Change per second
| |Nginx: Requests total, rate|

The total number of client requests per second.

|Dependent item|nginx.requests.total.rate

**Preprocessing**

  • JSON Path: `$.total`

  • Change per second
| |Nginx: Requests current|

The current number of client requests.

|Dependent item|nginx.requests.current

**Preprocessing**

  • JSON Path: `$.current`

| ### Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Nginx: Server response error||`length(last(/NGINX Plus by HTTP/nginx.info.error))>0`|High|| |Nginx: Version has changed|

The Nginx version has changed. Acknowledge to close the problem manually.

|`last(/NGINX Plus by HTTP/nginx.info.version,#1)<>last(/NGINX Plus by HTTP/nginx.info.version,#2) and length(last(/NGINX Plus by HTTP/nginx.info.version))>0`|Info|**Manual close**: Yes| |Nginx: Host has been restarted|

Uptime is less than 10 minutes.

|`last(/NGINX Plus by HTTP/nginx.info.uptime)<10m`|Info|**Manual close**: Yes| |Nginx: Failed to fetch info data|

Zabbix has not received any data for metrics for the last 30 minutes

|`nodata(/NGINX Plus by HTTP/nginx.info.uptime,30m)=1`|Warning|**Manual close**: Yes| |Nginx: High connections drop rate|

The rate of dropped connections is greater than `{$NGINX.DROP_RATE.MAX.WARN}` for the last 5 minutes.

|`min(/NGINX Plus by HTTP/nginx.connections.dropped,5m) > {$NGINX.DROP_RATE.MAX.WARN}`|Warning|| ### LLD rule HTTP server zones discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |HTTP server zones discovery||Dependent item|nginx.http.server_zones.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for HTTP server zones discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: HTTP server zone [{#NAME}]: Raw data|

The raw data of the HTTP server zone with the name `{#NAME}` .

|Dependent item|nginx.http.server_zones.raw[{#NAME}]

**Preprocessing**

  • JSON Path: `$['{#NAME}']`

| |Nginx: HTTP server zone [{#NAME}]: Processing|

The number of client requests that are currently being processed.

|Dependent item|nginx.http.server_zones.processing[{#NAME}]

**Preprocessing**

  • JSON Path: `$.processing`

| |Nginx: HTTP server zone [{#NAME}]: Requests, rate|

The total number of client requests received from clients per second.

|Dependent item|nginx.http.server_zones.requests.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.requests`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Responses 1xx, rate|

The number of responses with `1xx` status code per second.

|Dependent item|nginx.http.server_zones.responses.1xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.1xx`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Responses 2xx, rate|

The number of responses with `2xx` status code per second.

|Dependent item|nginx.http.server_zones.responses.2xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.2xx`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Responses 3xx, rate|

The number of responses with `3xx` status code per second.

|Dependent item|nginx.http.server_zones.responses.3xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.3xx`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Responses 4xx, rate|

The number of responses with `4xx` status code per second.

|Dependent item|nginx.http.server_zones.responses.4xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.4xx`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Responses 5xx, rate|

The number of responses with `5xx` status code per second.

|Dependent item|nginx.http.server_zones.responses.5xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.5xx`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Responses total, rate|

The total number of responses sent to clients per second.

|Dependent item|nginx.http.server_zones.responses.total.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.total`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Discarded, rate|

The total number of requests completed without sending a response per second.

|Dependent item|nginx.http.server_zones.discarded.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.discarded`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Received, rate|

The total number of bytes received from clients per second.

|Dependent item|nginx.http.server_zones.received.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.received`

  • Change per second
| |Nginx: HTTP server zone [{#NAME}]: Sent, rate|

The total number of bytes sent to clients per second.

|Dependent item|nginx.http.server_zones.sent.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sent`

  • Change per second
| ### LLD rule HTTP location zones discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |HTTP location zones discovery||Dependent item|nginx.http.location_zones.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for HTTP location zones discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: HTTP location zone [{#NAME}]: Raw data|

The raw data of the location zone with the name `{#NAME}`.

|Dependent item|nginx.http.location_zones.raw[{#NAME}]

**Preprocessing**

  • JSON Path: `$['{#NAME}']`

| |Nginx: HTTP location zone [{#NAME}]: Requests, rate|

The total number of client requests received from clients per second.

|Dependent item|nginx.http.location_zones.requests.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.requests`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Responses 1xx, rate|

The number of responses with `1xx` status code per second.

|Dependent item|nginx.http.location_zones.responses.1xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.1xx`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Responses 2xx, rate|

The number of responses with `2xx` status code per second.

|Dependent item|nginx.http.location_zones.responses.2xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.2xx`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Responses 3xx, rate|

The number of responses with `3xx` status code per second.

|Dependent item|nginx.http.location_zones.responses.3xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.3xx`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Responses 4xx, rate|

The number of responses with `4xx` status code per second.

|Dependent item|nginx.http.location_zones.responses.4xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.4xx`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Responses 5xx, rate|

The number of responses with `5xx` status code per second.

|Dependent item|nginx.http.location_zones.responses.5xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.5xx`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Responses total, rate|

The total number of responses sent to clients per second.

|Dependent item|nginx.http.location_zones.responses.total.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.total`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Discarded, rate|

The total number of requests completed without sending a response per second.

|Dependent item|nginx.http.location_zones.discarded.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.discarded`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Received, rate|

The total number of bytes received from clients per second.

|Dependent item|nginx.http.location_zones.received.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.received`

  • Change per second
| |Nginx: HTTP location zone [{#NAME}]: Sent, rate|

The total number of bytes sent to clients per second.

|Dependent item|nginx.http.location_zones.sent.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sent`

  • Change per second
| ### LLD rule HTTP upstreams discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |HTTP upstreams discovery||Dependent item|nginx.http.upstreams.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for HTTP upstreams discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: HTTP upstream [{#NAME}]: Raw data|

The raw data of the HTTP upstream with the name `{#NAME}`.

|Dependent item|nginx.http.upstreams.raw[{#NAME}]

**Preprocessing**

  • JSON Path: `$['{#NAME}']`

| |Nginx: HTTP upstream [{#NAME}]: Keepalive|

The current number of idle keepalive connections.

|Dependent item|nginx.http.upstreams.keepalive[{#NAME}]

**Preprocessing**

  • JSON Path: `$.keepalive`

| |Nginx: HTTP upstream [{#NAME}]: Zombies|

The current number of servers removed from the group but still processing active client requests.

|Dependent item|nginx.http.upstreams.zombies[{#NAME}]

**Preprocessing**

  • JSON Path: `$.zombies`

| |Nginx: HTTP upstream [{#NAME}]: Zone|

The name of the shared memory zone that keeps the group's configuration and run-time state.

|Dependent item|nginx.http.upstreams.zone[{#NAME}]

**Preprocessing**

  • JSON Path: `$.zone`

  • Discard unchanged with heartbeat: `3h`

| ### LLD rule HTTP upstream peers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |HTTP upstream peers discovery||Dependent item|nginx.http.upstream.peers.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for HTTP upstream peers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Raw data|

The raw data of the HTTP upstream with the name `[{#UPSTREAM}]`and peer with the name`[{#PEER}]`.

|Dependent item|nginx.http.upstream.peer.raw[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$['{#UPSTREAM}'].peers[?(@.server == '{#PEER}')].first()`

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: State|

The current state, which may be one of “up”, “draining”, “down”, “unavail”, “checking”, and “unhealthy”.

|Dependent item|nginx.http.upstream.peer.state[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.state`

  • Discard unchanged with heartbeat: `3h`

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Active|

The current number of active connections.

|Dependent item|nginx.http.upstream.peer.active[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.active`

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Requests, rate|

The total number of client requests forwarded to this server per second.

|Dependent item|nginx.http.upstream.peer.requests.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.requests`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Responses 1xx, rate|

The number of responses with `1xx` status code per second.

|Dependent item|nginx.http.upstream.peer.responses.1xx.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.responses.1xx`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Responses 2xx, rate|

The number of responses with `2xx` status code per second.

|Dependent item|nginx.http.upstream.peer.responses.2xx.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.responses.2xx`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Responses 3xx, rate|

The number of responses with `3xx` status code per second.

|Dependent item|nginx.http.upstream.peer.responses.3xx.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.responses.3xx`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Responses 4xx, rate|

The number of responses with `4xx` status code per second.

|Dependent item|nginx.http.upstream.peer.responses.4xx.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.responses.4xx`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Responses 5xx, rate|

The number of responses with `5xx` status code per second.

|Dependent item|nginx.http.upstream.peer.responses.5xx.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.responses.5xx`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Responses total, rate|

The total number of responses obtained from this server.

|Dependent item|nginx.http.upstream.peer.responses.total.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.responses.total`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Sent, rate|

The total number of bytes sent to this server per second.

|Dependent item|nginx.http.upstream.peer.sent.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.sent`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Received, rate|

The total number of bytes received from this server per second.

|Dependent item|nginx.http.upstream.peer.received.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.received`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Fails, rate|

The total number of unsuccessful attempts to communicate with the server per second.

|Dependent item|nginx.http.upstream.peer.fails.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.fails`

  • Change per second
| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Unavail|

Displays how many times the server has become unavailable for client requests (the state - “unavail”) due to the number of unsuccessful attempts reaching the `max_fails` threshold.

|Dependent item|nginx.http.upstream.peer.unavail.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.unavail`

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Header time|

The average time to get the response header from the server.

|Dependent item|nginx.http.upstream.peer.header_time.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.header_time`

    ⛔️Custom on fail: Discard value

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Response time|

The average time to get the full response from the server.

|Dependent item|nginx.http.upstream.peer.response_time.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.response_time`

    ⛔️Custom on fail: Discard value

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Health checks, check|

The total number of health check requests made.

|Dependent item|nginx.http.upstream.peer.health_checks.checks[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.health_checks.checks`

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Health checks, fails|

The number of failed health checks.

|Dependent item|nginx.http.upstream.peer.health_checks.fails[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.health_checks.fails`

| |Nginx: HTTP upstream [{#UPSTREAM}] peer [{#PEER}]: Health checks, unhealthy|

Displays how many times the server has become `unhealthy` (the state - “unhealthy”.

|Dependent item|nginx.http.upstream.peer.health_checks.unhealthy[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.health_checks.unhealthy`

| ### Trigger prototypes for HTTP upstream peers discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Nginx: HTTP upstream server is not in UP or DOWN state.||`find(/NGINX Plus by HTTP/nginx.http.upstream.peer.state[{#UPSTREAM},{#PEER}],,"like","up")=0 and find(/NGINX Plus by HTTP/nginx.http.upstream.peer.state[{#UPSTREAM},{#PEER}],,"like","down")=0`|Warning|| |Nginx: Too many HTTP requests with code 4xx||`sum(/NGINX Plus by HTTP/nginx.http.upstream.peer.responses.4xx.rate[{#UPSTREAM},{#PEER}],5m) > (sum(/NGINX Plus by HTTP/nginx.http.upstream.peer.responses.total.rate[{#UPSTREAM},{#PEER}],5m)*({$NGINX.HTTP.UPSTREAM.4XX.MAX.WARN}/100))`|Warning|| |Nginx: Too many HTTP requests with code 5xx||`sum(/NGINX Plus by HTTP/nginx.http.upstream.peer.responses.5xx.rate[{#UPSTREAM},{#PEER}],5m) > (sum(/NGINX Plus by HTTP/nginx.http.upstream.peer.responses.total.rate[{#UPSTREAM},{#PEER}],5m)*({$NGINX.HTTP.UPSTREAM.5XX.MAX.WARN}/100))`|High|| ### LLD rule Stream server zones discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Stream server zones discovery||Dependent item|nginx.stream.server_zones.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for Stream server zones discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: Stream server zone [{#NAME}]: Raw data|

The raw data of server zone with the name `{#NAME}`, configured in the "stream" directive.

|Dependent item|nginx.stream.server_zones.raw[{#NAME}]

**Preprocessing**

  • JSON Path: `$['{#NAME}']`

| |Nginx: Stream server zone [{#NAME}]: Processing|

The number of client connections that are currently being processed.

|Dependent item|nginx.stream.server_zones.processing[{#NAME}]

**Preprocessing**

  • JSON Path: `$.processing`

| |Nginx: Stream server zone [{#NAME}]: Connections, rate|

The total number of connections accepted from clients per second.

|Dependent item|nginx.stream.server_zones.connections.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.connections`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Sessions 2xx, rate|

The total number of sessions completed with status code `2xx` per second.

|Dependent item|nginx.stream.server_zones.sessions.2xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sessions.2xx`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Sessions 4xx, rate|

The total number of sessions completed with status code `4xx` per second.

|Dependent item|nginx.stream.server_zones.sessions.4xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sessions.4xx`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Sessions 5xx, rate|

The total number of sessions completed with status code `5xx` per second.

|Dependent item|nginx.stream.server_zones.sessions.5xx.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sessions.5xx`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Sessions total, rate|

The total number of completed client sessions per second.

|Dependent item|nginx.stream.server_zones.sessions.total.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sessions.total`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Discarded, rate|

The total number of connections completed without creating a session per second.

|Dependent item|nginx.stream.server_zones.discarded.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.discarded`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Received, rate|

The total number of bytes received from clients per second.

|Dependent item|nginx.stream.server_zones.received.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.received`

  • Change per second
| |Nginx: Stream server zone [{#NAME}]: Sent, rate|

The total number of bytes sent to clients per second.

|Dependent item|nginx.stream.server_zones.sent.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.sent`

  • Change per second
| ### LLD rule Stream upstreams discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Stream upstreams discovery||Dependent item|nginx.stream.upstreams.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for Stream upstreams discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: Stream upstream [{#NAME}]: Raw data|

The raw data of the upstream with the name `[{#UPSTREAM}]`, configured in the "stream" directive.

|Dependent item|nginx.stream.upstreams.raw[{#NAME}]

**Preprocessing**

  • JSON Path: `$['{#NAME}']`

| |Nginx: Stream upstream [{#NAME}]: Zombies||Dependent item|nginx.stream.upstreams.zombies[{#NAME}]

**Preprocessing**

  • JSON Path: `$.zombies`

| |Nginx: Stream upstream [{#NAME}]: Zone||Dependent item|nginx.stream.upstreams.zone[{#NAME}]

**Preprocessing**

  • JSON Path: `$.zone`

  • Discard unchanged with heartbeat: `3h`

| ### LLD rule Stream upstream peers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Stream upstream peers discovery||Dependent item|nginx.stream.upstream.peers.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for Stream upstream peers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Raw data|

The raw data of the upstream with the name `[{#UPSTREAM}]`and peer with the name`[{#PEER}]`, configured in the "stream" directive.

|Dependent item|nginx.stream.upstream.peer.raw[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$['{#UPSTREAM}'].peers[?(@.server == '{#PEER}')].first()`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: State|

The current state, which may be one of “up”, “draining”, “down”, “unavail”, “checking”, and “unhealthy”.

|Dependent item|nginx.stream.upstream.peer.state[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.state`

  • Discard unchanged with heartbeat: `3h`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Active|

The current number of connections.

|Dependent item|nginx.stream.upstream.peer.active[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.active`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Sent, rate|

The total number of bytes sent to this server per second.

|Dependent item|nginx.stream.upstream.peer.sent.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.sent`

  • Change per second
| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Received, rate|

The total number of bytes received from this server per second.

|Dependent item|nginx.stream.upstream.peer.received.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.received`

  • Change per second
| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Fails, rate|

The total number of unsuccessful attempts to communicate with the server per second.

|Dependent item|nginx.stream.upstream.peer.fails.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.fails`

  • Change per second
| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Unavail|

Displays how many times the server has become unavailable for client requests (the state - “unavail”) due to the number of unsuccessful attempts reaching the `max_fails` threshold.

|Dependent item|nginx.stream.upstream.peer.unavail.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.unavail`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Connections|

The total number of client connections forwarded to this server.

|Dependent item|nginx.stream.upstream.peer.connections.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.connections`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Connect time|

The average time to connect to the upstream server.

|Dependent item|nginx.stream.upstream.peer.connect_time.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.connect_time`

    ⛔️Custom on fail: Discard value

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: First byte time|

The average time to receive the first byte of data.

|Dependent item|nginx.stream.upstream.peer.first_byte_time.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.first_byte_time`

    ⛔️Custom on fail: Discard value

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Response time|

The average time to receive the last byte of data.

|Dependent item|nginx.stream.upstream.peer.response_time.rate[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.response_time`

    ⛔️Custom on fail: Discard value

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Health checks, check|

The total number of health check requests made.

|Dependent item|nginx.stream.upstream.peer.health_checks.checks[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.health_checks.checks`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Health checks, fails|

The number of failed health checks.

|Dependent item|nginx.stream.upstream.peer.health_checks.fails[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.health_checks.fails`

| |Nginx: Stream upstream [{#UPSTREAM}] peer [{#PEER}]: Health checks, unhealthy|

Displays how many times the server has become `unhealthy` (the state - “unhealthy”).

|Dependent item|nginx.stream.upstream.peer.health_checks.unhealthy[{#UPSTREAM},{#PEER}]

**Preprocessing**

  • JSON Path: `$.health_checks.unhealthy`

| ### Trigger prototypes for Stream upstream peers discovery |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----------|--------|--------------------------------| |Nginx: Stream upstream server is not in UP or DOWN state.||`find(/NGINX Plus by HTTP/nginx.stream.upstream.peer.state[{#UPSTREAM},{#PEER}],,"like","up")=0 and find(/NGINX Plus by HTTP/nginx.stream.upstream.peer.state[{#UPSTREAM},{#PEER}],,"like","down")=0`|Warning|| ### LLD rule Resolvers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Resolvers discovery||Dependent item|nginx.resolvers.discovery

**Preprocessing**

  • JavaScript: `The text is too long. Please see the template.`

  • Discard unchanged with heartbeat: `30m`

| ### Item prototypes for Resolvers discovery |Name|Description|Type|Key and additional info| |----|-----------|----|-----------------------| |Nginx: Resolver [{#NAME}]: Raw data|

The raw data of the `Resolver` with the name `{#NAME}`.

|Dependent item|nginx.resolvers.raw[{#NAME}]

**Preprocessing**

  • JSON Path: `$['{#NAME}']`

| |Nginx: Resolver [{#NAME}]: Requests name, rate|

The total number of requests to resolve names to addresses per second.

|Dependent item|nginx.resolvers.requests.name.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.requests.name`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Requests srv, rate|

The total number of requests to resolve SRV records per second.

|Dependent item|nginx.resolvers.requests.srv.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.requests.srv`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Requests addr, rate|

The total number of requests to resolve addresses to names per second.

|Dependent item|nginx.resolvers.requests.addr.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.requests.addr`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses noerror, rate|

The total number of successful responses per second.

|Dependent item|nginx.resolvers.responses.noerror.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.noerror`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses formerr, rate|

The total number of `FORMERR` (format error) responses per second.

|Dependent item|nginx.resolvers.responses.formerr.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.formerr`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses servfail, rate|

The total number of `SERVFAIL` (server failure) responses per second.

|Dependent item|nginx.resolvers.responses.servfail.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.servfail`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses nxdomain, rate|

The total number of `NXDOMAIN` (host not found) responses per second.

|Dependent item|nginx.resolvers.responses.nxdomain.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.nxdomain`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses notimp, rate|

The total number of `NOTIMP` (unimplemented) responses per second.

|Dependent item|nginx.resolvers.responses.notimp.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.notimp`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses refused, rate|

The total number of `REFUSED` (operation refused) responses per second.

|Dependent item|nginx.resolvers.responses.refused.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.refused`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses timedout, rate|

The total number of timed out requests per second.

|Dependent item|nginx.resolvers.responses.timedout.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.timedout`

  • Change per second
| |Nginx: Resolver [{#NAME}]: Responses unknown, rate|

The total number of requests completed with an unknown error per second.

|Dependent item|nginx.resolvers.responses.unknown.rate[{#NAME}]

**Preprocessing**

  • JSON Path: `$.responses.unknown`

  • Change per second
| ## Feedback Please report any issues with the template at [`https://support.zabbix.com`](https://support.zabbix.com) You can also provide feedback, discuss the template, or ask for help at [`ZABBIX forums`](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback)