1. 概述
本文将介绍如何从 Tomcat 服务器采集 JMX 数据,并将其传输到 Elastic Stack(原 ELK)技术栈。我们将重点讲解如何配置 Logstash 读取 JMX 数据并推送到 Elasticsearch,最终通过 Kibana 实现可视化监控。
2. 安装 Elastic Stack
首先需要安装 Elastic Stack 组件:
安装完成后,我们将通过发送 JMX 数据到 Logstash 并在 Kibana 中可视化,验证整个链路是否正常工作。
2.1 测试 Logstash
进入 Logstash 安装目录(以 Ubuntu 为例):
cd /opt/logstash
通过命令行快速配置 Logstash:
bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["localhost:9200"] } }'
在控制台输入测试数据,完成后使用 CTRL-D
关闭管道。
2.2 测试 Elasticsearch
添加测试数据后,检查 Elasticsearch 中的 Logstash 索引:
curl -X GET 'http://localhost:9200/_cat/indices'
预期输出示例:
yellow open logstash-2017.11.10 5 1 3531 0 506.3kb 506.3kb
yellow open .kibana 1 1 3 0 9.5kb 9.5kb
yellow open logstash-2017.11.11 5 1 8671 0 1.4mb 1.4mb
2.3 测试 Kibana
Kibana 默认运行在 5601 端口,访问地址:
http://localhost:5601/app/kibana
创建索引模式 *logstash-*
,确认能查看到测试数据。
3. 配置 Tomcat
在 Tomcat 中启用 JMX,需在 CATALINA_OPTS
添加以下参数:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
⚠️ 注意事项:
- 通过修改
setenv.sh
配置CATALINA_OPTS
- Ubuntu 用户可在
/usr/share/tomcat8/bin
找到该文件
4. 连接 JMX 与 Logstash
现在需要将 JMX 指标接入 Logstash,前提是已安装 JMX 输入插件。
4.1 配置 JMX 指标
创建 JSON 格式的 JMX 配置文件 jmx_config.json
:
{
"host" : "localhost",
"port" : 9000,
"alias" : "reddit.jmx.elasticsearch",
"queries" : [
{
"object_name" : "java.lang:type=Memory",
"object_alias" : "Memory"
}, {
"object_name" : "java.lang:type=Threading",
"object_alias" : "Threading"
}, {
"object_name" : "java.lang:type=Runtime",
"attributes" : [ "Uptime", "StartTime" ],
"object_alias" : "Runtime"
}]
}
⚠️ 关键点:
- 端口需与
CATALINA_OPTS
中配置的 JMX 端口一致 - 所有配置文件需存放在同一目录(示例路径:
/monitor/jmx/
)
4.2 JMX 输入插件
在 Logstash 安装目录执行命令安装插件:
bin/logstash-plugin install logstash-input-jmx
创建 Logstash 配置文件 jmx.conf
:
input {
jmx {
path => "/monitor/jmx"
polling_frequency => 60
type => "jmx"
nb_thread => 3
}
}
output {
elasticsearch {
hosts => [ "localhost:9200" }
}
}
启动 Logstash 并指定配置文件:
bin/logstash -f jmx.conf
✅ 验证点:
- 配置文件需存放在 Logstash 根目录(示例路径:
/opt/logstash
)
5. 可视化 JMX 指标
最后在 Kibana 中创建 JMX 指标的可视化图表,以堆内存使用监控为例。
5.1 创建新搜索
创建堆内存使用相关的搜索:
- 点击搜索栏的"New Search"图标
- 输入查询语句:
metric_path:reddit.jmx.elasticsearch.Memory.HeapMemoryUsage.used
- 从侧边栏添加
metric_path
和metric_value_number
字段 - 点击"Save Search"并命名为"used memory"
❌ 踩坑提示:若侧边栏字段显示为未索引,需在"Settings"标签页刷新 logstash-*
索引的字段列表。
5.2 创建折线图
创建堆内存使用趋势的折线图:
- 进入"Visualize"标签页
- 选择"Line Chart"
- 选择"From saved search"
- 选择之前创建的"used memory"搜索
配置坐标轴:
- Y 轴:
- 聚合方式:Average
- 字段:
metric_value_number
- X 轴:选择"Date Histogram"
- 保存可视化图表
5.3 使用脚本字段
由于内存使用量以字节为单位显示,可读性差。通过添加脚本字段转换数据格式:
- 进入"Settings" > "Indices" >
logstash-*
索引 - 切换到"Scripted fields"标签页
- 点击"Add Scripted Field"
- 配置字段:
- 名称:
metric_value_formatted
- 格式:Bytes
- 脚本内容:
doc['metric_value_number'].value
- 名称:
将搜索和可视化图表中的字段从 metric_value_number
替换为 metric_value_formatted
,数据将以易读格式展示。
6. 总结
至此,我们完成了 JMX 数据接入 Elastic Stack 的全流程配置。整个过程并不复杂,关键在于正确配置 JMX 端点和 Logstash 管道。一旦 JMX 数据在 Kibana 中可视化,就能构建强大的生产环境监控仪表盘,为系统运维提供有力支持。