VOOZH about

URL: https://www.zabbix.com/integrations/tomcat

⇱ Apache Tomcat monitoring and integration with Zabbix


Propose integration

Apache Tomcat

Apache Tomcat is an open-source implementation of the Java Servlet, JavaServer Pages, Java Expression Language and WebSocket technologies. Tomcat provides a "pure Java" HTTP web server environment in which Java code can run.

Available solutions




This template is for Zabbix version: 7.4

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

Apache Tomcat by JMX

Overview

This template is designed for the effortless deployment of Apache Tomcat monitoring by Zabbix via JMX and doesn't require any external scripts.

Requirements

Zabbix version: 7.4 and higher.

Tested versions

This template has been tested on:

  • Apache Tomcat 8.5.59

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Macros used

Name Description Default
{$TOMCAT.USER}

User for JMX

{$TOMCAT.PASSWORD}

Password for JMX

{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.MATCHES}

Filter for discoverable global request processors.

.*
{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.NOT_MATCHES}

Filter to exclude global request processors.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.MANAGER.MATCHES}

Filter for discoverable managers.

.*
{$TOMCAT.LLD.FILTER.MANAGER.NOT_MATCHES}

Filter to exclude managers.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.THREAD_POOL.MATCHES}

Filter for discoverable thread pools.

.*
{$TOMCAT.LLD.FILTER.THREAD_POOL.NOT_MATCHES}

Filter to exclude thread pools.

CHANGE_IF_NEEDED
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m

Items

Name Description Type Key and additional info
Version

The version of the Tomcat.

JMX agent jmx["Catalina:type=Server",serverInfo]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Triggers

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: Version has been changed

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

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 Info Manual close: Yes

LLD rule Global request processors discovery

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequestProcessor

JMX agent jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Item prototypes for Global request processors discovery

