Jolokia jmx metricset
Stack
The jmx metricset collects metrics from Jolokia agents.
Tested with Jolokia 1.5.0.
To collect metrics from a Jolokia instance, define a mapping section that specifies an MBean ObjectName followed by an array of attributes to fetch. For each attribute in the array, specify the Elastic field name where the returned value will be saved.
For example, to get the Uptime attribute from the java.lang:type=Runtime MBean and map it to an event field called jolokia.testnamespace.uptime, configure the following mapping:
- module: jolokia
metricsets: ["jmx"]
hosts: ["localhost:8778"]
namespace: "testnamespace"
http_method: "POST"
jmx.mappings:
- mbean: 'java.lang:type=Runtime'
attributes:
- attr: Uptime
field: uptime
event: uptime
target:
url: "service:jmx:rmi:///jndi/rmi://targethost:9999/jmxrmi"
user: "jolokia"
password: "s!cr!t"
- The
namespacesetting is required. This setting is used along with the module name to qualify field names in the output event. - The
http_methodsetting is optional. By default all requests to Jolokia are performed usingPOSTHTTP method. This setting allows only two values:POSTorGET. - The field where the returned value will be saved. This field will be called
jolokia.testnamespace.uptimein the output event. - The
eventsetting is optional. Use this setting to group all attributes with the sameeventvalue into the same event when sending data to Elastic.
If the underlying attribute is an object (such as the HeapMemoryUsage attribute in java.lang:type=Memory), its structure will be published to Elastic "as is".
You can configure nested metric aliases by using dots in the mapping name (for example, gc.cms_collection_time). For more examples, see /jolokia/jmx/test/config.yml.
All metrics from a single mapping will be POSTed to the defined host/port and sent to Elastic as a single event. To make it possible to differentiate between metrics from multiple similar applications running on the same host, you should configure multiple modules.
When wildcards are used, an event is sent to Elastic for each matching MBean, and an mbean field is added to the event.
All requests to Jolokia are made by default using HTTP POST method. However, there are specific circumstances on the environment where Jolokia agent is deployed, in which POST method can be unavailable. In this case you can use HTTP GET method, by defining http_method attribute. In general you can use either POST or GET, but GET has the following drawbacks:
- Proxy requests are not allowed.
- If more than one
jmx.mappingsare defined, then Metricbeat will perform as many GET requests as the mappings defined. For example the following configuration with 3 mappings will create 3 GET requests, one for every MBean. On the contrary, if you use HTTP POST, Metricbeat will create only 1 request to Jolokia.
- module: jolokia
metricsets: ["jmx"]
enabled: true
period: 10s
hosts: ["localhost:8080"]
namespace: "jolokia_metrics"
path: "/jolokia"
http_method: 'GET'
jmx.mappings:
- mbean: 'java.lang:type=Memory'
attributes:
- attr: HeapMemoryUsage
field: memory.heap_usage
- attr: NonHeapMemoryUsage
field: memory.non_heap_usage
- mbean: 'Catalina:name=*,type=ThreadPool'
attributes:
- attr: port
field: catalina.port
- attr: maxConnections
field: catalina.maxConnections
- mbean: 'java.lang:type=Runtime'
attributes:
- attr: Uptime
field: uptime
- All Jolokia requests have
canonicalNamingset tofalse. See the Jolokia Protocol documentation for more detail about this parameter. - If
http_methodis set toGET, then Proxy requests are not allowed. Thus, setting a value totargetsection is going to fail with an error.
Because this module is very general and can be tailored for any application that exposes its metrics over Jolokia, it comes with no exposed field descriptions, dashboards, or index patterns.
For a description of each field in the metricset, see the exported fields section.
Here is an example document generated by this metricset:
{
"@timestamp": "2017-10-12T08:05:34.853Z",
"event": {
"dataset": "jolokia.testnamespace",
"duration": 115000,
"module": "jolokia"
},
"jolokia": {
"testnamespace": {
"memory": {
"heap_usage": {
"committed": 514850816,
"init": 536870912,
"max": 7635730432,
"used": 42335648
},
"non_heap_usage": {
"committed": 32243712,
"init": 2555904,
"max": -1,
"used": 29999896
}
},
"uptime": 70795470
}
},
"metricset": {
"name": "jmx"
},
"service": {
"address": "127.0.0.1:8778",
"type": "jolokia"
}
}