Here's the JMX Exporter configuration I've tentatively come up with. Let me know in the comments if I've forgotten something or did something wrong.
In short, this JMX Exporter config should collect the metrics for:
* Deployment (EARs)
* Subdeployment (WARs inside of EARs)
* JMS Topics and Queues
* Datasources
* Transactions
* Web Subsystem (i.e. Undertow)
* Servlets
* EJBs (Stateless, Stateful, Singleton, and Message Driven)
It will also store server paths under the "wildfly_config" metric family with the label name identifying the path such as "jboss_home_dir" or "jboss_server_config_dir" and the label value being the path itself.
And of course the default behavior of the JMX Exporter is to also emit metrics for the JVM statistics as well (such as heap and non-heap memory usage) so we get those "for free".
The config is as follows:
---
lowercaseOutputName: true
lowercaseOutputLabelNames: true
rules:
# CONFIG
- pattern: "^jboss.as<path=(.+)><>path:(.+)"
attrNameSnakeCase: true
name: wildfly_config
labels:
$1: $2
value: 1
# DEPLOYMENTS
- pattern: "^jboss.as<deployment=(.+), subdeployment=(.+), subsystem=undertow><>(.+_sessions|session_.+):"
attrNameSnakeCase: true
name: wildfly_deployment_$3
type: GAUGE
labels:
name: $1
subdeployment: $2
- pattern: "^jboss.as<deployment=(.+), subsystem=undertow><>(.+_sessions|session_.+):"
attrNameSnakeCase: true
name: wildfly_deployment_$2
type: GAUGE
labels:
name: $1
# MESSAGING
- pattern: "^jboss.as<subsystem=messaging-activemq, server=(.+), jms-(queue|topic)=(.+)><>(.+):"
attrNameSnakeCase: true
name: wildfly_messaging_$4
type: GAUGE
labels:
server: $1
$2: $3
# DATASOURCES
- pattern: "^jboss.as<subsystem=datasources, (?:xa-)*data-source=(.+), statistics=(.+)><>(.+):"
attrNameSnakeCase: true
name: wildfly_datasource_$2_$3
type: GAUGE
labels:
name: $1
# TRANSACTIONS
- pattern: "^jboss.as<subsystem=transactions><>number_of_(.+):"
attrNameSnakeCase: true
name: wildfly_transactions_$1
type: GAUGE
# WEB SUBSYSTEM
- pattern: "^jboss.as<subsystem=undertow, server=(.+), (https?)-listener=(.+)><>(bytes_.+|error_count|processing_time|request_count):"
attrNameSnakeCase: true
name: wildfly_undertow_$4
type: GAUGE
labels:
server: $1
listener: $3
protocol: $2
# SERVLET
- pattern: "^jboss.as<deployment=(.+), subdeployment=(.+), subsystem=undertow, servlet=(.+)><>(.+_time|.+_count):"
attrNameSnakeCase: true
name: wildfly_servlet_$4
type: GAUGE
labels:
name: $3
deployment: $1
subdeployment: $2
- pattern: "^jboss.as<deployment=(.+), subsystem=undertow, servlet=(.+)><>(.+_time|.+_count):"
attrNameSnakeCase: true
name: wildfly_servlet_$3
type: GAUGE
labels:
name: $2
deployment: $1
# EJB
- pattern: "^jboss.as<deployment=(.+), subdeployment=(.+), subsystem=ejb3, (stateless-session|stateful-session|message-driven|singleton)-bean=(.+)><>(.+):"
attrNameSnakeCase: true
name: wildfly_ejb_$5
type: GAUGE
labels:
name: $4
type: $3
deployment: $1
subdeployment: $2
- pattern: "^jboss.as<deployment=(.+), subsystem=ejb3, (stateless-session|stateful-session|message-driven|singleton)-bean=(.+)><>(.+):"
attrNameSnakeCase: true
name: wildfly_ejb_$4
type: GAUGE
labels:
name: $3
type: $2
deployment: $1