Name Description Type Key and additional info
{#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesReceived]

Preprocessing

  • Change per second
{#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesSent]

Preprocessing

  • Change per second
{#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},errorCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},requestCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor

{#JMXNAME}

JMX agent jmx[{#JMXOBJ},processingTime]

Preprocessing

  • Custom multiplier: 0.001

LLD rule Protocol handlers discovery

Name Description Type Key and additional info
Protocol handlers discovery

Discovery for ProtocolHandler

JMX agent jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Item prototypes for Protocol handlers discovery

Name Description Type Key and additional info
{#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX agent jmx[{#JMXOBJ},compression]

Preprocessing

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Protocol handlers discovery

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: {#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 Info Manual close: Yes

LLD rule Thread pools discovery

Name Description Type Key and additional info
Thread pools discovery

Discovery for ThreadPool

JMX agent jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Item prototypes for Thread pools discovery

Name Description Type Key and additional info
{#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX agent jmx[{#JMXOBJ},currentThreadCount]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX agent jmx[{#JMXOBJ},maxThreads]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX agent jmx[{#JMXOBJ},currentThreadsBusy]

Trigger prototypes for Thread pools discovery

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: {#JMXNAME}: Busy worker threads count is high

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 High

LLD rule Contexts discovery

Name Description Type Key and additional info
Contexts discovery

Discovery for contexts

JMX agent jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Item prototypes for Contexts discovery

Name Description Type Key and additional info
{#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX agent jmx[{#JMXOBJ},activeSessions]
{#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX agent jmx[{#JMXOBJ},maxActive]
{#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX agent jmx[{#JMXOBJ},sessionCounter]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX agent jmx[{#JMXOBJ},rejectedSessions]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX agent jmx[{#JMXOBJ},maxActiveSessions]

Feedback

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

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

This template is for Zabbix version: 7.2

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

Apache Tomcat by JMX

Overview

This template is designed for the effortless deployment of Apache Tomcat monitoring by Zabbix via JMX and doesn't require any external scripts.

Requirements

Zabbix version: 7.2 and higher.

Tested versions

This template has been tested on:

  • Apache Tomcat 8.5.59

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Macros used

Name Description Default
{$TOMCAT.USER}

User for JMX

{$TOMCAT.PASSWORD}

Password for JMX

{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.MATCHES}

Filter for discoverable global request processors.

.*
{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.NOT_MATCHES}

Filter to exclude global request processors.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.MANAGER.MATCHES}

Filter for discoverable managers.

.*
{$TOMCAT.LLD.FILTER.MANAGER.NOT_MATCHES}

Filter to exclude managers.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.THREAD_POOL.MATCHES}

Filter for discoverable thread pools.

.*
{$TOMCAT.LLD.FILTER.THREAD_POOL.NOT_MATCHES}

Filter to exclude thread pools.

CHANGE_IF_NEEDED
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m

Items

Name Description Type Key and additional info
Version

The version of the Tomcat.

JMX agent jmx["Catalina:type=Server",serverInfo]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Triggers

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: Version has been changed

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

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 Info Manual close: Yes

LLD rule Global request processors discovery

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequestProcessor

JMX agent jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Item prototypes for Global request processors discovery

Name Description Type Key and additional info
{#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesReceived]

Preprocessing

  • Change per second
{#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesSent]

Preprocessing

  • Change per second
{#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},errorCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},requestCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor

{#JMXNAME}

JMX agent jmx[{#JMXOBJ},processingTime]

Preprocessing

  • Custom multiplier: 0.001

LLD rule Protocol handlers discovery

Name Description Type Key and additional info
Protocol handlers discovery

Discovery for ProtocolHandler

JMX agent jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Item prototypes for Protocol handlers discovery

Name Description Type Key and additional info
{#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX agent jmx[{#JMXOBJ},compression]

Preprocessing

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Protocol handlers discovery

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: {#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 Info Manual close: Yes

LLD rule Thread pools discovery

Name Description Type Key and additional info
Thread pools discovery

Discovery for ThreadPool

JMX agent jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Item prototypes for Thread pools discovery

Name Description Type Key and additional info
{#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX agent jmx[{#JMXOBJ},currentThreadCount]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX agent jmx[{#JMXOBJ},maxThreads]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX agent jmx[{#JMXOBJ},currentThreadsBusy]

Trigger prototypes for Thread pools discovery

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: {#JMXNAME}: Busy worker threads count is high

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 High

LLD rule Contexts discovery

Name Description Type Key and additional info
Contexts discovery

Discovery for contexts

JMX agent jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Item prototypes for Contexts discovery

Name Description Type Key and additional info
{#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX agent jmx[{#JMXOBJ},activeSessions]
{#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX agent jmx[{#JMXOBJ},maxActive]
{#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX agent jmx[{#JMXOBJ},sessionCounter]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX agent jmx[{#JMXOBJ},rejectedSessions]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX agent jmx[{#JMXOBJ},maxActiveSessions]

Feedback

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

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

This template is for Zabbix version: 7.0

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

Apache Tomcat by JMX

Overview

This template is designed for the effortless deployment of Apache Tomcat monitoring by Zabbix via JMX and doesn't require any external scripts.

Requirements

Zabbix version: 7.0 and higher.

Tested versions

This template has been tested on:

  • Apache Tomcat 8.5.59

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Macros used

Name Description Default
{$TOMCAT.USER}

User for JMX

{$TOMCAT.PASSWORD}

Password for JMX

{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.MATCHES}

Filter for discoverable global request processors.

.*
{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.NOT_MATCHES}

Filter to exclude global request processors.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.MANAGER.MATCHES}

Filter for discoverable managers.

.*
{$TOMCAT.LLD.FILTER.MANAGER.NOT_MATCHES}

Filter to exclude managers.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.THREAD_POOL.MATCHES}

Filter for discoverable thread pools.

.*
{$TOMCAT.LLD.FILTER.THREAD_POOL.NOT_MATCHES}

Filter to exclude thread pools.

CHANGE_IF_NEEDED
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m

Items

Name Description Type Key and additional info
Version

The version of the Tomcat.

JMX agent jmx["Catalina:type=Server",serverInfo]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Triggers

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: Version has been changed

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

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 Info Manual close: Yes

LLD rule Global request processors discovery

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequestProcessor

JMX agent jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Item prototypes for Global request processors discovery

Name Description Type Key and additional info
{#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesReceived]

Preprocessing

  • Change per second
{#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesSent]

Preprocessing

  • Change per second
{#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},errorCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},requestCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor

{#JMXNAME}

JMX agent jmx[{#JMXOBJ},processingTime]

Preprocessing

  • Custom multiplier: 0.001

LLD rule Protocol handlers discovery

Name Description Type Key and additional info
Protocol handlers discovery

Discovery for ProtocolHandler

JMX agent jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Item prototypes for Protocol handlers discovery

Name Description Type Key and additional info
{#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX agent jmx[{#JMXOBJ},compression]

Preprocessing

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Protocol handlers discovery

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: {#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 Info Manual close: Yes

LLD rule Thread pools discovery

Name Description Type Key and additional info
Thread pools discovery

Discovery for ThreadPool

JMX agent jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Item prototypes for Thread pools discovery

Name Description Type Key and additional info
{#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX agent jmx[{#JMXOBJ},currentThreadCount]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX agent jmx[{#JMXOBJ},maxThreads]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX agent jmx[{#JMXOBJ},currentThreadsBusy]

Trigger prototypes for Thread pools discovery

Name Description Expression Severity Dependencies and additional info
Apache Tomcat: {#JMXNAME}: Busy worker threads count is high

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 High

LLD rule Contexts discovery

Name Description Type Key and additional info
Contexts discovery

Discovery for contexts

JMX agent jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Item prototypes for Contexts discovery

Name Description Type Key and additional info
{#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX agent jmx[{#JMXOBJ},activeSessions]
{#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX agent jmx[{#JMXOBJ},maxActive]
{#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX agent jmx[{#JMXOBJ},sessionCounter]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX agent jmx[{#JMXOBJ},rejectedSessions]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX agent jmx[{#JMXOBJ},maxActiveSessions]

Feedback

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

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

This template is for Zabbix version: 6.4

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

Apache Tomcat by JMX

Overview

This template is designed for the effortless deployment of Apache Tomcat monitoring by Zabbix via JMX and doesn't require any external scripts.

Requirements

Zabbix version: 6.4 and higher.

Tested versions

This template has been tested on:

  • Apache Tomcat 8.5.59

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Macros used

Name Description Default
{$TOMCAT.USER}

User for JMX

{$TOMCAT.PASSWORD}

Password for JMX

{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.MATCHES}

Filter for discoverable global request processors.

.*
{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.NOT_MATCHES}

Filter to exclude global request processors.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.MANAGER.MATCHES}

Filter for discoverable managers.

.*
{$TOMCAT.LLD.FILTER.MANAGER.NOT_MATCHES}

Filter to exclude managers.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.THREAD_POOL.MATCHES}

Filter for discoverable thread pools.

.*
{$TOMCAT.LLD.FILTER.THREAD_POOL.NOT_MATCHES}

Filter to exclude thread pools.

CHANGE_IF_NEEDED
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m

Items

Name Description Type Key and additional info
Tomcat: Version

The version of the Tomcat.

JMX agent jmx["Catalina:type=Server",serverInfo]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Triggers

Name Description Expression Severity Dependencies and additional info
Tomcat: Version has been changed

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

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 Info Manual close: Yes

LLD rule Global request processors discovery

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequestProcessor

JMX agent jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Item prototypes for Global request processors discovery

Name Description Type Key and additional info
{#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesReceived]

Preprocessing

  • Change per second
{#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesSent]

Preprocessing

  • Change per second
{#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},errorCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},requestCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor

{#JMXNAME}

JMX agent jmx[{#JMXOBJ},processingTime]

Preprocessing

  • Custom multiplier: 0.001

LLD rule Protocol handlers discovery

Name Description Type Key and additional info
Protocol handlers discovery

Discovery for ProtocolHandler

JMX agent jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Item prototypes for Protocol handlers discovery

Name Description Type Key and additional info
{#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX agent jmx[{#JMXOBJ},compression]

Preprocessing

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Protocol handlers discovery

Name Description Expression Severity Dependencies and additional info
{#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 Info Manual close: Yes

LLD rule Thread pools discovery

Name Description Type Key and additional info
Thread pools discovery

Discovery for ThreadPool

JMX agent jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Item prototypes for Thread pools discovery

Name Description Type Key and additional info
{#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX agent jmx[{#JMXOBJ},currentThreadCount]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX agent jmx[{#JMXOBJ},maxThreads]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX agent jmx[{#JMXOBJ},currentThreadsBusy]

Trigger prototypes for Thread pools discovery

Name Description Expression Severity Dependencies and additional info
{#JMXNAME}: Busy worker threads count is high

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 High

LLD rule Contexts discovery

Name Description Type Key and additional info
Contexts discovery

Discovery for contexts

JMX agent jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Item prototypes for Contexts discovery

Name Description Type Key and additional info
{#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX agent jmx[{#JMXOBJ},activeSessions]
{#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX agent jmx[{#JMXOBJ},maxActive]
{#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX agent jmx[{#JMXOBJ},sessionCounter]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX agent jmx[{#JMXOBJ},rejectedSessions]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX agent jmx[{#JMXOBJ},maxActiveSessions]

Feedback

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

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

This template is for Zabbix version: 6.2

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

Apache Tomcat by JMX

Overview

For Zabbix version: 6.2 and higher
Official JMX Template for Apache Tomcat.

This template was tested on:

  • Apache Tomcat, version 8.5.59

Setup

See Zabbix template operation for basic instructions.

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$TOMCAT.LLD.FILTER.MATCHES}

Filter for discoverable objects. Can be used with following contexts: "GlobalRequestProcessor", "ThreadPool", "Manager"

.*
{$TOMCAT.LLD.FILTER.NOT_MATCHES}

Filter to exclude discovered objects. Can be used with following contexts: "GlobalRequestProcessor", "ThreadPool", "Manager"

CHANGE IF NEEDED
{$TOMCAT.PASSWORD}

Password for JMX

``
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m
{$TOMCAT.USER}

User for JMX

``

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Contexts discovery

Discovery for contexts

JMX jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Filter:

AND

- {#JMXHOST} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"Manager"}

- {#JMXHOST} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"Manager"}

Global request processors discovery

Discovery for GlobalRequestProcessor

JMX jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Filter:

AND

- {#JMXNAME} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"GlobalRequestProcessor"}

- {#JMXNAME} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"GlobalRequestProcessor"}

Protocol handlers discovery

Discovery for ProtocolHandler

JMX jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Filter:

AND

- {#JMXATTR} MATCHES_REGEX ^name$

Thread pools discovery

Discovery for ThreadPool

JMX jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Filter:

AND

- {#JMXNAME} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"ThreadPool"}

- {#JMXNAME} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"ThreadPool"}

Items collected

Group Name Description Type Key and additional info
Tomcat Tomcat: Version

The version of the Tomcat.

JMX jmx["Catalina:type=Server",serverInfo]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Tomcat {#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX jmx[{#JMXOBJ},bytesReceived]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX jmx[{#JMXOBJ},bytesSent]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},errorCount]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},requestCount]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor

{#JMXNAME}

JMX jmx[{#JMXOBJ},processingTime]

Preprocessing:

- MULTIPLIER: 0.001

Tomcat {#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX jmx[{#JMXOBJ},compression]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 1h

Tomcat {#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX jmx[{#JMXOBJ},currentThreadCount]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Tomcat {#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX jmx[{#JMXOBJ},maxThreads]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Tomcat {#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX jmx[{#JMXOBJ},currentThreadsBusy]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX jmx[{#JMXOBJ},activeSessions]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX jmx[{#JMXOBJ},maxActive]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX jmx[{#JMXOBJ},sessionCounter]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX jmx[{#JMXOBJ},rejectedSessions]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX jmx[{#JMXOBJ},maxActiveSessions]

Triggers

Name Description Expression Severity Dependencies and additional info
Tomcat: Version has been changed

Tomcat version has changed. Ack to close.

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 INFO

Manual close: YES

{#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 INFO

Manual close: YES

{#JMXNAME}: Busy worker threads count is high

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 HIGH

Feedback

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

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

This template is for Zabbix version: 6.0

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

Apache Tomcat by JMX

Overview

This template is designed for the effortless deployment of Apache Tomcat monitoring by Zabbix via JMX and doesn't require any external scripts.

Requirements

Zabbix version: 6.0 and higher.

Tested versions

This template has been tested on:

  • Apache Tomcat 8.5.59

Configuration

Zabbix should be configured according to the instructions in the Templates out of the box section.

Setup

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Macros used

Name Description Default
{$TOMCAT.USER}

User for JMX

{$TOMCAT.PASSWORD}

Password for JMX

{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.MATCHES}

Filter for discoverable global request processors.

.*
{$TOMCAT.LLD.FILTER.REQUEST_PROCESSOR.NOT_MATCHES}

Filter to exclude global request processors.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.MANAGER.MATCHES}

Filter for discoverable managers.

.*
{$TOMCAT.LLD.FILTER.MANAGER.NOT_MATCHES}

Filter to exclude managers.

CHANGE_IF_NEEDED
{$TOMCAT.LLD.FILTER.THREAD_POOL.MATCHES}

Filter for discoverable thread pools.

.*
{$TOMCAT.LLD.FILTER.THREAD_POOL.NOT_MATCHES}

Filter to exclude thread pools.

CHANGE_IF_NEEDED
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m

Items

Name Description Type Key and additional info
Tomcat: Version

The version of the Tomcat.

JMX agent jmx["Catalina:type=Server",serverInfo]

Preprocessing

  • Discard unchanged with heartbeat: 1d

Triggers

Name Description Expression Severity Dependencies and additional info
Tomcat: Version has been changed

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

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 Info Manual close: Yes

LLD rule Global request processors discovery

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequestProcessor

JMX agent jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Item prototypes for Global request processors discovery

Name Description Type Key and additional info
{#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesReceived]

Preprocessing

  • Change per second
{#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},bytesSent]

Preprocessing

  • Change per second
{#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},errorCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX agent jmx[{#JMXOBJ},requestCount]

Preprocessing

  • Change per second
{#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor

{#JMXNAME}

JMX agent jmx[{#JMXOBJ},processingTime]

Preprocessing

  • Custom multiplier: 0.001

LLD rule Protocol handlers discovery

Name Description Type Key and additional info
Protocol handlers discovery

Discovery for ProtocolHandler

JMX agent jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Item prototypes for Protocol handlers discovery

Name Description Type Key and additional info
{#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX agent jmx[{#JMXOBJ},compression]

Preprocessing

  • Discard unchanged with heartbeat: 1h

Trigger prototypes for Protocol handlers discovery

Name Description Expression Severity Dependencies and additional info
{#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 Info Manual close: Yes

LLD rule Thread pools discovery

Name Description Type Key and additional info
Thread pools discovery

Discovery for ThreadPool

JMX agent jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Item prototypes for Thread pools discovery

Name Description Type Key and additional info
{#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX agent jmx[{#JMXOBJ},currentThreadCount]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX agent jmx[{#JMXOBJ},maxThreads]

Preprocessing

  • Discard unchanged with heartbeat: 10m

{#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX agent jmx[{#JMXOBJ},currentThreadsBusy]

Trigger prototypes for Thread pools discovery

Name Description Expression Severity Dependencies and additional info
{#JMXNAME}: Busy worker threads count is high

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 High

LLD rule Contexts discovery

Name Description Type Key and additional info
Contexts discovery

Discovery for contexts

JMX agent jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Item prototypes for Contexts discovery

Name Description Type Key and additional info
{#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX agent jmx[{#JMXOBJ},activeSessions]
{#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX agent jmx[{#JMXOBJ},maxActive]
{#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX agent jmx[{#JMXOBJ},sessionCounter]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX agent jmx[{#JMXOBJ},rejectedSessions]

Preprocessing

  • Change per second
{#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX agent jmx[{#JMXOBJ},maxActiveSessions]

Feedback

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

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

This template is for Zabbix version: 5.4

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

Apache Tomcat by JMX

Overview

For Zabbix version: 5.4 and higher
Official JMX Template for Apache Tomcat.

This template was tested on:

  • Apache Tomcat, version 8.5.59

Setup

See Zabbix template operation for basic instructions.

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$TOMCAT.LLD.FILTER.MATCHES}

Filter for discoverable objects. Can be used with following contexts: "GlobalRequestProcessor", "ThreadPool", "Manager"

.*
{$TOMCAT.LLD.FILTER.NOT_MATCHES}

Filter to exclude discovered objects. Can be used with following contexts: "GlobalRequestProcessor", "ThreadPool", "Manager"

CHANGE IF NEEDED
{$TOMCAT.PASSWORD}

Password for JMX

``
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m
{$TOMCAT.USER}

User for JMX

``

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequesProcessor

JMX jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Filter:

AND

- {#JMXNAME} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"GlobalRequesProcessor"}

- {#JMXNAME} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"GlobalRequesProcessor"}

Protocol handlers discovery

Discovery for ProtocolHandler

JMX jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Filter:

AND

- {#JMXATTR} MATCHES_REGEX ^name$

Thread pools discovery

Discovery for ThreadPool

JMX jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Filter:

AND

- {#JMXNAME} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"ThreadPool"}

- {#JMXNAME} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"ThreadPool"}

Contexts discovery

Discovery for contexts

JMX jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Filter:

AND

- {#JMXHOST} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"Manager"}

- {#JMXHOST} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"Manager"}

Items collected

Group Name Description Type Key and additional info
Tomcat Tomcat: Version

The version of the Tomcat.

JMX jmx["Catalina:type=Server",serverInfo]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Tomcat {#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX jmx[{#JMXOBJ},bytesReceived]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX jmx[{#JMXOBJ},bytesSent]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},errorCount]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},requestCount]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},processingTime]

Preprocessing:

- MULTIPLIER: 0.001

Tomcat {#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX jmx[{#JMXOBJ},compression]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 1h

Tomcat {#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX jmx[{#JMXOBJ},currentThreadCount]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Tomcat {#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX jmx[{#JMXOBJ},maxThreads]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Tomcat {#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX jmx[{#JMXOBJ},currentThreadsBusy]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX jmx[{#JMXOBJ},activeSessions]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX jmx[{#JMXOBJ},maxActive]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX jmx[{#JMXOBJ},sessionCounter]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX jmx[{#JMXOBJ},rejectedSessions]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX jmx[{#JMXOBJ},maxActiveSessions]

Triggers

Name Description Expression Severity Dependencies and additional info
Tomcat: Version has been changed

Tomcat version has changed. Ack to close.

last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#1)<>last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo],#2) and length(last(/Apache Tomcat by JMX/jmx["Catalina:type=Server",serverInfo]))>0 INFO

Manual close: YES

{#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

find(/Apache Tomcat by JMX/jmx[{#JMXOBJ},compression],,"like","off") = 1 INFO

Manual close: YES

{#JMXNAME}: Busy worker threads count are more than {$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}% of the limit for {$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"}

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

min(/Apache Tomcat by JMX/jmx[{#JMXOBJ},currentThreadsBusy],{$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})>last(/Apache Tomcat by JMX/jmx[{#JMXOBJ},maxThreads])*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 HIGH

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.

This template is for Zabbix version: 5.0

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

Template App Apache Tomcat JMX

Overview

For Zabbix version: 5.0 and higher
Official JMX Template for Apache Tomcat.

This template was tested on:

  • Apache Tomcat, version 8.5.59
  • Zabbix, version 5.0, 5.2

Setup

See Zabbix template operation for basic instructions.

Metrics are collected by JMX.

  1. Enable and configure JMX access to Apache Tomcat. See documentation for instructions (chose your version).
  2. If your Tomcat installation require authentication for JMX, set values in host macros {$TOMCAT.USERNAME} and {$TOMCAT.PASSWORD}.
  3. You can set custom macro values and add macros with context for specific metrics following macro description.

Zabbix configuration

No specific Zabbix configuration is required.

Macros used

Name Description Default
{$TOMCAT.LLD.FILTER.MATCHES}

Filter for discoverable objects. Can be used with following contexts: "GlobalRequestProcessor", "ThreadPool", "Manager"

.*
{$TOMCAT.LLD.FILTER.NOT_MATCHES}

Filter to exclude discovered objects. Can be used with following contexts: "GlobalRequestProcessor", "ThreadPool", "Manager"

CHANGE IF NEEDED
{$TOMCAT.PASSWORD}

Password for JMX

``
{$TOMCAT.THREADS.MAX.PCT}

Threshold for busy worker threads trigger. Can be used with {#JMXNAME} as context.

75
{$TOMCAT.THREADS.MAX.TIME}

The time during which the number of busy threads can exceed the threshold. Can be used with {#JMXNAME} as context.

5m
{$TOMCAT.USER}

User for JMX

``

Template links

There are no template links in this template.

Discovery rules

Name Description Type Key and additional info
Global request processors discovery

Discovery for GlobalRequestProcessor

JMX jmx.discovery[beans,"Catalina:type=GlobalRequestProcessor,name=*"]

Filter:

AND

- A: {#JMXNAME} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"GlobalRequestProcessor"}

- B: {#JMXNAME} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"GlobalRequestProcessor"}

Protocol handlers discovery

Discovery for ProtocolHandler

JMX jmx.discovery[attributes,"Catalina:type=ProtocolHandler,port=*"]

Filter:

AND

- A: {#JMXATTR} MATCHES_REGEX ^name$

Thread pools discovery

Discovery for ThreadPool

JMX jmx.discovery[beans,"Catalina:type=ThreadPool,name=*"]

Filter:

AND

- A: {#JMXNAME} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"ThreadPool"}

- B: {#JMXNAME} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"ThreadPool"}

Contexts discovery

Discovery for contexts

JMX jmx.discovery[beans,"Catalina:type=Manager,host=,context="]

Filter:

AND

- A: {#JMXHOST} MATCHES_REGEX {$TOMCAT.LLD.FILTER.MATCHES:"Manager"}

- B: {#JMXHOST} NOT_MATCHES_REGEX {$TOMCAT.LLD.FILTER.NOT_MATCHES:"Manager"}

Items collected

Group Name Description Type Key and additional info
Tomcat Tomcat: Version

The version of the Tomcat.

JMX jmx["Catalina:type=Server",serverInfo]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 1d

Tomcat {#JMXNAME}: Bytes received per second

Bytes received rate by processor {#JMXNAME}

JMX jmx[{#JMXOBJ},bytesReceived]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Bytes sent per second

Bytes sent rate by processor {#JMXNAME}

JMX jmx[{#JMXOBJ},bytesSent]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Errors per second

Error rate of request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},errorCount]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Requests per second

Rate of requests served by request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},requestCount]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXNAME}: Requests processing time

The total time to process all incoming requests of request processor {#JMXNAME}

JMX jmx[{#JMXOBJ},processingTime]

Preprocessing:

- MULTIPLIER: 0.001

Tomcat {#JMXVALUE}: Gzip compression status

Gzip compression status on {#JMXNAME}. Enabling gzip compression may save server bandwidth.

JMX jmx[{#JMXOBJ},compression]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 1h

Tomcat {#JMXNAME}: Threads count

Amount of threads the thread pool has right now, both busy and free.

JMX jmx[{#JMXOBJ},currentThreadCount]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Tomcat {#JMXNAME}: Threads limit

Limit of the threads count. When currentThreadsBusy counter reaches the maxThreads limit, no more requests could be handled, and the application chokes.

JMX jmx[{#JMXOBJ},maxThreads]

Preprocessing:

- DISCARD_UNCHANGED_HEARTBEAT: 10m

Tomcat {#JMXNAME}: Threads busy

Number of the requests that are being currently handled.

JMX jmx[{#JMXOBJ},currentThreadsBusy]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions active

Active sessions of the application.

JMX jmx[{#JMXOBJ},activeSessions]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions active maximum so far

Maximum number of active sessions so far.

JMX jmx[{#JMXOBJ},maxActive]
Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions created per second

Rate of sessions created by this application per second.

JMX jmx[{#JMXOBJ},sessionCounter]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions rejected per second

Rate of sessions we rejected due to maxActive being reached.

JMX jmx[{#JMXOBJ},rejectedSessions]

Preprocessing:

- CHANGE_PER_SECOND

Tomcat {#JMXHOST}{#JMXCONTEXT}: Sessions allowed maximum

The maximum number of active Sessions allowed, or -1 for no limit.

JMX jmx[{#JMXOBJ},maxActiveSessions]

Triggers

Name Description Expression Severity Dependencies and additional info
Tomcat: Version has been changed

Tomcat version has changed. Ack to close.

{TEMPLATE_NAME:jmx["Catalina:type=Server",serverInfo].diff()}=1 and {TEMPLATE_NAME:jmx["Catalina:type=Server",serverInfo].strlen()}>0 INFO

Manual close: YES

{#JMXVALUE}: Gzip compression is disabled

gzip compression is disabled for connector {#JMXVALUE}.

{TEMPLATE_NAME:jmx[{#JMXOBJ},compression].str(off)} = 1 INFO

Manual close: YES

{#JMXNAME}: Busy worker threads count are more than {$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}% of the limit for {$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"}

When current threads busy counter reaches the limit, no more requests could be handled, and the application chokes.

{TEMPLATE_NAME:jmx[{#JMXOBJ},currentThreadsBusy].min({$TOMCAT.THREADS.MAX.TIME:"{#JMXNAME}"})}>{TEMPLATE_NAME:jmx[{#JMXOBJ},maxThreads].last()}*{$TOMCAT.THREADS.MAX.PCT:"{#JMXNAME}"}/100 HIGH

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

Media

👁 Zabbix Java Gateway Installation With Tomcat Monitoring - by Zabbix CookBook
Zabbix Java Gateway Installation With Tomcat Monitoring - by Zabbix CookBook
👁 Image

Request custom integration

Zabbix integration team will develop custom integration based on your requirements and Zabbix best practices.

Request
👁 Image

Propose integration

Have you already developed high quality integration and want to submit to Zabbix integration repository?

Propose