Jolokia JMX 度量集

编辑

jmx 度量集从 Jolokia 代理 收集指标。

功能和配置

编辑

已在 Jolokia 1.5.0 上测试。

要从 Jolokia 实例收集指标,请定义一个映射部分,该部分指定一个 MBean ObjectName,后跟要获取的属性数组。对于数组中的每个属性,指定返回的值将保存到的 Elastic 字段名称。

例如,要从 java.lang:type=Runtime MBean 获取 Uptime 属性并将其映射到名为 jolokia.testnamespace.uptime 的事件字段,请配置以下映射

- 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"

namespace 设置是必需的。此设置与模块名称一起使用,以限定输出事件中的字段名称。

http_method 设置是可选的。默认情况下,所有对 Jolokia 的请求都使用 POST HTTP 方法执行。此设置仅允许两个值:POSTGET

保存返回值的字段。此字段在输出事件中将称为 jolokia.testnamespace.uptime

event 设置是可选的。使用此设置将所有具有相同 event 值的属性组合到同一个事件中,然后将数据发送到 Elastic。

如果底层属性是对象(例如 java.lang:type=Memory 中的 HeapMemoryUsage 属性),则其结构将按原样发布到 Elastic。

您可以通过在映射名称中使用点来配置嵌套指标别名(例如,gc.cms_collection_time)。有关更多示例,请参阅 /jolokia/jmx/test/config.yml

来自单个映射的所有指标都将 POST 到定义的主机/端口并作为单个事件发送到 Elastic。为了能够区分在同一主机上运行的多个类似应用程序的指标,您应该配置多个模块。

当使用通配符时,会为每个匹配的 MBean 发送一个事件到 Elastic,并且会向事件添加一个 mbean 字段。

通过 POST 或 GET 方法访问 Jolokia

编辑

默认情况下,所有对 Jolokia 的请求都使用 HTTP POST 方法。但是,在部署 Jolokia 代理的环境中存在特定的情况,其中 POST 方法可能不可用。在这种情况下,您可以通过定义 http_method 属性来使用 HTTP GET 方法。通常,您可以使用 POST 或 GET,但 GET 具有以下缺点

  1. 代理请求 不允许。
  2. 如果定义了多个 jmx.mappings,则 Metricbeat 将执行与定义的映射一样多的 GET 请求。例如,以下具有 3 个映射的配置将创建 3 个 GET 请求,每个 MBean 一个。相反,如果您使用 HTTP POST,Metricbeat 将只创建 1 个对 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

限制

编辑
  1. 所有 Jolokia 请求都将 canonicalNaming 设置为 false。有关此参数的更多详细信息,请参阅 Jolokia 协议 文档。
  2. 如果 http_method 设置为 GET,则 代理请求 不允许。因此,将值设置为 target 部分将导致错误。

公开的字段、仪表板、索引等

编辑

由于此模块非常通用,并且可以针对通过 Jolokia 公开其指标的任何应用程序进行定制,因此它没有公开的字段描述、仪表板或索引模式。

字段

有关度量集中每个字段的描述,请参阅 导出字段 部分。

这是一个由该度量集生成的示例文档

{
    "@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"
    }
}