Nginx

Nginx is a web server which can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache. The software was publicly released in 2004. A company of the same name was founded in 2011 to provide support and Nginx plus paid software.

Available solutions




This template is for Zabbix version: 5.4
Also available for: 5.0

Source: https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/app/nginx_agent?at=release/5.4

Nginx by Zabbix agent

Overview

For Zabbix version: 5.4 and higher
The template to monitor Nginx by Zabbix that work without any external scripts. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection.

Template Nginx by Zabbix agent collects metrics by polling ngx_http_stub_status_module locally with Zabbix agent:

Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

Note that this template doesn't support https and redirects (limitations of web.page.get).

It also uses Zabbix agent to collect nginx Linux process stats like CPU usage, memory usage and whether process is running or not.

This template was tested on:

  • Nginx, version 1.17.2

Setup

See Zabbix template operation for basic instructions.

Setup ngx_http_stub_status_module. Test availability of http_stub_status module with nginx -V 2>&1 | grep -o with-http_stub_status_module.

Example configuration of Nginx:

location = /basic_status {
    stub_status;
    allow 127.0.0.1;
    allow ::1;
    deny all;
}

If you use another location, then don't forget to change {$NGINX.STUB_STATUS.PATH} macro. Install and setup Zabbix agent.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$NGINX.DROP_RATE.MAX.WARN}

The critical rate of the dropped connections for trigger expression.

1
{$NGINX.RESPONSE_TIME.MAX.WARN}

The Nginx maximum response time in seconds for trigger expression.

10
{$NGINX.STUB_STATUS.HOST}

Hostname or IP of Nginx stub_status host or container.

localhost
{$NGINX.STUB_STATUS.PATH}

The path of Nginx stub_status page.

basic_status
{$NGINX.STUB_STATUS.PORT}

The port of Nginx stub_status host or container.

80

Template links

There are no template links in this template.

Discovery rules

Items collected

Group Name Description Type Key and additional info
Nginx Nginx: Service status

-

ZABBIX_PASSIVE net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Nginx Nginx: Service response time

-

ZABBIX_PASSIVE net.tcp.service.perf[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"]
Nginx Nginx: Requests total

The total number of client requests.

DEPENDENT nginx.requests.total

Preprocessing:

- REGEX: server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+) \3

Nginx Nginx: Requests per second

The total number of client requests.

DEPENDENT nginx.requests.total.rate

Preprocessing:

- REGEX: server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+) \3

- CHANGE_PER_SECOND

Nginx Nginx: Connections accepted per second

The total number of accepted client connections.

DEPENDENT nginx.connections.accepted.rate

Preprocessing:

- REGEX: server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+) \1

- CHANGE_PER_SECOND

Nginx Nginx: Connections dropped per second

The total number of dropped client connections.

DEPENDENT nginx.connections.dropped.rate

Preprocessing:

- JAVASCRIPT: Text is too long. Please see the template.

- CHANGE_PER_SECOND

Nginx Nginx: Connections handled per second

The total number of handled connections. Generally, the parameter value is the same as accepts unless some resource limits have been reached (for example, the worker_connections limit).

DEPENDENT nginx.connections.handled.rate

Preprocessing:

- REGEX: server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+) \2

- CHANGE_PER_SECOND

Nginx Nginx: Connections active

The current number of active client connections including Waiting connections.

DEPENDENT nginx.connections.active

Preprocessing:

- REGEX: Active connections: ([0-9]+) \1

Nginx Nginx: Connections reading

The current number of connections where nginx is reading the request header.

DEPENDENT nginx.connections.reading

Preprocessing:

- REGEX: Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+) \1

Nginx Nginx: Connections waiting

The current number of idle client connections waiting for a request.

DEPENDENT nginx.connections.waiting

Preprocessing:

- REGEX: Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+) \3

Nginx Nginx: Connections writing

The current number of connections where nginx is writing the response back to the client.

DEPENDENT nginx.connections.writing

Preprocessing:

- REGEX: Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+) \2

Nginx Nginx: Number of processes running

Number of the Nginx processes running.

ZABBIX_PASSIVE proc.num[nginx]
Nginx Nginx: Memory usage (vsize)

Virtual memory size used by process in bytes.

ZABBIX_PASSIVE proc.mem[nginx,,,,vsize]
Nginx Nginx: Memory usage (rss)

Resident set size memory used by process in bytes.

ZABBIX_PASSIVE proc.mem[nginx,,,,rss]
Nginx Nginx: CPU utilization

Process CPU utilization percentage.

ZABBIX_PASSIVE proc.cpu.util[nginx]
Nginx Nginx: Version

-

DEPENDENT nginx.version

Preprocessing:

- REGEX: Server: nginx\/(.+(?<!\r)) \1

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Zabbix_raw_items Nginx: Get stub status page

The following status information is provided:

Active connections - the current number of active client connections including Waiting connections.

Accepts - the total number of accepted client connections.

Handled - the total number of handled connections. Generally, the parameter value is the same as accepts unless some resource limits have been reached (for example, the worker_connections limit).

Requests - the total number of client requests.

Reading - the current number of connections where nginx is reading the request header.

Writing - the current number of connections where nginx is writing the response back to the client.

Waiting - the current number of idle client connections waiting for a request.

https://nginx.org/en/docs/http/ngx_http_stub_status_module.html

ZABBIX_PASSIVE web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]

Triggers

Name Description Expression Severity Dependencies and additional info
Nginx: Service is down

-

{TEMPLATE_NAME:net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"].last()}=0 AVERAGE

Manual close: YES

Depends on:

- Nginx: Process is not running

Nginx: Service response time is too high (over {$NGINX.RESPONSE_TIME.MAX.WARN}s for 5m)

-

{TEMPLATE_NAME:net.tcp.service.perf[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"].min(5m)}>{$NGINX.RESPONSE_TIME.MAX.WARN} WARNING

Manual close: YES

Depends on:

- Nginx: Process is not running

- Nginx: Service is down

Nginx: High connections drop rate (more than {$NGINX.DROP_RATE.MAX.WARN} for 5m)

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

{TEMPLATE_NAME:nginx.connections.dropped.rate.min(5m)} > {$NGINX.DROP_RATE.MAX.WARN} WARNING

Depends on:

- Nginx: Process is not running

- Nginx: Service is down

Nginx: Process is not running

-

{TEMPLATE_NAME:proc.num[nginx].last()}=0 HIGH
Nginx: Version has changed (new version: {ITEM.VALUE})

Nginx version has changed. Ack to close.

{TEMPLATE_NAME:nginx.version.diff()}=1 and {TEMPLATE_NAME:nginx.version.strlen()}>0 INFO

Manual close: YES

Nginx: Failed to fetch stub status page (or no data for 30m)

Zabbix has not received data for items for the last 30 minutes.

{TEMPLATE_NAME:web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"].str("HTTP/1.1 200")}=0 or {TEMPLATE_NAME:web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"].nodata(30m)}=1 WARNING

Manual close: YES

Depends on:

- Nginx: Process is not running

- Nginx: Service is down

Feedback

Please report any issues with the template at https://support.zabbix.com

You can also provide a feedback, discuss the template or ask for help with it at ZABBIX forums.

Articles and documentation

+ Propose new article

Didn't find what you are looking for?