zabbix_export:
  version: '7.0'
  template_groups:
    - uuid: a571c0d144b14fd4a87a9d9b2aa9fcd6
      name: Templates/Applications
  templates:
    - uuid: 27f6424905884dbb96ab9210d987a56c
      template: 'Nginx by Zabbix agent'
      name: 'Nginx by Zabbix agent'
      description: |
        Get metrics from stub status module using Zabbix agent running on Linux
        https://nginx.ru/en/docs/http/ngx_http_stub_status_module.html
        
        You can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/384765-discussion-thread-for-official-zabbix-template-nginx
        
        Generated by official Zabbix template tool "Templator"
      vendor:
        name: Zabbix
        version: 7.0-0
      groups:
        - name: Templates/Applications
      items:
        - uuid: 75a7795df3034835bcfd143f7c3e9b94
          name: 'Service response time'
          key: 'net.tcp.service.perf[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"]'
          value_type: FLOAT
          units: s
          tags:
            - tag: component
              value: application
            - tag: component
              value: health
        - uuid: f06e76888f464e13b7cc4c3db33e8131
          name: 'Service status'
          key: 'net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"]'
          valuemap:
            name: 'Service state'
          preprocessing:
            - type: DISCARD_UNCHANGED_HEARTBEAT
              parameters:
                - 10m
          tags:
            - tag: component
              value: application
            - tag: component
              value: health
        - uuid: 9e2be446ac79491c8be1bcd789392066
          name: 'Connections accepted per second'
          type: DEPENDENT
          key: nginx.connections.accepted.rate
          value_type: FLOAT
          description: 'The total number of accepted client connections.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)'
                - \1
            - type: CHANGE_PER_SECOND
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: 436f2dc87cda418eb8f19ed6910c7bd0
          name: 'Connections active'
          type: DEPENDENT
          key: nginx.connections.active
          description: 'The current number of active client connections including waiting connections.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'Active connections: ([0-9]+)'
                - \1
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: 4027e6db5e024aff98056faa2d4b43cd
          name: 'Connections dropped per second'
          type: DEPENDENT
          key: nginx.connections.dropped.rate
          value_type: FLOAT
          description: 'The total number of dropped client connections.'
          preprocessing:
            - type: JAVASCRIPT
              parameters:
                - |
                  var a = value.match(/server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)/)
                  if (a) {
                  	return a[1]-a[2]
                  }
            - type: CHANGE_PER_SECOND
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: 06191636a7104e1bb40d197493b80958
          name: 'Connections handled per second'
          type: DEPENDENT
          key: nginx.connections.handled.rate
          value_type: FLOAT
          description: 'The total number of handled connections. Generally, the parameter value is the same as for the accepted connections, unless some resource limits have been reached (for example, the `worker_connections limit`).'
          preprocessing:
            - type: REGEX
              parameters:
                - 'server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)'
                - \2
            - type: CHANGE_PER_SECOND
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: f5925c78389143c7924432483a5c716c
          name: 'Connections reading'
          type: DEPENDENT
          key: nginx.connections.reading
          description: 'The current number of connections where Nginx is reading the request header.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+)'
                - \1
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: d6cfa828ba344ffe948d8d985b849316
          name: 'Connections waiting'
          type: DEPENDENT
          key: nginx.connections.waiting
          description: 'The current number of idle client connections waiting for a request.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+)'
                - \3
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: c038a572f73f4a418ddcc5aeb8b0a547
          name: 'Connections writing'
          type: DEPENDENT
          key: nginx.connections.writing
          description: 'The current number of connections where Nginx is writing a response back to the client.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'Reading: ([0-9]+) Writing: ([0-9]+) Waiting: ([0-9]+)'
                - \2
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: connections
        - uuid: b28444fb9b834d03a72036882c80b921
          name: 'Requests total'
          type: DEPENDENT
          key: nginx.requests.total
          description: 'The total number of client requests.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)'
                - \3
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: requests
        - uuid: 2600a696278f490f86cadd8c8836f269
          name: 'Requests per second'
          type: DEPENDENT
          key: nginx.requests.total.rate
          value_type: FLOAT
          description: 'The total number of client requests.'
          preprocessing:
            - type: REGEX
              parameters:
                - 'server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)'
                - \3
            - type: CHANGE_PER_SECOND
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: requests
        - uuid: 3dcc81006977478f92be6dd040d66eb5
          name: Version
          type: DEPENDENT
          key: nginx.version
          value_type: CHAR
          preprocessing:
            - type: REGEX
              parameters:
                - '(?i)Server: nginx\/(.+(?<!\r))'
                - \1
            - type: DISCARD_UNCHANGED_HEARTBEAT
              parameters:
                - 1d
          master_item:
            key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          tags:
            - tag: component
              value: application
          triggers:
            - uuid: 7ad80c508f2f48b59f7659c673db9f36
              expression: 'last(/Nginx by Zabbix agent/nginx.version,#1)<>last(/Nginx by Zabbix agent/nginx.version,#2) and length(last(/Nginx by Zabbix agent/nginx.version))>0'
              name: 'Version has changed'
              event_name: 'Version has changed (new version: {ITEM.VALUE})'
              priority: INFO
              description: 'The Nginx version has changed. Acknowledge to close the problem manually.'
              manual_close: 'YES'
              tags:
                - tag: scope
                  value: notice
        - uuid: d43b4b99b6084076a4feb1fde51ecc40
          name: 'Get processes summary'
          key: 'proc.get[{$NGINX.PROCESS.NAME.PARAMETER},,,summary]'
          history: '0'
          value_type: TEXT
          description: 'The aggregated data of summary metrics for all processes.'
          tags:
            - tag: component
              value: raw
        - uuid: 52a23a9f6d60490c8f5565b938154f61
          name: 'Get stub status page'
          key: 'web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"]'
          history: 1h
          value_type: TEXT
          description: |
            The following status information is provided:
            `Active connections` - the current number of active client connections including waiting connections.
            `Accepted` - the total number of accepted client connections.
            `Handled` - the total number of handled connections. Generally, the parameter value is the same as for the accepted connections, 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 a response back to the client.
            `Waiting` - the current number of idle client connections waiting for a request.
            
            See also [Module ngx_http_stub_status_module](https://nginx.org/en/docs/http/ngx_http_stub_status_module.html).
          tags:
            - tag: component
              value: application
            - tag: component
              value: health
      discovery_rules:
        - uuid: f4a898f929c54b3493506e68703fa2cc
          name: 'Nginx process discovery'
          type: DEPENDENT
          key: nginx.proc.discovery
          filter:
            evaltype: AND
            conditions:
              - macro: '{#NGINX.NAME}'
                value: '{$NGINX.PROCESS_NAME}'
          description: 'The discovery of Nginx process summary.'
          item_prototypes:
            - uuid: 632e441011674f04886096475180dcbb
              name: 'Get process data'
              type: DEPENDENT
              key: 'nginx.proc.get[{#NGINX.NAME}]'
              history: '0'
              value_type: TEXT
              description: 'The summary metrics aggregated by a process {#NGINX.NAME}.'
              preprocessing:
                - type: JSONPATH
                  parameters:
                    - '$.[?(@["name"]=="{#NGINX.NAME}")].first()'
                  error_handler: CUSTOM_VALUE
                  error_handler_params: 'Failed to retrieve process {#NGINX.NAME} data'
              master_item:
                key: 'proc.get[{$NGINX.PROCESS.NAME.PARAMETER},,,summary]'
              tags:
                - tag: component
                  value: raw
            - uuid: ba3da6baccee4b31947bf20d3cae0e5f
              name: 'Number of running processes'
              type: DEPENDENT
              key: 'nginx.proc.num[{#NGINX.NAME}]'
              description: 'The number of running processes {#NGINX.NAME}.'
              preprocessing:
                - type: JSONPATH
                  parameters:
                    - $.processes
                  error_handler: CUSTOM_VALUE
                  error_handler_params: '0'
                - type: DISCARD_UNCHANGED_HEARTBEAT
                  parameters:
                    - 1h
              master_item:
                key: 'nginx.proc.get[{#NGINX.NAME}]'
              tags:
                - tag: component
                  value: system
              trigger_prototypes:
                - uuid: 903e6a1f30154ee49df3f8d87e0164cc
                  expression: 'last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])=0'
                  name: 'Process is not running'
                  priority: HIGH
                  tags:
                    - tag: scope
                      value: availability
            - uuid: 5887d0062bed4233a03d4f408fac7163
              name: 'Memory usage, %'
              type: DEPENDENT
              key: 'nginx.proc.pmem[{#NGINX.NAME}]'
              value_type: FLOAT
              units: '%'
              description: 'The percentage of real memory used by a process {#NGINX.NAME}.'
              preprocessing:
                - type: JSONPATH
                  parameters:
                    - $.pmem
                  error_handler: DISCARD_VALUE
              master_item:
                key: 'nginx.proc.get[{#NGINX.NAME}]'
              tags:
                - tag: component
                  value: memory
            - uuid: 64d208475c034bae953a64cde1833ebb
              name: 'Memory usage (rss)'
              type: DEPENDENT
              key: 'nginx.proc.rss[{#NGINX.NAME}]'
              units: B
              description: 'The summary of resident set size memory used by a process {#NGINX.NAME} expressed in bytes.'
              preprocessing:
                - type: JSONPATH
                  parameters:
                    - $.rss
                  error_handler: DISCARD_VALUE
              master_item:
                key: 'nginx.proc.get[{#NGINX.NAME}]'
              tags:
                - tag: component
                  value: memory
            - uuid: 21fccb0286fb407c85f1972e994c698e
              name: 'Memory usage (vsize)'
              type: DEPENDENT
              key: 'nginx.proc.vmem[{#NGINX.NAME}]'
              units: B
              description: 'The summary of virtual memory used by a process {#NGINX.NAME} expressed in bytes.'
              preprocessing:
                - type: JSONPATH
                  parameters:
                    - $.vsize
                  error_handler: DISCARD_VALUE
              master_item:
                key: 'nginx.proc.get[{#NGINX.NAME}]'
              tags:
                - tag: component
                  value: memory
            - uuid: 84c95c1955bf4ccaa12a060a9acdb478
              name: 'CPU utilization'
              key: 'proc.cpu.util[{#NGINX.NAME}]'
              value_type: FLOAT
              units: '%'
              description: 'The percentage of the CPU utilization by a process {#NGINX.NAME}.'
              tags:
                - tag: component
                  value: cpu
          trigger_prototypes:
            - uuid: a497b80eb03f469c9552881b498003b2
              expression: |
                (find(/Nginx by Zabbix agent/web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"],,"iregexp","HTTP\\/[\\d.]+\\s+200")=0 or
                nodata(/Nginx by Zabbix agent/web.page.get["{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PATH}","{$NGINX.STUB_STATUS.PORT}"],30m)) and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0
              name: 'Failed to fetch stub status page'
              event_name: 'Failed to fetch stub status page (or no data for 30m)'
              priority: WARNING
              description: 'Zabbix has not received any data for items for the last 30 minutes.'
              manual_close: 'YES'
              dependencies:
                - name: 'Service is down'
                  expression: 'last(/Nginx by Zabbix agent/net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"])=0 and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0'
              tags:
                - tag: scope
                  value: availability
            - uuid: f2d431fa9bc446608caa3f80ef27c41b
              expression: 'min(/Nginx by Zabbix agent/nginx.connections.dropped.rate,5m) > {$NGINX.DROP_RATE.MAX.WARN} and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0'
              name: 'High connections drop rate'
              event_name: 'High connections drop rate (more than {$NGINX.DROP_RATE.MAX.WARN} for 5m)'
              opdata: 'Current rate: {ITEM.LASTVALUE1}'
              priority: WARNING
              description: 'The rate of dropping connections has been greater than {$NGINX.DROP_RATE.MAX.WARN} for the last 5 minutes.'
              dependencies:
                - name: 'Service is down'
                  expression: 'last(/Nginx by Zabbix agent/net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"])=0 and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0'
              tags:
                - tag: scope
                  value: performance
            - uuid: c043191c22f34522ba4f83430d9f88b1
              expression: 'last(/Nginx by Zabbix agent/net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"])=0 and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0'
              name: 'Service is down'
              priority: AVERAGE
              manual_close: 'YES'
              tags:
                - tag: scope
                  value: availability
            - uuid: f5db329410a14609a5f3e883ca493cc8
              expression: 'min(/Nginx by Zabbix agent/net.tcp.service.perf[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"],5m)>{$NGINX.RESPONSE_TIME.MAX.WARN} and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0'
              name: 'Service response time is too high'
              event_name: 'Service response time is too high (over {$NGINX.RESPONSE_TIME.MAX.WARN}s for 5m)'
              priority: WARNING
              manual_close: 'YES'
              dependencies:
                - name: 'Service is down'
                  expression: 'last(/Nginx by Zabbix agent/net.tcp.service[http,"{$NGINX.STUB_STATUS.HOST}","{$NGINX.STUB_STATUS.PORT}"])=0 and last(/Nginx by Zabbix agent/nginx.proc.num[{#NGINX.NAME}])>0'
              tags:
                - tag: scope
                  value: performance
          graph_prototypes:
            - uuid: 69ca908afa1d468d983a263d06910925
              name: 'Nginx: Memory usage[{#NGINX.NAME}]'
              graph_items:
                - drawtype: BOLD_LINE
                  color: 199C0D
                  item:
                    host: 'Nginx by Zabbix agent'
                    key: 'nginx.proc.vmem[{#NGINX.NAME}]'
                - sortorder: '1'
                  drawtype: BOLD_LINE
                  color: F63100
                  item:
                    host: 'Nginx by Zabbix agent'
                    key: 'nginx.proc.rss[{#NGINX.NAME}]'
          master_item:
            key: 'proc.get[{$NGINX.PROCESS.NAME.PARAMETER},,,summary]'
          lld_macro_paths:
            - lld_macro: '{#NGINX.NAME}'
              path: $.name
      tags:
        - tag: class
          value: software
        - tag: target
          value: nginx
      macros:
        - macro: '{$NGINX.DROP_RATE.MAX.WARN}'
          value: '1'
          description: 'The critical rate of the dropped connections for a trigger expression.'
        - macro: '{$NGINX.PROCESS.NAME.PARAMETER}'
          description: 'The process name of the Nginx server used in the item key `proc.get`. It could be specified if the correct process name is known.'
        - macro: '{$NGINX.PROCESS_NAME}'
          value: nginx
          description: 'The process name filter for the Nginx process discovery.'
        - macro: '{$NGINX.RESPONSE_TIME.MAX.WARN}'
          value: '10'
          description: 'The maximum response time of Nginx expressed in seconds for a trigger expression.'
        - macro: '{$NGINX.STUB_STATUS.HOST}'
          value: localhost
          description: 'The hostname or IP address of the Nginx host or Nginx container of `astub_status`.'
        - macro: '{$NGINX.STUB_STATUS.PATH}'
          value: basic_status
          description: 'The path of the `Nginx stub_status` page.'
        - macro: '{$NGINX.STUB_STATUS.PORT}'
          value: '80'
          description: 'The port of the `Nginx stub_status` host or container.'
      dashboards:
        - uuid: 9d071e3a148c405e85c53ef25d54efaf
          name: 'Nginx performance'
          pages:
            - widgets:
                - type: graph
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Nginx by Zabbix agent'
                        name: 'Nginx: Connections by state'
                    - type: STRING
                      name: reference
                      value: AAAAA
                - type: graph
                  'y': '5'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Nginx by Zabbix agent'
                        name: 'Nginx: Connections per second'
                    - type: STRING
                      name: reference
                      value: AAAAC
                - type: graph
                  x: '36'
                  width: '36'
                  height: '5'
                  fields:
                    - type: GRAPH
                      name: graphid.0
                      value:
                        host: 'Nginx by Zabbix agent'
                        name: 'Nginx: Requests per second'
                    - type: STRING
                      name: reference
                      value: AAAAB
      valuemaps:
        - uuid: 53c8528c18814f30a45d1540ab9e5c00
          name: 'Service state'
          mappings:
            - value: '0'
              newvalue: Down
            - value: '1'
              newvalue: Up
  graphs:
    - uuid: ba234158aeca468a8592d944f9aae691
      name: 'Nginx: Connections by state'
      graph_items:
        - drawtype: BOLD_LINE
          color: 199C0D
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.active
        - sortorder: '1'
          color: F63100
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.waiting
        - sortorder: '2'
          color: 00611C
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.writing
        - sortorder: '3'
          color: F7941D
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.reading
    - uuid: b82a5b89864a47638421458f3e74563d
      name: 'Nginx: Connections per second'
      graph_items:
        - color: 199C0D
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.accepted.rate
        - sortorder: '1'
          color: F63100
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.handled.rate
        - sortorder: '2'
          color: 00611C
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.connections.dropped.rate
    - uuid: a2d2fec823514df09731381304c245e9
      name: 'Nginx: Requests per second'
      graph_items:
        - drawtype: GRADIENT_LINE
          color: 199C0D
          item:
            host: 'Nginx by Zabbix agent'
            key: nginx.requests.total.rate
