---
title: JMX | JVM (Jolokia)
slug: aiops2/jmx-or-jvm-jolokia
description: Learn how to collect JMX metrics from an HTTP endpoint using the Jolokia agent and proxy input plugins. This document provides detailed configuration examples, including required and optional parameters, and showcases metric declarations with wildcards fo
docTags: 
createdAt: 2023-10-20T17:26:28.810Z
---

O agent Jolokia e os plugins de entrada de proxy coletam métricas JMX de um endpoint HTTP usando o protocolo JSON-over-HTTP da Jolokia.

# Configuração

## Plugin Base

### Jolokia2 Proxy Input

:::CodeblockTabs
Plugin Telegraf

```shell
# Read JMX metrics from a Jolokia REST proxy endpoint
[[inputs.jolokia2_proxy]]
  # default_tag_prefix      = ""
  # default_field_prefix    = ""
  # default_field_separator = "."

  ## Proxy agent
  url = "http://localhost:8080/jolokia"
  # username = ""
  # password = ""
  # response_timeout = "5s"

  ## Optional TLS config
  # tls_ca   = "/var/private/ca.pem"
  # tls_cert = "/var/private/client.pem"
  # tls_key  = "/var/private/client-key.pem"
  # insecure_skip_verify = false

  ## Add proxy targets to query
  # default_target_username = ""
  # default_target_password = ""
  [[inputs.jolokia2_proxy.target]]
    url = "service:jmx:rmi:///jndi/rmi://targethost:9999/jmxrmi"
    # username = ""
    # password = ""

  ## Add metrics to read
  [[inputs.jolokia2_proxy.metric]]
    name  = "java_runtime"
    mbean = "java.lang:type=Runtime"
    paths = ["Uptime"]
```
:::

### Jolokia2 Agent

:::CodeblockTabs
Plugin Telegraf

```shell
# Read JMX metrics from a Jolokia REST agent endpoint
[[inputs.jolokia2_agent]]
  # default_tag_prefix      = ""
  # default_field_prefix    = ""
  # default_field_separator = "."

  # Add agents URLs to query
  urls = ["http://localhost:8080/jolokia"]
  # username = ""
  # password = ""
  # response_timeout = "5s"

  ## Optional TLS config
  # tls_ca   = "/var/private/ca.pem"
  # tls_cert = "/var/private/client.pem"
  # tls_key  = "/var/private/client-key.pem"
  # insecure_skip_verify = false

  ## Add metrics to read
  [[inputs.jolokia2_agent.metric]]
    name  = "java_runtime"
    mbean = "java.lang:type=Runtime"
    paths = ["Uptime"]
```
:::

## Métricas

Cada declaração gera uma request Jolokia para buscar a métrica.

| Chave             | Requerido | Descrição                                                                                                                                                                                         |
| ----------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **mbean**         | Sim       | O nome do objeto de um JMX MBean. Os valores de chave de propriedade do MBean podem conter um *wildcard* (**\***), permitindo que você busque vários MBeans.                                      |
| **paths**         | Não       | Uma lista de atributos MBean a serem lidos.                                                                                                                                                       |
| **tag\_keys**     | Não       | Uma lista de nomes de chave de propriedade MBean para converter em tags. O nome da chave da propriedade se torna o nome da tag, enquanto o valor da chave da propriedade se torna o valor da tag. |
| **tag\_prefix**   | Não       | Uma string para preceder os nomes de tag produzidos por esta declaração de métrica.                                                                                                               |
| **field\_name**   | Não       | Uma string a ser definida como o nome do campo produzido por esta métrica.                                                                                                                        |
| **field\_prefix** | Não       | Uma string para preceder os nomes de campo produzidos por esta declaração de métrica.                                                                                                             |

Use **paths** para refinar quais campos coletar.

:::CodeblockTabs
Exemplo de Configuração

```shell
[[inputs.jolokia2_agent.metric]]
  name  = "jvm_memory"
  mbean = "java.lang:type=Memory"
  paths = ["HeapMemoryUsage", "NonHeapMemoryUsage", "ObjectPendingFinalizationCount"]
```
:::

A declaração de métrica **jvm\_memory** anterior produz a seguinte saída:

:::CodeblockTabs
Exemplo de Saída

```shell
jvm_memory HeapMemoryUsage.committed=4294967296,HeapMemoryUsage.init=4294967296,HeapMemoryUsage.max=4294967296,HeapMemoryUsage.used=1750658992,NonHeapMemoryUsage.committed=67350528,NonHeapMemoryUsage.init=2555904,NonHeapMemoryUsage.max=-1,NonHeapMemoryUsage.used=65821352,ObjectPendingFinalizationCount=0 1503762436000000000
```
:::

Use wildcards (**\***) em valores de chave de propriedade **mbean** para criar séries distintas capturando valores em **tag\_keys**.

:::CodeblockTabs
Exemplo de Configuração

```shell
[[inputs.jolokia2_agent.metric]]
  name     = "jvm_garbage_collector"
  mbean    = "java.lang:name=*,type=GarbageCollector"
  paths    = ["CollectionTime", "CollectionCount"]
  tag_keys = ["name"]
```
:::

Como **name=\*** corresponde a **G1 Old Generation** e **G1 Young Generation**, e **name** é usado como uma **tag**, a declaração de métrica **jvm\_garbage\_collector** anterior produz duas métricas.

```shell
jvm_garbage_collector,name=G1\ Old\ Generation CollectionCount=0,CollectionTime=0 1503762520000000000
jvm_garbage_collector,name=G1\ Young\ Generation CollectionTime=32,CollectionCount=2 1503762520000000000
```

Para exemplos de configuração baseadas em *Servlets* produtivos, acesse:

[https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2/examples](https://github.com/influxdata/telegraf/tree/master/plugins/inputs/jolokia2/examples)
