# WildFly Server by JMX ## Overview For Zabbix version: 6.2 and higher Official JMX Template for WildFly server. This template was tested on: - WildFly, version 22.6.0 ## Setup > See [Zabbix template operation](https://www.zabbix.com/documentation/6.2/manual/config/templates_out_of_the_box/jmx) for basic instructions. Metrics are collected by JMX. This template works with standalone and domain instances. 1. Enable and configure JMX access to WildFly. See documentation for [instructions](https://docs.wildfly.org/23/Admin_Guide.html#JMX). 2. Copy jboss-client.jar from `/(wildfly,EAP,Jboss,AS)/bin/client` in to directory `/usr/share/zabbix-java-gateway/lib` 3. Restart Zabbix Java gateway 4. Set the user name and password in host macros {$WILDFLY.USER} and {$WILDFLY.PASSWORD}. Depending on your server setup, you may need to specify a custom JMX scheme in macro {$WILDFLY.JMX.PROTOCOL} (default: remote+http) ## Zabbix configuration No specific Zabbix configuration is required. ### Macros used |Name|Description|Default| |----|-----------|-------| |{$WILDFLY.CONN.USAGE.WARN.MAX} |
The maximum connection usage percent for trigger expression.
|`80` | |{$WILDFLY.CONN.WAIT.MAX.WARN} |The maximum number of waiting connections for trigger expression.
|`300` | |{$WILDFLY.DEPLOYMENT.MATCHES} |Filter of discoverable deployments
|`.*` | |{$WILDFLY.DEPLOYMENT.NOT_MATCHES} |Filter to exclude discovered deployments
|`CHANGE_IF_NEEDED` | |{$WILDFLY.JMX.PROTOCOL} |-
|`remote+http` | |{$WILDFLY.PASSWORD} |-
|`zabbix` | |{$WILDFLY.USER} |-
|`zabbix` | ## Template links There are no template links in this template. ## Discovery rules |Name|Description|Type|Key and additional info| |----|-----------|----|----| |Deployments discovery |Discovery deployments metrics.
|JMX |jmx.get[beans,"jboss.as.expr:deployment=*"]**Filter**:
AND- {#DEPLOYMENT} MATCHES_REGEX `{$WILDFLY.DEPLOYMENT.MATCHES}`
- {#DEPLOYMENT} NOT_MATCHES_REGEX `{$WILDFLY.DEPLOYMENT.NOT_MATCHES}`
| |JDBC metrics discovery |-
|JMX |jmx.get[beans,"jboss.as:subsystem=datasources,data-source=*,statistics=jdbc"] | |Pools metrics discovery |-
|JMX |jmx.get[beans,"jboss.as:subsystem=datasources,data-source=*,statistics=pool"] | |Undertow metrics discovery |-
|JMX |jmx.get[beans,"jboss.as:subsystem=undertow,server=*,http-listener=*"] | ## Items collected |Group|Name|Description|Type|Key and additional info| |-----|----|-----------|----|---------------------| |WildFly |WildFly: Launch type |The manner in which the server process was launched. Either "DOMAIN" for a domain mode server launched by a Host Controller, "STANDALONE" for a standalone server launched from the command line, or "EMBEDDED" for a standalone server launched as an embedded part of an application running in the same virtual machine.
|JMX |jmx["jboss.as:management-root=server","launchType"]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly: Name |For standalone mode: The name of this server. If not set, defaults to the runtime value of InetAddress.getLocalHost().getHostName().
For domain mode: The name given to this domain
|JMX |jmx["jboss.as:management-root=server","name"]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly: Process type |The type of process represented by this root resource.
|JMX |jmx["jboss.as:management-root=server","processType"]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly: Runtime configuration state |The current persistent configuration state, one of starting, ok, reload-required, restart-required, stopping or stopped.
|JMX |jmx["jboss.as:management-root=server","runtimeConfigurationState"]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly: Server controller state |The current state of the server controller; either STARTING, RUNNING, RESTART_REQUIRED, RELOAD_REQUIRED or STOPPING.
|JMX |jmx["jboss.as:management-root=server","serverState"]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly: Version |The version of the WildFly Core based product release
|JMX |jmx["jboss.as:management-root=server","productVersion"]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly: Uptime |WildFly server uptime.
|JMX |jmx["java.lang:type=Runtime","Uptime"]**Preprocessing**:
- MULTIPLIER: `0.001`
| |WildFly |WildFly: Transactions: Total, rate |The total number of transactions (top-level and nested) created per second.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfTransactions"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: Aborted, rate |The number of aborted (i.e. rolledback) transactions per second.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfAbortedTransactions"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: Application rollbacks, rate |The number of transactions that have been rolled back by application request. This includes those that timeout, since the timeout behavior is considered an attribute of the application configuration.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfApplicationRollbacks"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: Committed, rate |The number of committed transactions
|JMX |jmx["jboss.as:subsystem=transactions","numberOfCommittedTransactions"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: Heuristics, rate |The number of transactions which have terminated with heuristic outcomes.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfHeuristics"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: Current |The number of transactions that have begun but not yet terminated.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfInflightTransactions"] | |WildFly |WildFly: Transactions: Nested, rate |The total number of nested (sub) transactions created.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfNestedTransactions"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: ResourceRollbacks, rate |The number of transactions that rolled back due to resource (participant) failure.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfResourceRollbacks"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: System rollbacks, rate |The number of transactions that have been rolled back due to internal system errors.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfSystemRollbacks"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly: Transactions: Timed out, rate |The number of transactions that have rolled back due to timeout.
|JMX |jmx["jboss.as:subsystem=transactions","numberOfTimedOutTransactions"]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly deployment [{#DEPLOYMENT}]: Status |The current runtime status of a deployment.
Possible status modes are OK, FAILED, and STOPPED.
FAILED indicates a dependency is missing or a service could not start.
STOPPED indicates that the deployment was not enabled or was manually stopped.
|JMX |jmx["{#JMXOBJ}",status]**Preprocessing**:
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly deployment [{#DEPLOYMENT}]: Enabled |Boolean indicating whether the deployment content is currently deployed in the runtime (or should be deployed in the runtime the next time the server starts.)
|JMX |jmx["{#JMXOBJ}",enabled]**Preprocessing**:
- BOOL_TO_DECIMAL
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly deployment [{#DEPLOYMENT}]: Managed |Indicates if the deployment is managed (aka uses the ContentRepository).
|JMX |jmx["{#JMXOBJ}",managed]**Preprocessing**:
- BOOL_TO_DECIMAL
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly deployment [{#DEPLOYMENT}]: Persistent |Indicates if the deployment is managed (aka uses the ContentRepository).
|JMX |jmx["{#JMXOBJ}",persistent]**Preprocessing**:
- BOOL_TO_DECIMAL
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly deployment [{#DEPLOYMENT}]: Enabled time |Indicates if the deployment is managed (aka uses the ContentRepository).
|JMX |jmx["{#JMXOBJ}",enabledTime]**Preprocessing**:
- MULTIPLIER: `0.001`
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Cache access, rate |The number of times that the statement cache was accessed per second.
|JMX |jmx["{#JMXOBJ}",PreparedStatementCacheAccessCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Cache add, rate |The number of statements added to the statement cache per second.
|JMX |jmx["{#JMXOBJ}",PreparedStatementCacheAddCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Cache current size |The number of prepared and callable statements currently cached in the statement cache.
|JMX |jmx["{#JMXOBJ}",PreparedStatementCacheCurrentSize] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Cache delete, rate |The number of statements discarded from the cache per second.
|JMX |jmx["{#JMXOBJ}",PreparedStatementCacheDeleteCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Cache hit, rate |The number of times that statements from the cache were used per second.
|JMX |jmx["{#JMXOBJ}",PreparedStatementCacheHitCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Cache miss, rate |The number of times that a statement request could not be satisfied with a statement from the cache per second.
|JMX |jmx["{#JMXOBJ}",PreparedStatementCacheMissCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Statistics enabled |Define whether runtime statistics are enabled or not.
|JMX |jmx["{#JMXOBJ}",statisticsEnabled]**Preprocessing**:
- BOOL_TO_DECIMAL
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Active |The number of open connections.
|JMX |jmx["{#JMXOBJ}",ActiveCount] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Available |The available count.
|JMX |jmx["{#JMXOBJ}",AvailableCount] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Blocking time, avg |Average Blocking Time for pool.
|JMX |jmx["{#JMXOBJ}",AverageBlockingTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Creating time, avg |The average time spent creating a physical connection.
|JMX |jmx["{#JMXOBJ}",AverageCreationTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Get time, avg |The average time spent obtaining a physical connection.
|JMX |jmx["{#JMXOBJ}",AverageGetTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Pool time, avg |The average time for a physical connection spent in the pool.
|JMX |jmx["{#JMXOBJ}",AveragePoolTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Usage time, avg |The average time spent using a physical connection
|JMX |jmx["{#JMXOBJ}",AverageUsageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Blocking failure, rate |The number of failures trying to obtain a physical connection per second.
|JMX |jmx["{#JMXOBJ}",BlockingFailureCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Created, rate |The created per second
|JMX |jmx["{#JMXOBJ}",CreatedCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Destroyed, rate |The destroyed count.
|JMX |jmx["{#JMXOBJ}",DestroyedCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Idle |The number of physical connections currently idle.
|JMX |jmx["{#JMXOBJ}",IdleCount] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: In use |The number of physical connections currently in use.
|JMX |jmx["{#JMXOBJ}",InUseCount] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Used, max |The maximum number of connections used.
|JMX |jmx["{#JMXOBJ}",MaxUsedCount] | |WildFly |WildFly {#JMX_DATA_SOURCE}: Statistics enabled |Define whether runtime statistics are enabled or not.
|JMX |jmx["{#JMXOBJ}",statisticsEnabled]**Preprocessing**:
- BOOL_TO_DECIMAL
- DISCARD_UNCHANGED_HEARTBEAT: `3h`
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Timed out, rate |The timed out connections per second.
|JMX |jmx["{#JMXOBJ}",TimedOut]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: Connections: Wait |The number of requests that had to wait to obtain a physical connection.
|JMX |jmx["{#JMXOBJ}",WaitCount] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Commit time, avg |The average time for a XAResource commit invocation.
|JMX |jmx["{#JMXOBJ}",XACommitAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Commit, rate |The number of XAResource commit invocations per second.
|JMX |jmx["{#JMXOBJ}",XACommitCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: End time, avg |The average time for a XAResource end invocation.
|JMX |jmx["{#JMXOBJ}",XAEndAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: End, rate |The number of XAResource end invocations per second.
|JMX |jmx["{#JMXOBJ}",XAEndCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Forget time, avg |The average time for a XAResource forget invocation.
|JMX |jmx["{#JMXOBJ}",XAForgetAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Forget, rate |The number of XAResource forget invocations per second.
|JMX |jmx["{#JMXOBJ}",XAForgetCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Prepare time, avg |The average time for a XAResource prepare invocation.
|JMX |jmx["{#JMXOBJ}",XAPrepareAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Prepare, rate |The number of XAResource prepare invocations per second.
|JMX |jmx["{#JMXOBJ}",XAPrepareCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Recover time, avg |The average time for a XAResource recover invocation.
|JMX |jmx["{#JMXOBJ}",XARecoverAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Recover, rate |The number of XAResource recover invocations per second.
|JMX |jmx["{#JMXOBJ}",XARecoverCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Rollback time, avg |The average time for a XAResource rollback invocation.
|JMX |jmx["{#JMXOBJ}",XARollbackAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Rollback, rate |The number of XAResource rollback invocations per second.
|JMX |jmx["{#JMXOBJ}",XARollbackCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Start time, avg |The average time for a XAResource start invocation.
|JMX |jmx["{#JMXOBJ}",XAStartAverageTime] | |WildFly |WildFly {#JMX_DATA_SOURCE}: XA: Start rate |The number of XAResource start invocations per second.
|JMX |jmx["{#JMXOBJ}",XAStartCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly listener {#HTTP_LISTENER}: Errors, rate |The number of 500 responses that have been sent by this listener per second.
|JMX |jmx["{#JMXOBJ}",errorCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly listener {#HTTP_LISTENER}: Requests, rate |The number of requests this listener has served per second.
|JMX |jmx["{#JMXOBJ}",requestCount]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly listener {#HTTP_LISTENER}: Bytes sent, rate |The number of bytes that have been sent out on this listener per second.
|JMX |jmx["{#JMXOBJ}",bytesSent]**Preprocessing**:
- CHANGE_PER_SECOND
| |WildFly |WildFly listener {#HTTP_LISTENER}: Bytes received, rate |The number of bytes that have been received by this listener per second.
|JMX |jmx["{#JMXOBJ}",bytesReceived]**Preprocessing**:
- CHANGE_PER_SECOND
| ## Triggers |Name|Description|Expression|Severity|Dependencies and additional info| |----|-----------|----|----|----| |WildFly: Server needs to restart for configuration change. |-
|`find(/WildFly Server by JMX/jmx["jboss.as:management-root=server","runtimeConfigurationState"],,"like","ok")=0` |WARNING | | |WildFly: Server controller is not in RUNNING state |-
|`find(/WildFly Server by JMX/jmx["jboss.as:management-root=server","serverState"],,"like","running")=0` |WARNING |**Depends on**:
- WildFly: Server needs to restart for configuration change.
| |WildFly: Version has changed |WildFly version has changed. Ack to close.
|`last(/WildFly Server by JMX/jmx["jboss.as:management-root=server","productVersion"],#1)<>last(/WildFly Server by JMX/jmx["jboss.as:management-root=server","productVersion"],#2) and length(last(/WildFly Server by JMX/jmx["jboss.as:management-root=server","productVersion"]))>0` |INFO |Manual close: YES
| |WildFly: has been restarted |Uptime is less than 10 minutes
|`last(/WildFly Server by JMX/jmx["java.lang:type=Runtime","Uptime"])<10m` |INFO |Manual close: YES
| |WildFly: Failed to fetch info data |Zabbix has not received data for items for the last 15 minutes
|`nodata(/WildFly Server by JMX/jmx["java.lang:type=Runtime","Uptime"],15m)=1` |WARNING | | |WildFly deployment [{#DEPLOYMENT}]: Deployment status has changed |Deployment status has changed. Ack to close.
|`last(/WildFly Server by JMX/jmx["{#JMXOBJ}",status],#1)<>last(/WildFly Server by JMX/jmx["{#JMXOBJ}",status],#2) and length(last(/WildFly Server by JMX/jmx["{#JMXOBJ}",status]))>0` |WARNING |Manual close: YES
| |WildFly {#JMX_DATA_SOURCE}: JDBC monitoring statistic is not enabled |-
|`last(/WildFly Server by JMX/jmx["{#JMXOBJ}",statisticsEnabled])=0` |INFO | | |WildFly {#JMX_DATA_SOURCE}: There are no active connections for 5m |-
|`max(/WildFly Server by JMX/jmx["{#JMXOBJ}",ActiveCount],5m)=0` |WARNING | | |WildFly {#JMX_DATA_SOURCE}: Connection usage is too high |-
|`min(/WildFly Server by JMX/jmx["{#JMXOBJ}",InUseCount],5m)/last(/WildFly Server by JMX/jmx["{#JMXOBJ}",AvailableCount])*100>{$WILDFLY.CONN.USAGE.WARN.MAX}` |HIGH | | |WildFly {#JMX_DATA_SOURCE}: Pools monitoring statistic is not enabled |Zabbix has not received data for items for the last 15 minutes
|`last(/WildFly Server by JMX/jmx["{#JMXOBJ}",statisticsEnabled])=0` |INFO | | |WildFly {#JMX_DATA_SOURCE}: There are timeout connections |-
|`last(/WildFly Server by JMX/jmx["{#JMXOBJ}",TimedOut])>0` |WARNING | | |WildFly {#JMX_DATA_SOURCE}: Too many waiting connections |-
|`min(/WildFly Server by JMX/jmx["{#JMXOBJ}",WaitCount],5m)>{$WILDFLY.CONN.WAIT.MAX.WARN}` |WARNING | | |WildFly listener {#HTTP_LISTENER}: There are 500 responses by this listener. |-
|`last(/WildFly Server by JMX/jmx["{#JMXOBJ}",errorCount])>0` |WARNING | | ## 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](https://www.zabbix.com/forum/zabbix-suggestions-and-feedback).